Fix Markdown Link Rendering in Copilot Streaming Messages (Issue #40)
-
High-Level Request:
- The status messages with markdown links for progress on copilot tasks are being sent as raw text instead of markdown. please fix
-
Actions Taken:
- Root Cause Analysis: Identified that the issue was in the Copilot streaming callback in
bot.tswhere chunks containing markdown links (like[#123](https://github.com/owner/repo/issues/123)) were being sent as plain text instead of formatted HTML - Code Investigation: Found that the bot already had a
formatMarkdown()function andsendMarkdownMessage()helper, but the Copilot streaming callback wasn’t using them for chunks with markdown links - Helper Function Creation: Added
hasMarkdownLinks()function to detect when text chunks contain markdown links using regex pattern/\[.+?\]\(https?:\/\/.+?\)/ - Streaming Logic Fix: Modified the Copilot streaming callback to:
- Check each chunk for markdown links using the helper function
- Send chunks with markdown as HTML using the existing
sendMarkdownMessage()helper - Send plain text chunks as regular messages (preserving existing behavior)
- Comprehensive Testing: Created test suite in
bot-markdown-streaming.test.tsto verify:- Markdown link detection works correctly on typical Copilot status messages
- HTML formatting preserves emojis and converts markdown to proper HTML
- The streaming logic correctly routes chunks to HTML vs. plain text based on content
- Targeted Implementation: The fix only affects Copilot streaming where status messages contain GitHub issue/PR links, preserving existing behavior for OpenAI/Ollama streaming
- Root Cause Analysis: Identified that the issue was in the Copilot streaming callback in
-
Friction/Success Points:
- Success: The existing
formatMarkdown()function and message queue HTML support made the implementation straightforward - Success: All existing tests continued to pass (106/106), confirming the change was surgical and didn’t break existing functionality
- Success: The fix was highly targeted - only affecting Copilot status messages that actually contain markdown links
- Learning: The codebase already had all the necessary infrastructure (markdown formatting, HTML message support), it just needed to be connected properly for the Copilot streaming use case
- Success: Created comprehensive tests that verify both the detection logic and the end-to-end streaming behavior
- Success: The existing
Morpheum