fix (agents): suppress NO_REPLY final text when message tool already sent text

This commit is contained in:
Vignesh Natarajan
2026-02-14 21:05:19 -08:00
parent 758fbc2fcc
commit 356ce7647f
2 changed files with 51 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
import type { AgentEvent, AgentMessage } from "@mariozechner/pi-agent-core";
import type { EmbeddedPiSubscribeContext } from "./pi-embedded-subscribe.handlers.types.js";
import { parseReplyDirectives } from "../auto-reply/reply/reply-directives.js";
import { SILENT_REPLY_TOKEN } from "../auto-reply/tokens.js";
import { emitAgentEvent } from "../infra/agent-events.js";
import { createInlineCodeState } from "../markdown/code-spans.js";
import {
@@ -29,6 +30,21 @@ const stripTrailingDirective = (text: string): string => {
return text.slice(0, openIndex);
};
export function resolveSilentReplyFallbackText(params: {
text: string;
messagingToolSentTexts: string[];
}): string {
const trimmed = params.text.trim();
if (trimmed !== SILENT_REPLY_TOKEN) {
return params.text;
}
const fallback = params.messagingToolSentTexts.at(-1)?.trim();
if (!fallback) {
return params.text;
}
return fallback;
}
export function handleMessageStart(
ctx: EmbeddedPiSubscribeContext,
evt: AgentEvent & { message: AgentMessage },
@@ -214,7 +230,10 @@ export function handleMessageEnd(
rawThinking: extractAssistantThinking(assistantMessage),
});
const text = ctx.stripBlockTags(rawText, { thinking: false, final: false });
const text = resolveSilentReplyFallbackText({
text: ctx.stripBlockTags(rawText, { thinking: false, final: false }),
messagingToolSentTexts: ctx.state.messagingToolSentTexts,
});
const rawThinking =
ctx.state.includeReasoning || ctx.state.streamReasoning
? extractAssistantThinking(assistantMessage) || extractThinkingFromTaggedText(rawText)