From e8c57ebd9c6da23c5d30a72df4ee9141a801402d Mon Sep 17 00:00:00 2001 From: Cameron Date: Mon, 9 Mar 2026 21:47:48 -0700 Subject: [PATCH] fix: avoid false italic conversion in Telegram reasoning (#526) --- src/core/display.test.ts | 8 ++++++++ src/core/display.ts | 7 +++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/core/display.test.ts b/src/core/display.test.ts index 4057a59..4ca4b93 100644 --- a/src/core/display.test.ts +++ b/src/core/display.test.ts @@ -96,6 +96,14 @@ describe('formatReasoningDisplay', () => { ); }); + it('does not convert math-like asterisks to telegram italic formatting', () => { + const spaced = formatReasoningDisplay('2 * 3 * 4', 'telegram'); + const compact = formatReasoningDisplay('2*3*4', 'telegram'); + expect(spaced.parseMode).toBe('HTML'); + expect(spaced.text).toBe('
Thinking\n2 * 3 * 4
'); + expect(compact.text).toBe('
Thinking\n2*3*4
'); + }); + it('formats non-signal/telegram channels as markdown blockquote', () => { const result = formatReasoningDisplay('line 1\n line 2', 'discord'); expect(result).toEqual({ text: '> **Thinking**\n> line 1\n> line 2' }); diff --git a/src/core/display.ts b/src/core/display.ts index edde551..ecae3cd 100644 --- a/src/core/display.ts +++ b/src/core/display.ts @@ -239,8 +239,11 @@ export function formatReasoningDisplay( .replace(//g, '>'); const html = escaped - .replace(/\*\*(.+?)\*\*/g, '$1') - .replace(/\*(.+?)\*/g, '$1'); + // Only convert likely markdown delimiters: + // - ignore escaped asterisks (\*) + // - ignore in-word/math operators (e.g., 2*3*4, 2 * 3 * 4) + .replace(/(?$1') + .replace(/(?$1'); return { text: `
Thinking\n${html}
`, parseMode: 'HTML',