)]}'
{
  "log": [
    {
      "commit": "851d2bf4f9324b294c58bb5a79398269c2587a0d",
      "tree": "eed22a219e4a53c9935c2dcebc5d5223b668b2e2",
      "parents": [
        "6255411d3c2bd8cfe9a25c261e1c9a28e549441c"
      ],
      "author": {
        "name": "philip.zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Jun 16 03:10:10 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Mon Jun 16 03:42:24 2025 +0000"
      },
      "message": "webui: add tool calls display to mobile chat timeline\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s654197301b832e70k\n"
    },
    {
      "commit": "8bc681bceec47e9f0150defd4bf7df879e1dede4",
      "tree": "3676987151352442281db156efe22f89249a47ab",
      "parents": [
        "0d09284f0319105ee548b78881f6076c45212740"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Jun 10 02:03:02 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue Jun 10 02:18:41 2025 +0000"
      },
      "message": "webui: fix mobile UI displaying subconversations\n\nFix mobile UI incorrectly showing subconversations (messages with parent_conversation_id)\nthat should be hidden like in the regular UI to maintain consistent behavior across\nall interfaces.\n\nProblem Analysis:\nThe mobile UI was displaying all messages including subconversations, while the regular\ndesktop UI correctly filters out messages with hide_output\u003dtrue. This created an\ninconsistent user experience where subconversations (used for internal agent processing)\nwere visible in the mobile interface but hidden in the desktop interface.\n\nSubconversations are marked with hide_output\u003dtrue based on conversation.Hidden when\nthe message\u0027s conversation has a parent conversation. These are internal processing\nmessages that shouldn\u0027t be shown to users in either interface.\n\nImplementation Changes:\n\n1. Mobile Chat Filtering Enhancement:\n   - Modified shouldShowMessage() method in mobile-chat.ts\n   - Added hide_output check at start of filtering logic\n   - Returns false immediately for any message with hide_output\u003dtrue\n   - Mirrors the filtering logic used in sketch-timeline.ts (.filter((msg) \u003d\u003e !msg.hide_output))\n\n2. Consistent Filtering Logic:\n   - Mobile UI now matches regular UI filtering behavior\n   - Preserves existing content and type filtering for visible messages\n   - Maintains all other message display logic unchanged\n   - Uses same pattern as desktop: early return false for hidden messages\n\nTechnical Details:\n- hide_output field is set based on conversation.Hidden in AgentMessage.SetConvo()\n- Subconversations have parent_conversation_id and are marked as hidden\n- Regular UI filters with messages.filter((msg) \u003d\u003e !msg.hide_output)\n- Mobile UI now filters with if (message.hide_output) { return false; }\n- No changes needed to aggregateAgentMessages as filtering happens at display level\n\nBenefits:\n- Consistent user experience across desktop and mobile interfaces\n- Proper hiding of internal agent processing messages\n- Clean mobile chat interface without subconversation clutter\n- Maintains all existing mobile UI functionality for visible messages\n\nTesting:\n- TypeScript compilation passes without errors\n- Filtering logic matches pattern used successfully in desktop UI\n- Mobile chat component is only message rendering location in mobile UI\n- Change isolated to display filtering without affecting message aggregation\n\nThis fix ensures mobile users see the same clean conversation view as desktop\nusers, with internal agent subconversations properly hidden from the interface.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s40a49bd924bde7e2k\n"
    },
    {
      "commit": "4168263109e4f5dfa9b24d3ce66594d90c6cf66a",
      "tree": "7a359884219f736a0da706f098d277d6713d8fad",
      "parents": [
        "209ea91bc220b945936250f8aecd9d69974e0ada"
      ],
      "author": {
        "name": "philip.zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Jun 09 22:23:25 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Mon Jun 09 22:24:32 2025 +0000"
      },
      "message": "webui: fix mobile error message styling to display in red\n\nAdd proper red styling for error messages in mobile chat interface to match\ndesktop behavior and fix GitHub issue #141.\n\nProblem Analysis:\nMobile error messages lacked visual distinction from regular messages, appearing\nwith the same gray background as assistant messages. The desktop interface\nproperly displays error messages with red background (#ffebee) and red text\n(#d32f2f), but the mobile-chat component was missing this styling, creating\ninconsistent user experience across interfaces.\n\nThe mobile chat component correctly filtered error messages (type: \u0027error\u0027)\nand displayed them, but the getMessageRole() method didn\u0027t handle error types,\ndefaulting them to \u0027assistant\u0027 styling.\n\nImplementation Changes:\n\n1. CSS Error Message Styling:\n   - Added .message.error .message-bubble styles with red theme\n   - Background: #ffebee (light red background matching desktop)\n   - Text color: #d32f2f (dark red text for readability)\n   - Border-radius: 18px (uniform rounding for clean appearance)\n   - Maintains mobile-optimized layout and touch-friendly design\n\n2. Message Role Classification:\n   - Enhanced getMessageRole() method to properly handle error message types\n   - Added explicit \u0027error\u0027 case returning \u0027error\u0027 class name\n   - Ensures error messages receive proper CSS class assignment\n\n3. Test Coverage:\n   - Added comprehensive mobile-chat component tests\n   - Specific test for error message red styling verification\n   - CSS color validation using computed styles\n   - Message filtering and rendering tests for all message types\n\nTechnical Details:\n- Styling follows existing mobile component patterns with touch-friendly design\n- Color scheme matches desktop timeline-message component for consistency\n- Error messages maintain left alignment like other system messages\n- Clean, uniformly rounded corners without extra borders for polished appearance\n\nBenefits:\n- Visual consistency between desktop and mobile error message presentation\n- Clear error message identification for mobile users\n- Improved accessibility with distinct error styling\n- Maintains touch-friendly mobile design principles\n- Clean, professional appearance without visual clutter\n- Resolves GitHub issue #141 mobile error visibility\n\nTesting:\n- Added mobile-chat.test.ts with error message styling verification\n- TypeScript compilation successful with no type errors\n- Build process completes without warnings\n- CSS computed style validation confirms red color application\n\nThis fix ensures error messages are visually distinctive on mobile devices,\nproviding users with clear feedback when errors occur while maintaining\nthe clean, touch-optimized mobile interface design.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s8b70f2efae56458ck\n"
    },
    {
      "commit": "f825e69e62896f588496b5b33673de58293a6ba2",
      "tree": "b12c428cd68c71d580132d9998382b8ff414c6f6",
      "parents": [
        "737570847f2c6b0a27266aa00662308f19f4de60"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Sat Jun 07 04:19:43 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Sat Jun 07 04:19:43 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "5f778949e023268d0bd39cb7f102952e575e9602",
      "tree": "d606847a802b46013eb99f6881084498c774beb3",
      "parents": [
        "c3ecabb720cbf3fa7bf1372ec8ed449f0b9a4b91"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat Jun 07 00:05:20 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat Jun 07 04:12:53 2025 +0000"
      },
      "message": "webui: add markdown rendering to mobile chat messages\n\nAdd comprehensive markdown support to mobile agent messages matching\ndesktop functionality with mobile-optimized styling and performance.\n\nProblem Analysis:\nMobile webui was displaying agent messages as plain text while desktop\nversion rendered rich markdown content including code blocks, headers,\nlists, and formatting. This created inconsistent user experience where\nmobile users lost important formatting context, making code examples\nand structured responses harder to read and understand.\n\nImplementation Changes:\n\n1. Markdown Library Integration:\n   - Added marked library import for markdown parsing\n   - Integrated DOMPurify for HTML sanitization security\n   - Added unsafeHTML directive for rendering parsed content\n   - Reused desktop markdown parsing patterns for consistency\n\n2. Mobile-Optimized Rendering:\n   - Created simplified renderer without complex features like Mermaid\n   - Focused on essential markdown elements: headers, code, lists, links\n   - Maintained security through DOMPurify sanitization\n   - Preserved plain text rendering for user messages\n\n3. Responsive Typography:\n   - Mobile-specific font sizes for headers (1.05em - 1.2em range)\n   - Optimized code block styling with horizontal scroll\n   - Touch-friendly spacing and line heights\n   - Compact margins for small screen readability\n\n4. Content Styling:\n   - Subtle code highlighting with background colors\n   - Proper blockquote styling with left border\n   - List indentation optimized for mobile viewing\n   - Link styling that maintains message bubble aesthetics\n\nTechnical Details:\n- Uses marked.parse() with GFM and breaks enabled for GitHub compatibility\n- DOMPurify whitelist approach for security (HTML tags and attributes)\n- Conditional rendering: markdown for assistant, plain text for user\n- CSS optimized for mobile viewport constraints and touch interaction\n\nBenefits:\n- Consistent markdown experience across desktop and mobile\n- Improved readability of code examples and structured content\n- Maintained security through proper HTML sanitization\n- Mobile-optimized styling for touch interfaces\n- Better user experience for technical discussions\n\nTesting:\n- Verified markdown parsing works with common elements\n- Confirmed code blocks render properly with scroll\n- Tested security sanitization prevents XSS\n- Validated mobile typography and spacing\n\nThis enhancement brings mobile webui markdown rendering to feature\nparity with desktop while maintaining mobile-specific optimizations.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s99e90082addd4eadk\n"
    },
    {
      "commit": "e08c7ffc8f1ec0cd3899d2fedad79f408b6dc2f9",
      "tree": "3e09e7b3a86faed4eaabb640eed0c4b148a9d8d6",
      "parents": [
        "ba15aeb81e5fd3e98870eba91398dfb31d4cd6e9"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jun 06 13:22:12 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Jun 06 20:26:10 2025 +0000"
      },
      "message": "webui: add mobile interface with URL parameter switching\n\nTL;DR: ?m and ?d should load mobile and desktop versions respectively.\nIt should auto-detect to the right onen and redirect. Server chooses\nwhat to serve.\n\nThis took a few tries. Re-using the existing components didn\u0027t work,\ndespite repeated attempts. The prompt that eventually worked was:\n\n\tSketch\u0027s webui uses lit and webcomponents. I want to create an alternate\n\tweb ui, started with \"/m\" for mobile. Don\u0027t use the same components, but\n\tcreate a new mobile-shell component and a mobile-title, mobile-chat, and\n\tmobile-chat-input components. The design should be a title at the top, a\n\tsimplified chat (that doesn\u0027t display tool cards or anything; just the\n\tmessages, with user messages right-aligned and other messages left\n\taligned), and an input for new messages. Do include an indicator for\n\twhether or not the agent is thinking. Again: this is a parallel\n\timplementation, intended for mobile screens. Use the \"npm run dev\"\n\tserver to test it out and show me some screenshots. Use mobile browser\n\tsizes. Focus on simplicity in the CSS\n\nIt had some trouble with the data loading that took some iterations, and\nit kept saying, \"We\u0027re almost done\" and giving up, but I coaxed it\nthrough.\n\nI\u0027m not too sad right now about the duplication. We can see if there\u0027s\nany traction.\n\n~~~~\n\nAdd complete mobile-optimized interface for Sketch accessible via URL\nparameters, providing seamless device-specific user experience.\n\nProblem Analysis:\nSketch\u0027s existing web interface was designed for desktop use with complex\nlayouts, detailed toolbars, and mouse-focused interactions that don\u0027t\ntranslate well to mobile devices. Mobile users needed a simplified,\ntouch-friendly interface optimized for smaller screens while maintaining\ncore functionality for coding assistance on mobile devices.\n\nImplementation Changes:\n\n1. Mobile-Specific Components:\n   - Created mobile-shell as main container with mobile-optimized layout\n   - Built mobile-title with connection status and clean header design\n   - Implemented mobile-chat with simplified message bubbles and alignment\n   - Developed mobile-chat-input with touch-friendly controls and auto-resize\n\n2. URL Parameter-Based Interface Selection:\n   - Added server-side parameter detection (?m for mobile, ?d for desktop)\n   - Consolidated routing logic into main / handler with parameter checking\n   - Eliminated separate URL paths in favor of clean parameter approach\n   - Removed interface switching buttons for minimal UI approach\n\n3. Intelligent Auto-Detection:\n   - Implemented client-side device detection using screen size and touch capability\n   - Automatic URL parameter addition for detected mobile devices\n   - Graceful parameter-based overrides for user preference\n   - Seamless redirection maintaining all URL context and query parameters\n\n4. Mobile-Optimized Design:\n   - iOS-style message bubbles with proper user/assistant alignment\n   - Touch-friendly input controls with appropriate sizing\n   - Responsive design scaling across mobile screen sizes\n   - Animated thinking indicator with smooth dot animations\n   - Clean, distraction-free interface focused on core chat functionality\n\n5. Data Integration:\n   - Reused existing DataManager and SSE infrastructure\n   - Maintained real-time message updates via /stream endpoint\n   - Implemented message aggregation using existing patterns\n   - Preserved connection status and error handling functionality\n\nTechnical Details:\n- Built using Lit web components for consistency with existing architecture\n- Server parameter detection uses URL.Query().Has() for efficient checking\n- Auto-detection preserves all existing query parameters during redirection\n- Mobile components filter messages to show user, agent, and error types\n- Responsive CSS with mobile-first design principles and touch optimization\n\nBenefits:\n- Seamless mobile experience with automatic device-appropriate interface\n- Clean URL parameter approach (?m/?d) works with any route or session\n- No UI clutter from interface switching buttons\n- Maintains full real-time functionality on mobile devices\n- Easy to bookmark and share mobile-specific URLs\n- Preserves session context during interface switching\n\nTesting:\n- Verified auto-detection works across different mobile screen sizes\n- Confirmed URL parameters function with complex session URLs\n- Tested message sending, receiving, and real-time updates\n- Validated thinking indicator and connection status display\n- Ensured responsive design across portrait and landscape orientations\n\nThis implementation provides a complete mobile solution while maintaining\nthe full-featured desktop interface, enabling Sketch usage across all\ndevice types with appropriate user experiences.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sdbce185f247638c1k\n"
    }
  ]
}
