diff --git a/src/agents/tools/sessions-helpers.ts b/src/agents/tools/sessions-helpers.ts index c8941546909..33b3ebc5dd8 100644 --- a/src/agents/tools/sessions-helpers.ts +++ b/src/agents/tools/sessions-helpers.ts @@ -73,7 +73,11 @@ export type SessionListRow = { runtimeMs?: number; childSessions?: string[]; thinkingLevel?: string; + fastMode?: boolean; verboseLevel?: string; + reasoningLevel?: string; + elevatedLevel?: string; + responseUsage?: string; systemSent?: boolean; abortedLastRun?: boolean; sendPolicy?: string; diff --git a/src/agents/tools/sessions-list-tool.test.ts b/src/agents/tools/sessions-list-tool.test.ts index db3fe1da012..e27ceaf68f9 100644 --- a/src/agents/tools/sessions-list-tool.test.ts +++ b/src/agents/tools/sessions-list-tool.test.ts @@ -73,4 +73,75 @@ describe("sessions-list-tool", () => { threadId: "thread-1", }); }); + + it("keeps live session setting metadata in sessions_list results", async () => { + const gatewayCallMock = vi.fn(async (opts: unknown) => { + const request = opts as { method?: string }; + if (request.method === "sessions.list") { + return { + path: "/tmp/sessions.json", + sessions: [ + { + key: "main", + kind: "direct", + sessionId: "sess-main", + thinkingLevel: "high", + fastMode: true, + verboseLevel: "on", + reasoningLevel: "deep", + elevatedLevel: "on", + responseUsage: "full", + }, + ], + }; + } + return {}; + }); + + vi.doMock("../../gateway/call.js", () => ({ + callGateway: gatewayCallMock, + })); + vi.doMock("./sessions-helpers.js", async () => { + const actual = + await vi.importActual("./sessions-helpers.js"); + return { + ...actual, + createAgentToAgentPolicy: () => ({}), + createSessionVisibilityGuard: async () => ({ + check: () => ({ allowed: true }), + }), + resolveEffectiveSessionToolsVisibility: () => "all", + resolveSandboxedSessionToolContext: () => ({ + mainKey: "main", + alias: "main", + requesterInternalKey: undefined, + restrictToSpawned: false, + }), + }; + }); + + const { createSessionsListTool } = await import("./sessions-list-tool.js"); + const tool = createSessionsListTool({ config: {} as never }); + + const result = await tool.execute("call-2", {}); + const details = result.details as { + sessions?: Array<{ + thinkingLevel?: string; + fastMode?: boolean; + verboseLevel?: string; + reasoningLevel?: string; + elevatedLevel?: string; + responseUsage?: string; + }>; + }; + + expect(details.sessions?.[0]).toMatchObject({ + thinkingLevel: "high", + fastMode: true, + verboseLevel: "on", + reasoningLevel: "deep", + elevatedLevel: "on", + responseUsage: "full", + }); + }); }); diff --git a/src/agents/tools/sessions-list-tool.ts b/src/agents/tools/sessions-list-tool.ts index d00f347de29..0b494a6d0ce 100644 --- a/src/agents/tools/sessions-list-tool.ts +++ b/src/agents/tools/sessions-list-tool.ts @@ -251,7 +251,12 @@ export function createSessionsListTool(opts?: { ) : undefined, thinkingLevel: typeof entry.thinkingLevel === "string" ? entry.thinkingLevel : undefined, + fastMode: typeof entry.fastMode === "boolean" ? entry.fastMode : undefined, verboseLevel: typeof entry.verboseLevel === "string" ? entry.verboseLevel : undefined, + reasoningLevel: + typeof entry.reasoningLevel === "string" ? entry.reasoningLevel : undefined, + elevatedLevel: typeof entry.elevatedLevel === "string" ? entry.elevatedLevel : undefined, + responseUsage: typeof entry.responseUsage === "string" ? entry.responseUsage : undefined, systemSent: typeof entry.systemSent === "boolean" ? entry.systemSent : undefined, abortedLastRun: typeof entry.abortedLastRun === "boolean" ? entry.abortedLastRun : undefined,