This commit is contained in:
lewis 2026-01-30 09:46:18 +08:00 committed by GitHub
commit 2468505d2f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 8 deletions

View File

@ -104,6 +104,30 @@ describe("session_status tool", () => {
expect(details.statusText).not.toContain("OAuth/token status");
});
it("accepts undefined args and defaults to current session", async () => {
loadSessionStoreMock.mockReset();
updateSessionStoreMock.mockReset();
loadSessionStoreMock.mockReturnValue({
main: {
sessionId: "s1",
updatedAt: 10,
},
});
const tool = createMoltbotTools({ agentSessionKey: "main" }).find(
(candidate) => candidate.name === "session_status",
);
expect(tool).toBeDefined();
if (!tool) throw new Error("missing session_status tool");
// Test with undefined args (the issue scenario)
const result = await tool.execute("call1b", undefined as unknown as Record<string, unknown>);
const details = result.details as { ok?: boolean; statusText?: string };
expect(details.ok).toBe(true);
expect(details.statusText).toContain("Moltbot");
expect(details.statusText).toContain("🧠 Model:");
});
it("errors for unknown session keys", async () => {
loadSessionStoreMock.mockReset();
updateSessionStoreMock.mockReset();

View File

@ -48,10 +48,13 @@ import {
} from "./sessions-helpers.js";
import { loadCombinedSessionStoreForGateway } from "../../gateway/session-utils.js";
const SessionStatusToolSchema = Type.Object({
sessionKey: Type.Optional(Type.String()),
model: Type.Optional(Type.String()),
});
const SessionStatusToolSchema = Type.Object(
{
sessionKey: Type.Optional(Type.String()),
model: Type.Optional(Type.String()),
},
{ additionalProperties: false },
);
function formatApiKeySnippet(apiKey: string): string {
const compact = apiKey.replace(/\s+/g, "");
@ -241,15 +244,16 @@ export function createSessionStatusTool(opts?: {
"Show a /status-equivalent session status card (usage + time + cost when available). Use for model-use questions (📊 session_status). Optional: set per-session model override (model=default resets overrides).",
parameters: SessionStatusToolSchema,
execute: async (_toolCallId, args) => {
const params = args as Record<string, unknown>;
const params = (args ?? {}) as Record<string, unknown>;
const cfg = opts?.config ?? loadConfig();
const { mainKey, alias } = resolveMainSessionAlias(cfg);
const a2aPolicy = createAgentToAgentPolicy(cfg);
const requestedKeyParam = readStringParam(params, "sessionKey");
let requestedKeyRaw = requestedKeyParam ?? opts?.agentSessionKey;
if (!requestedKeyRaw?.trim()) {
throw new Error("sessionKey required");
let requestedKeyRaw = requestedKeyParam ?? opts?.agentSessionKey ?? "";
if (!requestedKeyRaw.trim()) {
// Default to current session if no key provided
requestedKeyRaw = opts?.agentSessionKey ?? mainKey;
}
const requesterAgentId = resolveAgentIdFromSessionKey(