fix(telegram): stop typing after tool results (#322)

Thanks @AbhisekBasu1.
This commit is contained in:
Abhi
2026-01-07 00:24:08 +05:30
committed by GitHub
parent 2f24ea492b
commit bdf597eb95

View File

@@ -106,6 +106,7 @@ export async function runReplyAgent(params: {
const streamedPayloadKeys = new Set<string>();
const pendingStreamedPayloadKeys = new Set<string>();
const pendingBlockTasks = new Set<Promise<void>>();
const pendingToolTasks = new Set<Promise<void>>();
let didStreamBlockReply = false;
const buildPayloadKey = (payload: ReplyPayload) => {
const text = payload.text?.trim() ?? "";
@@ -312,7 +313,8 @@ export async function runReplyAgent(params: {
: undefined,
shouldEmitToolResult,
onToolResult: opts?.onToolResult
? async (payload) => {
? (payload) => {
const task = (async () => {
let text = payload.text;
if (!isHeartbeat && text?.includes("HEARTBEAT_OK")) {
const stripped = stripHeartbeatToken(text, {
@@ -339,6 +341,14 @@ export async function runReplyAgent(params: {
text,
mediaUrls: payload.mediaUrls,
});
})()
.catch((err) => {
logVerbose(`tool result delivery failed: ${String(err)}`);
})
.finally(() => {
pendingToolTasks.delete(task);
});
pendingToolTasks.add(task);
}
: undefined,
}),
@@ -378,6 +388,9 @@ export async function runReplyAgent(params: {
if (pendingBlockTasks.size > 0) {
await Promise.allSettled(pendingBlockTasks);
}
if (pendingToolTasks.size > 0) {
await Promise.allSettled(pendingToolTasks);
}
const sanitizedPayloads = isHeartbeat
? payloadArray