mirror of
https://github.com/farcasclaudiu/openclaw.git
synced 2026-06-28 21:01:43 +03:00
fix: tighten thread-clear and telegram retry guards
This commit is contained in:
@@ -176,7 +176,7 @@ describe("sessions", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("updateLastRoute clears threadId when deliveryContext explicitly omits it", async () => {
|
it("updateLastRoute clears threadId when explicit route omits threadId", async () => {
|
||||||
const mainSessionKey = "agent:main:main";
|
const mainSessionKey = "agent:main:main";
|
||||||
const dir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-sessions-"));
|
const dir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-sessions-"));
|
||||||
const storePath = path.join(dir, "sessions.json");
|
const storePath = path.join(dir, "sessions.json");
|
||||||
@@ -209,7 +209,6 @@ describe("sessions", () => {
|
|||||||
deliveryContext: {
|
deliveryContext: {
|
||||||
channel: "telegram",
|
channel: "telegram",
|
||||||
to: "222",
|
to: "222",
|
||||||
threadId: undefined,
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -440,10 +440,21 @@ export async function updateLastRoute(params: {
|
|||||||
});
|
});
|
||||||
const mergedInput = mergeDeliveryContext(explicitContext, inlineContext);
|
const mergedInput = mergeDeliveryContext(explicitContext, inlineContext);
|
||||||
const explicitDeliveryContext = params.deliveryContext;
|
const explicitDeliveryContext = params.deliveryContext;
|
||||||
const clearThreadFromFallback =
|
const explicitThreadFromDeliveryContext =
|
||||||
explicitDeliveryContext != null &&
|
explicitDeliveryContext != null &&
|
||||||
Object.prototype.hasOwnProperty.call(explicitDeliveryContext, "threadId") &&
|
Object.prototype.hasOwnProperty.call(explicitDeliveryContext, "threadId")
|
||||||
explicitDeliveryContext.threadId == null;
|
? explicitDeliveryContext.threadId
|
||||||
|
: undefined;
|
||||||
|
const explicitThreadValue =
|
||||||
|
explicitThreadFromDeliveryContext ??
|
||||||
|
(threadId != null && threadId !== "" ? threadId : undefined);
|
||||||
|
const explicitRouteProvided = Boolean(
|
||||||
|
explicitContext?.channel ||
|
||||||
|
explicitContext?.to ||
|
||||||
|
inlineContext?.channel ||
|
||||||
|
inlineContext?.to,
|
||||||
|
);
|
||||||
|
const clearThreadFromFallback = explicitRouteProvided && explicitThreadValue == null;
|
||||||
const fallbackContext = clearThreadFromFallback
|
const fallbackContext = clearThreadFromFallback
|
||||||
? removeThreadFromDeliveryContext(deliveryContextFromSession(existing))
|
? removeThreadFromDeliveryContext(deliveryContextFromSession(existing))
|
||||||
: deliveryContextFromSession(existing);
|
: deliveryContextFromSession(existing);
|
||||||
|
|||||||
@@ -508,6 +508,23 @@ describe("sendMessageTelegram", () => {
|
|||||||
expect(res.messageId).toBe("58");
|
expect(res.messageId).toBe("58");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("does not retry thread-not-found when no message_thread_id was provided", async () => {
|
||||||
|
const chatId = "123";
|
||||||
|
const threadErr = new Error("400: Bad Request: message thread not found");
|
||||||
|
const sendMessage = vi.fn().mockRejectedValueOnce(threadErr);
|
||||||
|
const api = { sendMessage } as unknown as {
|
||||||
|
sendMessage: typeof sendMessage;
|
||||||
|
};
|
||||||
|
|
||||||
|
await expect(
|
||||||
|
sendMessageTelegram(chatId, "hello forum", {
|
||||||
|
token: "tok",
|
||||||
|
api,
|
||||||
|
}),
|
||||||
|
).rejects.toThrow("message thread not found");
|
||||||
|
expect(sendMessage).toHaveBeenCalledTimes(1);
|
||||||
|
});
|
||||||
|
|
||||||
it("sets disable_notification when silent is true", async () => {
|
it("sets disable_notification when silent is true", async () => {
|
||||||
const chatId = "123";
|
const chatId = "123";
|
||||||
const sendMessage = vi.fn().mockResolvedValue({
|
const sendMessage = vi.fn().mockResolvedValue({
|
||||||
|
|||||||
+11
-1
@@ -179,7 +179,17 @@ function isTelegramThreadNotFoundError(err: unknown): boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function hasMessageThreadIdParam(params?: Record<string, unknown>): boolean {
|
function hasMessageThreadIdParam(params?: Record<string, unknown>): boolean {
|
||||||
return Boolean(params && Object.hasOwn(params, "message_thread_id"));
|
if (!params) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const value = params.message_thread_id;
|
||||||
|
if (typeof value === "number") {
|
||||||
|
return Number.isFinite(value);
|
||||||
|
}
|
||||||
|
if (typeof value === "string") {
|
||||||
|
return value.trim().length > 0;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeMessageThreadIdParam(
|
function removeMessageThreadIdParam(
|
||||||
|
|||||||
Reference in New Issue
Block a user