import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest" ;
const mocks = vi.hoisted(() => ({
gatewayCall: vi.fn(),
createAgentToAgentPolicy: vi.fn(() => ({})),
createSessionVisibilityGuard: vi.fn(async () => ({
check: () => ({ allowed: true }),
})),
resolveEffectiveSessionToolsVisibility: vi.fn(() => "all" ),
resolveSandboxedSessionToolContext: vi.fn(() => ({
mainKey: "main" ,
alias: "main" ,
requesterInternalKey: undefined,
restrictToSpawned: false ,
})),
}));
vi.mock("../../gateway/call.js" , () => ({
callGateway: (opts: unknown) => mocks.gatewayCall(opts),
}));
vi.mock("./sessions-helpers.js" , async (importActual) => {
const actual = await importActual<typeof import ("./sessions-helpers.js" )>();
return {
...actual,
createAgentToAgentPolicy: () => mocks.createAgentToAgentPolicy(),
createSessionVisibilityGuard: async () => await mocks.createSessionVisibilityGuard(),
resolveEffectiveSessionToolsVisibility: () => mocks.resolveEffectiveSessionToolsVisibility(),
resolveSandboxedSessionToolContext: () => mocks.resolveSandboxedSessionToolContext(),
};
});
type SessionsListDetails = {
sessions?: Array<{
deliveryContext?: {
accountId?: string;
channel?: string;
threadId?: string | number;
to?: string;
};
elevatedLevel?: string;
fastMode?: boolean ;
reasoningLevel?: string;
responseUsage?: string;
thinkingLevel?: string;
verboseLevel?: string;
}>;
};
function getSessionsListDetails(result: { details?: unknown }): SessionsListDetails {
return result.details as SessionsListDetails;
}
describe("sessions-list-tool" , () => {
let createSessionsListTool: typeof import ("./sessions-list-tool.js" ).createSessionsListTool;
beforeAll(async () => {
({ createSessionsListTool } = await import ("./sessions-list-tool.js" ));
});
beforeEach(() => {
vi.clearAllMocks();
mocks.createAgentToAgentPolicy.mockReturnValue({});
mocks.createSessionVisibilityGuard.mockResolvedValue({
check: () => ({ allowed: true }),
});
mocks.resolveEffectiveSessionToolsVisibility.mockReturnValue("all" );
mocks.resolveSandboxedSessionToolContext.mockReturnValue({
mainKey: "main" ,
alias: "main" ,
requesterInternalKey: undefined,
restrictToSpawned: false ,
});
});
it("keeps deliveryContext.threadId in sessions_list results" , async () => {
mocks.gatewayCall.mockImplementation(async (opts: unknown) => {
const request = opts as { method?: string };
if (request.method === "sessions.list" ) {
return {
path: "/tmp/sessions.json" ,
sessions: [
{
key: "agent:main:dashboard:child" ,
kind: "direct" ,
sessionId: "sess-dashboard-child" ,
deliveryContext: {
channel: "discord" ,
to: "discord:child" ,
accountId: "acct-1" ,
threadId: "thread-1" ,
},
},
{
key: "agent:main:telegram:topic" ,
kind: "direct" ,
sessionId: "sess-telegram-topic" ,
deliveryContext: {
channel: "telegram" ,
to: "telegram:topic" ,
accountId: "acct-2" ,
threadId: 271 ,
},
},
],
};
}
return {};
});
const tool = createSessionsListTool({ config: {} as never });
const result = await tool.execute("call-1" , {});
const details = getSessionsListDetails(result);
expect(details.sessions?.[0 ]?.deliveryContext).toEqual({
channel: "discord" ,
to: "discord:child" ,
accountId: "acct-1" ,
threadId: "thread-1" ,
});
expect(details.sessions?.[1 ]?.deliveryContext).toEqual({
channel: "telegram" ,
to: "telegram:topic" ,
accountId: "acct-2" ,
threadId: 271 ,
});
});
it("keeps numeric deliveryContext.threadId in sessions_list results" , async () => {
mocks.gatewayCall.mockImplementation(async (opts: unknown) => {
const request = opts as { method?: string };
if (request.method === "sessions.list" ) {
return {
path: "/tmp/sessions.json" ,
sessions: [
{
key: "agent:main:telegram:group:-100123:topic:99" ,
kind: "group" ,
sessionId: "sess-telegram-topic" ,
deliveryContext: {
channel: "telegram" ,
to: "-100123" ,
accountId: "acct-1" ,
threadId: 99 ,
},
},
],
};
}
return {};
});
const tool = createSessionsListTool({ config: {} as never });
const result = await tool.execute("call-2" , {});
const details = getSessionsListDetails(result);
expect(details.sessions?.[0 ]?.deliveryContext).toEqual({
channel: "telegram" ,
to: "-100123" ,
accountId: "acct-1" ,
threadId: 99 ,
});
});
it("keeps live session setting metadata in sessions_list results" , async () => {
mocks.gatewayCall.mockImplementation(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 {};
});
const tool = createSessionsListTool({ config: {} as never });
const result = await tool.execute("call-3" , {});
const details = getSessionsListDetails(result);
expect(details.sessions?.[0 ]).toMatchObject({
thinkingLevel: "high" ,
fastMode: true ,
verboseLevel: "on" ,
reasoningLevel: "deep" ,
elevatedLevel: "on" ,
responseUsage: "full" ,
});
});
});
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland