fix(channels): quiet disabled preview tool progress

This commit is contained in:
Vincent Koc
2026-05-03 18:32:53 -07:00
parent 828d071ada
commit df39e611f8
5 changed files with 12 additions and 5 deletions

View File

@@ -62,6 +62,7 @@ Docs: https://docs.openclaw.ai
- Google Meet: avoid treating repeated participant words as multiple assistant-overlap matches when suppressing realtime echo transcripts. Thanks @vincentkoc.
- QA/cache: require the full `CACHE-OK <suffix>` marker before live cache probes stop retrying, so suffix-only prose cannot hide a broken probe response. Thanks @vincentkoc.
- Slack/Matrix: avoid creating blank progress-draft messages when `streaming.progress.label=false` and progress tool lines are disabled. Thanks @vincentkoc.
- Slack/Discord: suppress standalone tool-progress chatter when partial preview streaming has `streaming.preview.toolProgress: false`, matching the documented quiet-preview behavior. Thanks @vincentkoc.
- QA/Matrix: keep the mock OpenAI tool-progress provider aligned with exact-marker Matrix prompts so the hardened live preview scenario still forces a deterministic read before final delivery. Thanks @vincentkoc.
- Google Meet: make realtime talk-back agent-driven by default with `realtime.strategy: "agent"`, keep the previous direct bidirectional model behavior available as `realtime.strategy: "bidi"`, route the Meet tab speaker output to `BlackHole 2ch` automatically for local Chrome realtime joins, coalesce nearby speech transcript fragments before consulting the agent, and avoid cutting off agent speech from server VAD or stale playback pipe errors.
- Google Meet: suppress queued assistant playback and assistant-like transcript echoes from the realtime input path, so the meeting does not hear the agent's own speech as a new user turn and loop or cut itself off.

View File

@@ -1561,7 +1561,7 @@ describe("processDiscordMessage draft streaming", () => {
expect(draftStream.forceNewMessage).not.toHaveBeenCalled();
});
it("keeps standalone Discord tool progress when partial preview lines are disabled", async () => {
it("suppresses standalone Discord tool progress when partial preview lines are disabled", async () => {
createMockDraftStreamForTest();
dispatchInboundMessage.mockImplementationOnce(async () => createNoQueuedDispatchResult());
@@ -1581,7 +1581,7 @@ describe("processDiscordMessage draft streaming", () => {
expect(
dispatchInboundMessage.mock.calls[0]?.[0]?.replyOptions?.suppressDefaultToolProgressMessages,
).toBeUndefined();
).toBe(true);
});
it("strips reply tags from preview partials", async () => {

View File

@@ -301,6 +301,9 @@ vi.mock("openclaw/plugin-sdk/channel-streaming", () => ({
if (entry?.streaming?.mode === "progress") {
return true;
}
if (options?.draftStreamActive === true) {
return true;
}
return options?.previewToolProgressEnabled ?? true;
},
isChannelProgressDraftWorkToolName: (name?: string) =>
@@ -765,7 +768,7 @@ describe("dispatchPreparedSlackMessage preview fallback", () => {
expect(draftStream.update).not.toHaveBeenCalled();
});
it("keeps standalone Slack tool progress when partial preview lines are disabled", async () => {
it("suppresses standalone Slack tool progress when partial preview lines are disabled", async () => {
mockedSlackStreamingMode = "partial";
mockedSlackDraftMode = "replace";
mockedDispatchSequence = [];
@@ -776,7 +779,7 @@ describe("dispatchPreparedSlackMessage preview fallback", () => {
}),
);
expect(capturedReplyOptions?.suppressDefaultToolProgressMessages).toBeUndefined();
expect(capturedReplyOptions?.suppressDefaultToolProgressMessages).toBe(true);
expect(capturedReplyOptions?.onItemEvent).toBeDefined();
});

View File

@@ -118,7 +118,7 @@ describe("channel-streaming", () => {
{ streaming: { mode: "partial", preview: { toolProgress: false } } },
{ draftStreamActive: true },
),
).toBe(false);
).toBe(true);
expect(
resolveChannelStreamingSuppressDefaultToolProgressMessages(
{ streaming: { mode: "partial", preview: { toolProgress: false } } },

View File

@@ -448,6 +448,9 @@ export function resolveChannelStreamingSuppressDefaultToolProgressMessages(
if (mode === "progress") {
return true;
}
if (options?.draftStreamActive === true) {
return true;
}
return options?.previewToolProgressEnabled ?? resolveChannelStreamingPreviewToolProgress(entry);
}