

























@@ -398,6 +398,10 @@ describe("dispatchTelegramMessage draft streaming", () => {
398398return expectRecordFields(mockCallArg(dispatchReplyWithBufferedBlockDispatcher), expected);
399399}
400400401+function telegramHtmlPreview(html: string) {
402+return { text: html, parseMode: "HTML" as const };
403+}
404+401405function createContext(overrides?: Partial<TelegramMessageContext>): TelegramMessageContext {
402406const base = {
403407ctxPayload: {},
@@ -2435,7 +2439,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
24352439expect(answerDraftStream.update).toHaveBeenNthCalledWith(1, "Site A shows X.");
24362440expect(answerDraftStream.update).toHaveBeenNthCalledWith(2, "Site A shows X.");
24372441expect(answerDraftStream.updatePreview).toHaveBeenCalledWith(
2438-expect.objectContaining({ text: expect.stringMatching(/`🛠️ Exec`$/) }),
2442+expect.objectContaining({ text: expect.stringMatching(/<b>🛠️ Exec<\/b>$/) }),
24392443);
24402444expect(answerDraftStream.update).toHaveBeenNthCalledWith(3, "Final answer");
24412445expect(answerDraftStream.clear).toHaveBeenCalledTimes(1);
@@ -2462,7 +2466,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
2462246624632467expect(answerDraftStream.update).toHaveBeenNthCalledWith(1, "Site A shows X.");
24642468expect(answerDraftStream.updatePreview).toHaveBeenCalledWith(
2465-expect.objectContaining({ text: expect.stringMatching(/`🛠️ Exec`$/) }),
2469+expect.objectContaining({ text: expect.stringMatching(/<b>🛠️ Exec<\/b>$/) }),
24662470);
24672471expect(answerDraftStream.update).toHaveBeenNthCalledWith(2, "Site B shows Y.");
24682472expect(answerDraftStream.update).toHaveBeenNthCalledWith(3, "Final answer");
@@ -2504,7 +2508,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
25042508await dispatchWithContext({ context: createContext() });
2505250925062510expect(answerDraftStream.updatePreview).toHaveBeenCalledWith(
2507-expect.objectContaining({ text: expect.stringMatching(/`🛠️ Exec`$/) }),
2511+expect.objectContaining({ text: expect.stringMatching(/<b>🛠️ Exec<\/b>$/) }),
25082512);
25092513expect(answerDraftStream.update).toHaveBeenNthCalledWith(1, "Branch is up to date");
25102514expect(answerDraftStream.forceNewMessage).toHaveBeenCalledTimes(1);
@@ -2530,7 +2534,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
25302534await dispatchWithContext({ context: createContext() });
2531253525322536expect(answerDraftStream.updatePreview).toHaveBeenCalledWith(
2533-expect.objectContaining({ text: expect.stringMatching(/`🛠️ Exec`$/) }),
2537+expect.objectContaining({ text: expect.stringMatching(/<b>🛠️ Exec<\/b>$/) }),
25342538);
25352539expect(answerDraftStream.update).toHaveBeenNthCalledWith(1, "Branch is up to date");
25362540expect(answerDraftStream.forceNewMessage).toHaveBeenCalledTimes(1);
@@ -2584,13 +2588,11 @@ describe("dispatchTelegramMessage draft streaming", () => {
25842588telegramCfg: { streaming: { mode: "progress" } },
25852589});
258625902587-expect(answerDraftStream.updatePreview).toHaveBeenCalledWith({
2588-text: "Cracking\n\n`🛠️ Exec`\n`🛠️ git rev-parse --abbrev-ref HEAD`",
2589-richMessage: {
2590-html: "<b>Cracking</b><br><b>🛠️ Exec</b><br><b>🛠️ Exec</b> <code>git rev-parse --abbrev-ref HEAD</code>",
2591-skip_entity_detection: true,
2592-},
2593-});
2591+expect(answerDraftStream.updatePreview).toHaveBeenCalledWith(
2592+telegramHtmlPreview(
2593+"<b>Cracking</b><br><b>🛠️ Exec</b><br><b>🛠️ Exec</b> <code>git rev-parse --abbrev-ref HEAD</code>",
2594+),
2595+);
25942596expect(answerDraftStream.update).not.toHaveBeenCalledWith("Branch is up to date");
25952597expect(answerDraftStream.forceNewMessage).toHaveBeenCalledTimes(1);
25962598expect(answerDraftStream.clear).toHaveBeenCalledTimes(1);
@@ -2627,10 +2629,9 @@ describe("dispatchTelegramMessage draft streaming", () => {
26272629const lastUpdate = answerDraftStream.updatePreview.mock.calls.at(-1)?.[0];
26282630expect(lastUpdate?.text).toContain("install dependencies");
26292631expect(lastUpdate?.text).not.toContain("completed");
2630-expect(lastUpdate?.richMessage).toEqual({
2631-html: "<b>Shelling</b><br><b>🛠️ Exec</b> <code>install dependencies</code>",
2632-skip_entity_detection: true,
2633-});
2632+expect(lastUpdate).toEqual(
2633+telegramHtmlPreview("<b>Shelling</b><br><b>🛠️ Exec</b> <code>install dependencies</code>"),
2634+);
26342635});
2635263626362637it("sends trailing verbose status after a progress-mode final answer", async () => {
@@ -2650,13 +2651,9 @@ describe("dispatchTelegramMessage draft streaming", () => {
26502651telegramCfg: { streaming: { mode: "progress" } },
26512652});
265226532653-expect(answerDraftStream.updatePreview).toHaveBeenCalledWith({
2654-text: "Cracking\n\n`🛠️ Exec`",
2655-richMessage: {
2656-html: "<b>Cracking</b><br><b>🛠️ Exec</b>",
2657-skip_entity_detection: true,
2658-},
2659-});
2654+expect(answerDraftStream.updatePreview).toHaveBeenCalledWith(
2655+telegramHtmlPreview("<b>Cracking</b><br><b>🛠️ Exec</b>"),
2656+);
26602657expect(answerDraftStream.update).toHaveBeenCalledTimes(1);
26612658expect(answerDraftStream.update).toHaveBeenNthCalledWith(1, trailingFinalStatusText);
26622659expect(answerDraftStream.forceNewMessage).toHaveBeenCalledTimes(2);
@@ -2691,7 +2688,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
26912688);
26922689expect(answerDraftStream.updatePreview).toHaveBeenLastCalledWith(
26932690expect.objectContaining({
2694-text: "Shelling\n\n`🛠️ Exec`\n`🔎 Web Search: docs lookup`",
2691+text: "<b>Shelling</b><br><b>🛠️ Exec</b><br><b>🔎 Web Search</b> <code>docs lookup</code>",
26952692}),
26962693);
26972694expect(deliverReplies).not.toHaveBeenCalled();
@@ -2716,7 +2713,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
2716271327172714expect(answerDraftStream.updatePreview).toHaveBeenCalledTimes(1);
27182715expect(answerDraftStream.updatePreview).toHaveBeenCalledWith(
2719-expect.objectContaining({ text: "Shelling\n\n`🛠️ Exec`" }),
2716+telegramHtmlPreview("<b>Shelling</b><br><b>🛠️ Exec</b>"),
27202717);
27212718expectDeliveredReply(0, { text: "Branch is up to date" });
27222719});
@@ -2746,7 +2743,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
2746274327472744expect(answerDraftStream.updatePreview).toHaveBeenCalledTimes(1);
27482745expect(answerDraftStream.updatePreview).toHaveBeenCalledWith(
2749-expect.objectContaining({ text: "Shelling\n\n`🛠️ Exec`" }),
2746+telegramHtmlPreview("<b>Shelling</b><br><b>🛠️ Exec</b>"),
27502747);
27512748expectDeliveredReply(0, { text: "Branch is up to date" });
27522749});
@@ -2780,7 +2777,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
2780277727812778expect(answerDraftStream.updatePreview).toHaveBeenCalledTimes(1);
27822779expect(answerDraftStream.updatePreview).toHaveBeenCalledWith(
2783-expect.objectContaining({ text: "Shelling\n\n`🛠️ Exec`" }),
2780+telegramHtmlPreview("<b>Shelling</b><br><b>🛠️ Exec</b>"),
27842781);
27852782expectDeliveredReply(0, { text: "Branch is up to date" });
27862783});
@@ -2929,13 +2926,9 @@ describe("dispatchTelegramMessage draft streaming", () => {
29292926telegramCfg: { streaming: { mode: "progress", progress: { label: "Shelling" } } },
29302927});
293129282932-expect(draftStream.updatePreview).toHaveBeenCalledWith({
2933-text: "Shelling\n\n`🛠️ Exec`",
2934-richMessage: {
2935-html: "<b>Shelling</b><br><b>🛠️ Exec</b>",
2936-skip_entity_detection: true,
2937-},
2938-});
2929+expect(draftStream.updatePreview).toHaveBeenCalledWith(
2930+telegramHtmlPreview("<b>Shelling</b><br><b>🛠️ Exec</b>"),
2931+);
29392932expect(draftStream.flush).toHaveBeenCalled();
29402933});
29412934@@ -2973,13 +2966,11 @@ describe("dispatchTelegramMessage draft streaming", () => {
29732966},
29742967});
297529682976-expect(draftStream.updatePreview).toHaveBeenLastCalledWith({
2977-text: "Shelling\n\n`🛠️ exit 2; command false`",
2978-richMessage: {
2979-html: "<b>Shelling</b><br><b>🛠️ Exec</b> <code>command false</code> <i>exit 2</i>",
2980-skip_entity_detection: true,
2981-},
2982-});
2969+expect(draftStream.updatePreview).toHaveBeenLastCalledWith(
2970+telegramHtmlPreview(
2971+"<b>Shelling</b><br><b>🛠️ Exec</b> <code>command false</code> <i>exit 2</i>",
2972+),
2973+);
29832974});
2984297529852976it("hides command titles in Telegram status-only progress draft previews", async () => {
@@ -3016,13 +3007,9 @@ describe("dispatchTelegramMessage draft streaming", () => {
30163007},
30173008});
301830093019-expect(draftStream.updatePreview).toHaveBeenLastCalledWith({
3020-text: "Shelling\n\n`🛠️ exit 2`",
3021-richMessage: {
3022-html: "<b>Shelling</b><br><b>🛠️ Exec</b> <code>exit 2</code>",
3023-skip_entity_detection: true,
3024-},
3025-});
3010+expect(draftStream.updatePreview).toHaveBeenLastCalledWith(
3011+telegramHtmlPreview("<b>Shelling</b><br><b>🛠️ Exec</b> <code>exit 2</code>"),
3012+);
30263013});
3027301430283015it("composes streamed reasoning with tool progress in Telegram progress drafts", async () => {
@@ -3043,13 +3030,9 @@ describe("dispatchTelegramMessage draft streaming", () => {
30433030});
3044303130453032expect(createTelegramDraftStream).toHaveBeenCalledTimes(1);
3046-expect(draftStream.updatePreview).toHaveBeenCalledWith({
3047-text: "Shelling\n\n`🛠️ Exec`\n• _Checking files_",
3048-richMessage: {
3049-html: "<b>Shelling</b><br><b>🛠️ Exec</b><br><i>Checking files</i>",
3050-skip_entity_detection: true,
3051-},
3052-});
3033+expect(draftStream.updatePreview).toHaveBeenCalledWith(
3034+telegramHtmlPreview("<b>Shelling</b><br><b>🛠️ Exec</b><br><i>Checking files</i>"),
3035+);
30533036});
3054303730553038it("renders configured Telegram commentary progress from preamble item events", async () => {
@@ -3076,13 +3059,9 @@ describe("dispatchTelegramMessage draft streaming", () => {
30763059},
30773060});
307830613079-expect(draftStream.updatePreview).toHaveBeenCalledWith({
3080-text: "Shelling\n\n_Checking recent context_",
3081-richMessage: {
3082-html: "<b>Shelling</b><br><i>Checking recent context</i>",
3083-skip_entity_detection: true,
3084-},
3085-});
3062+expect(draftStream.updatePreview).toHaveBeenCalledWith(
3063+telegramHtmlPreview("<b>Shelling</b><br><i>Checking recent context</i>"),
3064+);
30863065});
3087306630883067it("suppresses Telegram preamble progress when commentary is disabled", async () => {
@@ -3137,10 +3116,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
31373116},
31383117});
313931183140-expect(draftStream.updatePreview).toHaveBeenCalledWith({
3141-text: "Shelling",
3142-richMessage: { html: "<b>Shelling</b>", skip_entity_detection: true },
3143-});
3119+expect(draftStream.updatePreview).toHaveBeenCalledWith(telegramHtmlPreview("<b>Shelling</b>"));
31443120expect(draftStream.flush).toHaveBeenCalled();
31453121});
31463122@@ -3170,18 +3146,16 @@ describe("dispatchTelegramMessage draft streaming", () => {
31703146});
3171314731723148await vi.waitFor(() =>
3173-expect(draftStream.updatePreview).toHaveBeenCalledWith(
3174-expect.objectContaining({ text: "Working" }),
3175-),
3149+expect(draftStream.updatePreview).toHaveBeenCalledWith(telegramHtmlPreview("<b>Working</b>")),
31763150);
31773151expect(draftStream.updatePreview).not.toHaveBeenCalledWith(
3178-expect.objectContaining({ text: "Working." }),
3152+telegramHtmlPreview("<b>Working.</b>"),
31793153);
31803154expect(draftStream.updatePreview).not.toHaveBeenCalledWith(
3181-expect.objectContaining({ text: "Working.." }),
3155+telegramHtmlPreview("<b>Working..</b>"),
31823156);
31833157expect(draftStream.updatePreview).not.toHaveBeenCalledWith(
3184-expect.objectContaining({ text: "Working..." }),
3158+telegramHtmlPreview("<b>Working...</b>"),
31853159);
31863160finishRun?.();
31873161await run;
@@ -3205,7 +3179,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
32053179const updateBeforeStatusReaction = draftStream.updatePreview.mock.calls.at(-1)?.[0]?.text;
32063180releaseSetTool?.();
32073181await pendingToolStart;
3208-expect(updateBeforeStatusReaction).toBe("Shelling\n\n`🛠️ Exec`");
3182+expect(updateBeforeStatusReaction).toBe("<b>Shelling</b><br><b>🛠️ Exec</b>");
32093183return { queuedFinal: false };
32103184});
32113185@@ -3241,13 +3215,11 @@ describe("dispatchTelegramMessage draft streaming", () => {
32413215telegramCfg: { streaming: { mode: "progress", progress: { label: "Shelling" } } },
32423216});
324332173244-expect(draftStream.updatePreview).toHaveBeenCalledWith({
3245-text: "Shelling\n\n`🔎 Web Search: docs lookup`\n• `tests passed`",
3246-richMessage: {
3247-html: "<b>Shelling</b><br><b>🔎 Web Search</b> <code>docs lookup</code><br><b>Update</b> <code>tests passed</code>",
3248-skip_entity_detection: true,
3249-},
3250-});
3218+expect(draftStream.updatePreview).toHaveBeenCalledWith(
3219+telegramHtmlPreview(
3220+"<b>Shelling</b><br><b>🔎 Web Search</b> <code>docs lookup</code><br><b>Update</b> <code>tests passed</code>",
3221+),
3222+);
32513223expect(draftStream.forceNewMessage).toHaveBeenCalledTimes(1);
32523224expect(draftStream.materialize).not.toHaveBeenCalled();
32533225expect(draftStream.clear).toHaveBeenCalledTimes(1);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。