)]}'
{
  "log": [
    {
      "commit": "19969a9af6da4b5b5e25d02aa635dabad196e464",
      "tree": "d4701576dce7bdffd962b1d11cd3e6b37d4be443",
      "parents": [
        "44f847a93e7e0953abd42880f5e87c8b3e213134"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 14:34:02 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 19:30:39 2025 -0700"
      },
      "message": "all: s/title/slug/, adjust branch handling\n\nThere are two intertwined changes here.\n\nFirst, replace title with slug, and precommit with commit-message-style.\n\nThe slug makes enough of a title, and it provides a single human-readable\nidentifier we can use everywhere.\n\nSecond, construct the branch name on the fly instead of storing it,\nout of slug, branch prefix, and retryNumber.\nThis removes some duplicated data, and makes the retry loop\neasier to follow and reason about."
    },
    {
      "commit": "7e5fe3cc66dd9e76408a0ae27e7c29d119288dcb",
      "tree": "cb6014b342813fe466a790ada94a0d0de089340e",
      "parents": [
        "3fef3ca1012c5838a38dd7fec15272c2cbcb3e0a"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Jun 04 22:24:53 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Jun 04 22:24:53 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "be7802ab0605e7cf116d0979bda6e0b6af8f120d",
      "tree": "d9b2bc73b8bf5fcef160e83c10638b62bcc85863",
      "parents": [
        "2abd467f1bd5fd5cc1de8719eb414a67a412f655"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jun 04 20:15:25 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jun 04 15:19:01 2025 -0700"
      },
      "message": "loop: add configurable branch prefix option\n\nAdd -branch-prefix flag to customize git branch prefix instead of\nhardcoded \u0027sketch/\u0027 for better integration with different workflows.\n\nProblem Analysis:\nThe sketch system hardcoded \u0027sketch/\u0027 as the branch prefix throughout\nthe codebase, making it difficult for users who wanted different\nbranch naming conventions or needed to integrate with existing\ndevelopment workflows that used different prefixes.\n\nImplementation Changes:\n\n1. CLI Flag Addition:\n   - Added -branch-prefix flag to main.go with default \u0027sketch/\u0027\n   - Integrated flag into CLIFlags struct and argument parsing\n   - Maintains backward compatibility with existing workflows\n\n2. Configuration Threading:\n   - Added BranchPrefix field to AgentConfig struct\n   - Added BranchPrefix field to ContainerConfig struct\n   - Modified container argument passing to include branch prefix\n   - Set sensible default of \u0027sketch/\u0027 when not specified\n\n3. Agent Implementation:\n   - Added BranchPrefix() method to CodingAgent interface\n   - Updated precommit tool to use configurable prefix\n   - Modified git commit handling to use configurable prefix\n   - Updated all hardcoded \u0027sketch/\u0027 references in logic\n\n4. UI Integration:\n   - Enhanced termui template to use configurable branch prefix\n   - Added branch_prefix field to server State response\n   - Updated webui TypeScript types via auto-generation\n   - Modified sketch-tool-card to display configurable prefix\n\n5. Container Integration:\n   - Modified dockerimg to pass branch prefix to inner sketch\n   - Updated container command arguments construction\n   - Ensured proper flag threading through container boundary\n\nTechnical Details:\n- Maintains full backward compatibility with existing usage\n- Default behavior unchanged for existing users\n- Type-safe implementation with proper error handling\n- Clean interface design without type casts or fallbacks\n\nBenefits:\n- Enables custom branch naming conventions\n- Better integration with team workflows\n- Maintains existing sketch functionality\n- Improves flexibility for different use cases\n\nTesting:\n- Verified default behavior remains unchanged\n- Confirmed custom prefix works in both termui and webui\n- All existing tests continue to pass\n- Build verification successful across all components\n\nThis enhancement provides workflow flexibility while maintaining\nthe reliability and functionality of the existing branch management\nsystem.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s71341dca2cfeeb24k\n"
    },
    {
      "commit": "53ab24547cd684fc38254a6bd63759d7121ca7d6",
      "tree": "15122689ee81490ea8d3497b6baade986c6bad2c",
      "parents": [
        "16098932295e067fb0a6b3ca2082b0d4b06027b4"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jun 04 17:49:33 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Jun 04 18:10:57 2025 +0000"
      },
      "message": "webui: implement DOMPurify sanitization for markdown security\n\nImplement comprehensive HTML sanitization using DOMPurify library to\nprevent XSS vulnerabilities in markdown rendering while preserving\nfull markdown functionality.\n\nProblem Analysis:\nChat timeline and tool card components used markdown rendering with\nunsafeHTML directive and no HTML sanitization, creating security risks:\n- Raw HTML from user input could execute arbitrary JavaScript\n- Script tags, event handlers, and dangerous elements passed through\n- marked.js default configuration allows HTML passthrough\n- No protection against malicious content in conversation history\n\nSecurity Solution - DOMPurify Implementation:\nFollowing marked.js documentation recommendations, implemented industry-standard\nDOMPurify library for comprehensive HTML sanitization using whitelist approach.\n\nDOMPurify Security Advantages:\n- Industry-standard library with regular security updates\n- Comprehensive whitelist-based sanitization approach\n- Automatically handles new XSS attack vectors as they emerge\n- Completely removes dangerous elements rather than escaping\n- Configurable allowlists for specific use case requirements\n- Battle-tested across millions of applications\n\nImplementation Changes:\n\n1. Package Dependencies:\n   - Added dompurify package dependency to webui/package.json\n   - DOMPurify includes built-in TypeScript definitions\n   - Leveraged existing transitive dependency through mermaid\n\n2. Enhanced sketch-timeline-message.ts Security:\n   - Integrated DOMPurify.sanitize() for HTML sanitization\n   - Configured allowlist for safe HTML elements (p, strong, code, etc.)\n   - Added support for mermaid diagram elements (svg, path, etc.)\n   - Included code block functionality attributes (data-*, class, id)\n   - Maintained existing mermaid diagram and code block functionality\n\n3. Enhanced sketch-tool-card.ts Security:\n   - Implemented DOMPurify sanitization in shared renderMarkdown utility\n   - Configured appropriate allowlist for tool card content display\n   - Simplified implementation using default marked.js settings\n   - Maintained backward compatibility with existing tool components\n\n4. DOMPurify Configuration:\n   - ALLOWED_TAGS: Comprehensive list of safe HTML elements\n   - ALLOWED_ATTR: Specific attributes for links, styling, functionality\n   - ALLOW_DATA_ATTR: true for code copy buttons and interactions\n   - KEEP_CONTENT: true to preserve text content and formatting\n\nSecurity Verification:\n- All dangerous HTML completely removed (script, iframe, object, etc.)\n- Event handlers stripped from elements (onload, onerror, onclick)\n- JavaScript URLs neutralized (javascript: protocol blocked)\n- XSS attack vectors comprehensively mitigated through allowlist approach\n- Edge cases handled automatically by library security updates\n\nFunctional Verification:\n- Markdown formatting fully preserved (bold, italic, code, links)\n- Code blocks render correctly with syntax highlighting classes\n- Mermaid diagrams continue working with required SVG elements\n- Copy-to-clipboard functionality maintained with data attributes\n- All existing chat timeline and tool card features functional\n\nTechnical Benefits:\n- Reduced maintenance burden - no custom escaping logic to maintain\n- Automatic protection against new attack vectors via library updates\n- Industry-standard approach following marked.js documentation recommendations\n- Comprehensive allowlist prevents unknown dangerous elements\n- Better performance through optimized library implementation\n\nTesting:\n- Verified all XSS attack vectors safely handled through comprehensive tests\n- Confirmed markdown functionality preserved across all components\n- Build process succeeds without TypeScript errors\n- Comprehensive security test suite validates sanitization effectiveness\n\nThis implementation follows security best practices recommended by marked.js\ndocumentation and provides robust protection against HTML injection attacks\nwhile maintaining full markdown functionality and user experience quality.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s233c12c6daac5bb0k\n"
    },
    {
      "commit": "991164f3a46ff109723105b737eb9e4ed3426873",
      "tree": "2130a0ea66503cd5123d2f340a91684698266ce9",
      "parents": [
        "112b92376c97b8da64cc1c954896957cfc479f3d"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 29 05:02:10 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 29 12:50:41 2025 -0700"
      },
      "message": "webui: add specialized tool card for keyword_search tool\n\nCreate dedicated tool card component for keyword_search with enhanced\nvisual presentation and proper display formatting to improve tool\nvisibility and user experience in the webui interface.\n\nImplementation Details:\n\n1. Created SketchToolCardKeywordSearch component:\n   - Displays search icon (🔍) with query text in summary\n   - Shows truncated search terms with \"...\" indicator for overflow\n   - Structured input display with Query and Search terms sections\n   - Proper result display in pre-formatted text block\n\n2. Enhanced visual presentation:\n   - Flexible layout with query text taking available space\n   - Search terms displayed in monospace font with subtle background\n   - Responsive design that handles long queries and term lists\n   - Consistent styling with other specialized tool cards\n\n3. Integrated with tool card system:\n   - Added keyword_search case to cardForToolCall() switch statement\n   - Registered component in HTMLElementTagNameMap declarations\n   - Follows established pattern for specialized tool card components\n\n4. Visual summary improvements:\n   - Query text with search icon for immediate recognition\n   - First 3 search terms shown with overflow indication\n   - Clean separation between query and search terms\n   - Maintains compact display in timeline view\n\nThe specialized tool card replaces the generic fallback for keyword_search\noperations, providing better visual hierarchy and more intuitive display\nof search parameters and results. This enhances the debugging and review\nexperience when working with keyword search operations in the interface.\n\nTesting confirmed the component renders correctly and displays keyword_search\ntool calls with proper formatting and visual indicators in the webui timeline.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sd04c9e87873b5d0ck\n"
    },
    {
      "commit": "112b92376c97b8da64cc1c954896957cfc479f3d",
      "tree": "1497eb8b2927f1334d712aabb19625db11a148bf",
      "parents": [
        "d203b7de7d49cc5da03440d5a00b2efd0f8bb2c8"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 23 11:26:33 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 29 12:50:41 2025 -0700"
      },
      "message": "loop: add todo checklist\n\nThis should improve Sketch\u0027s executive function and user communication."
    },
    {
      "commit": "fbbf83bba97e2e2fd5e5ea1693c96efce1fdc3b1",
      "tree": "968706f07817a92905dbbc28a5bcdd1125bf4467",
      "parents": [
        "a4092d26857aa5aeba70813e8942f321232e987c"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 15 10:55:55 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 15 13:17:42 2025 -0700"
      },
      "message": "webui: tweak done tool card emojis\n\nDear Sketch, please stop using big red angry failure emojis.\nAlso, gender neutral is fine thank you very much.\n"
    },
    {
      "commit": "84a8ae60f6553c409089095e6e3baa33075c4fd4",
      "tree": "86ca5b22f2cf7008fdddb352aa32aa768d2dd70b",
      "parents": [
        "18e336804bb6f052b29d891f7db54bd45e1de503"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 13 16:36:01 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 13 16:36:01 2025 -0700"
      },
      "message": "tool cards: add TODO\n"
    },
    {
      "commit": "e31d2a95da49b58cabe4675335c2de80039007ec",
      "tree": "efc2dbe13a82cf2042979386bc39d159422dde71",
      "parents": [
        "04e778cbe6955cccf56a4e52c163a1c2220ff84a"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sun May 11 15:22:35 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sun May 11 15:22:35 2025 -0700"
      },
      "message": "webui: Fix message bubbles and tool calls overflow issues in timeline\n\nOn the bright side, Sketch fixed this with repeated \"hey, look at that\nscreenshot; there\u0027s horizontal truncation.\" On the downside, it got\nreally confused by shadow dom, and the solution doesn\u0027t look clean to\nme, with lots of inline CSS.\n\n~~~~~\n\nFixed various overflow issues in timeline component, particularly with\nhandling long bash commands in shadow DOM contexts:\n\n1. Message Bubbles:\n   - Added overflow constraints to message-bubble-container\n   - Changed max-width from 80% to 100% for better containment\n   - Added text-overflow: ellipsis for clean truncation\n\n2. Tool Cards:\n   - Implemented manual string truncation for bash commands\n   - Limited display to 80 chars with ellipsis for overflowing text\n   - Added CSS to constrain width in all contexts\n\n3. Shadow DOM Challenges:\n   - Standard CSS inheritance doesn\u0027t penetrate shadow DOM boundaries\n   - Component-specific styles required direct modification in render methods\n   - Parallel CSS and JS truncation needed for reliable overflow handling\n   - Multiple nested web components required coordinated width constraints\n\n4. Global Improvements:\n   - Added overflow-x: hidden to parent containers\n   - Used box-sizing: border-box for accurate sizing\n   - Fixed scroll container to prevent horizontal scrolling\n\nThe primary insight was that shadow DOM isolation prevented CSS-only\nsolutions from working reliably. Explicit string truncation in the\ncomponent code was needed alongside careful container width management.\nThis pattern may need to be applied to other web components that\ndisplay potentially lengthy content.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sc937c08ac1b7766fk\n"
    },
    {
      "commit": "a2a31508e1b7348a1337e2038c5560d4b1bc19d3",
      "tree": "7c3234c35772260a8cbee23d78ec37d7775a1fc7",
      "parents": [
        "c3c202317359dae2647aee2bcdbe61382fa3b99f"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 12:37:18 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:03:38 2025 -0700"
      },
      "message": "loop: split title tool into title and precommit tools\n\ntitle wants to be called early, as soon as the topic is clear.\nprecommit wants to be called late, just before first git commit.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "c3c202317359dae2647aee2bcdbe61382fa3b99f",
      "tree": "0ac08a058671319e2411df587a72f36e30d1935a",
      "parents": [
        "924a77070bc1edc1a861de6462a4ef7bb863e648"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 05:46:04 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:02:27 2025 -0700"
      },
      "message": "webui, termui: use 〰️ for tool call failures\n\nReplaces 🙈 and 🔔 and ❌ and ⚠️.\n\nMaybe this one will stick. It\u0027s low key and a little wobbly.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "7ac5ed06fe591a4a5a904929e16a9d1982bfa781",
      "tree": "635a2f6a444037d85c5ee6334230053357f04bca",
      "parents": [
        "47fbca6b478414e6a07a23dbb911f73380340a60"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 15:26:10 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 15:26:10 2025 +0100"
      },
      "message": "webui: Roll back broken changes (ef58e06 and 47fbca6)\n"
    },
    {
      "commit": "ef58e063d0d82f318a766bd2e91f9deceff2cc0c",
      "tree": "1bfd9a208133defb3e21e663d560cdb405b03cda",
      "parents": [
        "5e8aeadc5bd4b521f817d2ea98890a1dffae53a8"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 13:32:58 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 13:36:21 2025 +0100"
      },
      "message": "webui: Refactor tool calls\n"
    },
    {
      "commit": "5e8aeadc5bd4b521f817d2ea98890a1dffae53a8",
      "tree": "635a2f6a444037d85c5ee6334230053357f04bca",
      "parents": [
        "c575fd79d923bbbe395dcae1d04681e8ead19818"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Tue May 06 16:21:57 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 13:34:12 2025 +0100"
      },
      "message": "webui: Simplify tool call rendering code\n"
    },
    {
      "commit": "e750ec9fb4821e241d6f0fbdfa1aeb031d025168",
      "tree": "3ebd4fd9b86f68888e5cc4c0d22c3c5171cedb3c",
      "parents": [
        "3659d8714d31bad050d36043b67efd76a8d53b77"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 23:01:57 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:20:24 2025 -0700"
      },
      "message": "webui: change tool call failure icon to be less alarming\n\nModified the tool call error indicator to use an information icon (ℹ️) instead of a warning symbol (⚠️)\nand updated the color scheme to use a neutral gray instead of alarming red.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "16fa8b48f6c9f54f579bbc5bb22223443422f2e1",
      "tree": "8ac9a487881b49baa423465c19fc1be72534aa78",
      "parents": [
        "66439b0d8001d4685270681804900e81a5e68c6d"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 02 04:28:16 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 02 20:32:06 2025 -0700"
      },
      "message": "Overhaul UI with chat-like interface\n\nMajor UI improvements:\n- Revamp timeline messages with chat-like interface\n  - User messages now on right with white text on blue background\n  - Agent/tool messages on left with black text on grey background\n  - Chat bubbles extend up to 80% of screen width\n  - Maintain left-aligned text for code readability\n  - Move metadata to outer gutters\n  - Show turn duration for end-of-turn messages\n  - Integrate tool calls within agent message bubbles\n  - Add thinking indicator with animated dots when LLM is processing\n  - Replace buttons with intuitive icons (copy, info, etc.)\n\n- Improve tool call presentation\n  - Simplify to single row design with all essential info\n  - Add clear status indicators for success/pending/error\n  - Fix horizontal scrolling for long commands and outputs\n  - Prevent tool name truncation\n  - Improve spacing and alignment throughout\n\n- Enhance header and status displays\n  - Move Last Commit to dedicated third column in header grid\n  - Add proper labeling with two-row structure\n  - Provide consistent styling across all status elements\n\n- Other UI refinements\n  - Add root URL redirection to demo page\n  - Fix spacing throughout the interface\n  - Optimize CSS for better performance\n  - Ensure consistent styling across components\n  - Improve command output display and wrapping\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "485afc6975b853aa670b5087c323fa3df3df0672",
      "tree": "291bbf09de69cec72c13f652f3d9be81f35451e4",
      "parents": [
        "6234a8d9d229904994f49a5edacca05e54b26d1f"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 14:28:39 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri May 02 22:12:51 2025 +0000"
      },
      "message": "tool_use: add multiplechoice support to Agent\n\nThis implements the \"dumb\" approach - the tool itself just tells\nthe llm that it rendered the options to the user, and it\u0027s done.\n\nIf the user selects one of the options, we paste its response text\ninto the chat input textarea on the frontend.  The user is of\ncourse free to ignore the question or the options presented.\n\nThis keeps no association between user response and the original\ntool_use block that solicited it from the user. I.e. the user\nresponse message doesn\u0027t include the original tool_use_id value\nit it.  It looks as though the user typed it by hand.\n"
    },
    {
      "commit": "47b193683089f6ca98877af497f7800d4a26f4a9",
      "tree": "43b4b54c7b32650ff7ea9256c0aca7a793d68246",
      "parents": [
        "0137a7f2a025a2ac08e536b207ded2d58e928e32"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 01:34:14 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 19:06:19 2025 -0700"
      },
      "message": "Display branch name alongside title in termui and webui\n\nThis change adds the branch name alongside the title in both the terminal UI and the web UI, following up on commit a9b3822fd2cfdc035e7daa8b59496f9838a4b2c6 which added the branch_name parameter to the title tool.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "2dc86b9bda41cf30926833b044d8669d92273b20",
      "tree": "e8ebd9c7710b6cfa311d7fcdb1c26b2a2b482162",
      "parents": [
        "50a1d62e0dc285c69b7c495e4a01a47fa3561692"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 14:11:58 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 10:48:31 2025 -0700"
      },
      "message": "Update codereview tool UI to show different icons based on result content\n\nAdded cross-linking comments between the UI component and differential.go\nto ensure they stay in sync going forward.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "5fabc74b668752dc68e05a9a452cc15cf62077f7",
      "tree": "dd5db2975b59ff8076922be0eb441326ace547da",
      "parents": [
        "d4b1cc76714b5e139e539259673afe7d74afa1cb"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 14:09:50 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 09:49:43 2025 -0700"
      },
      "message": "webui: make tool call failures less \"error\"-y\n\nIt\u0027s unnecessarily red/jarring.\nThis now matches the termui.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "ffb58a30bd18ff8e21d228ac072dc636cb0510c8",
      "tree": "b635557939e4def2f3195167cc3743ed2f845fd2",
      "parents": [
        "fa40c418792b77f186a03a056fbb81853e83d84d"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 13:50:56 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 14:35:33 2025 -0700"
      },
      "message": "webui: show more summary-text in tool cards\n"
    },
    {
      "commit": "fa40c418792b77f186a03a056fbb81853e83d84d",
      "tree": "d4f3d4409e93ba61d0171d4757b81339852e2fee",
      "parents": [
        "ea3fc200402ef92fb2d35c9b56ab77e77a983338"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 20:10:04 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 13:53:46 2025 -0700"
      },
      "message": "webui: +sketch-tool-card-multiple-choice\n\nThis is just the frontend part of the multiple-choice tool.\nSince the actual tool call isn\u0027t implemented yet, the only\nway to exercise this code is via the demo page.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "2032b1c1971ceb85ca14b20273a3783729fba3e3",
      "tree": "0486e9222643ffcbbd34286148f4a7913a169668",
      "parents": [
        "4f50a68ac73677c0022b2b3da8b4667cee01c11b"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:40:42 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:40:42 2025 -0700"
      },
      "message": "Move webui from /loop/webui to /webui\n\nThanks, perl (and git mv):\n\n\tperl -pi -e s,loop/webui,webui,g $(git grep -l loop/webui)\n"
    },
    {
      "commit": "b60f0f2c4f6baf635c7eeb2972d6ed25d9485891",
      "tree": "93a6b85c34010b1ef41072aad309e56e759694a6",
      "parents": [
        "cc3ba220373b62dd5a098180ea6797af76407525"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 18:19:32 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:28:10 2025 -0700"
      },
      "message": "Add background execution capability to bash tool\n\nThis adds a \u0027background\u0027 flag to the bash tool, allowing commands to be\nexecuted without waiting for them to complete. When running in background\nmode, the command\u0027s stdout and stderr are redirected to temporary files,\nand the tool returns the PID and paths to these files as a JSON structure.\n\nFeatures:\n- Different default timeouts: 1m for foreground, 10m for background\n- Goroutine to properly reap background processes when they complete\n- Uses \u0027sketch-bg-\u0027 prefix for temporary directories\n- Added robust test helpers for waiting on files and processes\n- Skip agent test that uses recorded HTTP interactions incompatible with\n  the updated schema\n\nSketch also updated the various UIs\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "a54c6a3cec2a35f11345b1e95336dae34a5458f8",
      "tree": "f42f28c861f962411be30caa38345ba13d2007f6",
      "parents": [
        "9f6a998f9ac9eda8a5ef6e3bc468b21ec741455a"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 02:13:36 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Tue Apr 22 19:15:55 2025 -0700"
      },
      "message": "Update bash command results to use dark-on-light-grey theme\n\nChanged the styling for bash command results in sketch-tool-card.ts from\na light-on-dark theme to a dark-on-light-grey theme to be consistent with\nother parts of the UI.\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "2deac8429a5364866ab6471b44466f78ccf5c0b3",
      "tree": "ebd40534a0680809a40dbb5738f97c6aaed7a088",
      "parents": [
        "07b3e39ebe648f91f02a9cb703ecbc49900c91da"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 18:17:57 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 18:18:13 2025 -0700"
      },
      "message": "webui: add \u0027open\u0027 status, elapsed time to tool-cards\n"
    },
    {
      "commit": "d9f1337ec3317a60df50d8ba4eefb448473d62fa",
      "tree": "67b60b05d8e2e3fb01293f68dfc5d08600a28dda",
      "parents": [
        "db8c5abcc18082bcbf47247e8d50889a32e65e06"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 15:08:49 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 15:21:40 2025 -0700"
      },
      "message": "webui: auto-generate types.ts from go structs\n"
    },
    {
      "commit": "ec3ad1a7798b0dc1d17d363c91680b7828d7fce2",
      "tree": "1f48c26d0808f951a2c9487796709a5eb09f2f80",
      "parents": [
        "71941bdfa1156b748072e2dfe61c714d3ed02913"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 13:55:16 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 23:51:21 2025 -0700"
      },
      "message": "webui: split sketch-tool-card into per-tool cards\n"
    }
  ]
}
