fix: avoid false italic conversion in Telegram reasoning (#526)

This commit is contained in:
Cameron
2026-03-09 21:47:48 -07:00
committed by GitHub
parent 03618faf5b
commit e8c57ebd9c
2 changed files with 13 additions and 2 deletions

View File

@@ -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('<blockquote expandable><b>Thinking</b>\n2 * 3 * 4</blockquote>');
expect(compact.text).toBe('<blockquote expandable><b>Thinking</b>\n2*3*4</blockquote>');
});
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' });

View File

@@ -239,8 +239,11 @@ export function formatReasoningDisplay(
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;');
const html = escaped
.replace(/\*\*(.+?)\*\*/g, '<b>$1</b>')
.replace(/\*(.+?)\*/g, '<i>$1</i>');
// Only convert likely markdown delimiters:
// - ignore escaped asterisks (\*)
// - ignore in-word/math operators (e.g., 2*3*4, 2 * 3 * 4)
.replace(/(?<![\\\w])\*\*(?=\S)([\s\S]*?\S)\*\*(?!\w)/g, '<b>$1</b>')
.replace(/(?<![\\\w])\*(?=\S)([^*\n]*?\S)\*(?!\w)/g, '<i>$1</i>');
return {
text: `<blockquote expandable><b>Thinking</b>\n${html}</blockquote>`,
parseMode: 'HTML',