)]}'
{
  "log": [
    {
      "commit": "33d282f80db786cc60ba521a38ed5166f23239ed",
      "tree": "9ed1f15c6d3081d5bef7d16b9d72e78a2c7780cf",
      "parents": [
        "a9d87aa69cfefdc91ec7aaa6bc42907749748e76"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 03 04:01:54 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 06 10:23:39 2025 -0700"
      },
      "message": "Add browse tool support.\n\nI reviewed some MCPs (using OpenAI\u0027s deep research to help), and it\nhelped me choose chromedp as the relevant library and helped me come up\nwith an interface. This commit adds chrome to the Docker image which is\nkind of big. (I\u0027ve noticed that it\u0027s smaller on Ubuntu, where it doesn\u0027t\npull in X11.) go-playwright was a library contender as well.\n\nImplement browser automation tooling using chromedp\n\nThis implementation adds browser automation capabilities to the system via the chromedp library,\nenabling Claude to interact with web content effectively.\n\nKey features include:\n\n1. Core browser automation functionality:\n   - Created new browsertools package in claudetool/browser\n   - Implemented tools for navigating, clicking, typing, waiting for elements,\n     getting text, evaluating JavaScript, taking screenshots, and scrolling\n   - Added lazy browser initialization that defers until first use\n   - Integrated with the agent to expose these tools to Claude\n\n2. Screenshot handling and display:\n   - Implemented screenshot storage with UUID-based IDs in /tmp/sketch-screenshots\n   - Added endpoint to serve screenshots via /screenshot/{id}\n   - Created dedicated UI component for displaying screenshots\n   - Ensured proper responsive design with loading states and error handling\n   - Fixed URL paths for proper rehomed URL support\n   - Modified tool calls component to auto-expand screenshot results\n\n3. Error handling and reliability:\n   - Added graceful error handling for browser initialization failures\n   - Implemented proper cleanup of browser resources\n\nThe browser automation tools provide a powerful way for Claude to interact with web content,\nmaking it possible to scrape data, test web applications, and automate web-based tasks.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "37aaf08095add87b345bfc87d4aae4d2e95ed0fd",
      "tree": "b831c2e6f1701b0df480a88c6bf9d7bc633c8362",
      "parents": [
        "e01ea0e6d41c8235261d09d2847489ff298d1ed9"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 06 03:15:55 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 06 03:28:19 2025 +0000"
      },
      "message": "Fix terminal not loading when first tabbed to.\n\nThe terminal for some reason, at least in Safari, thought it was\nreally small, so it would be hard to use until you resized your window.\nI got Claude, below, to make it lazily init when you tab to the\nterminal view, which is better anyway.\n\nImplement lazy initialization for sketch-terminal component\n\nInstead of initializing the terminal when the component is created (which causes sizing issues when the terminal isn\u0027t visible), this change defers initialization until the terminal tab is actually activated.\n\nThis solves the problem where the terminal was initialized with strange dimensions because:\n1. The terminal is now only initialized when its tab is visible\n2. We use a flag to track initialization state\n3. The resize handler only runs for initialized terminals\n\nThis approach is more efficient and avoids unnecessary initialization when the terminal isn\u0027t being used.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\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": "f53875fa18db64d5fa73f3b163314c1bb021db34",
      "tree": "165eecf2b0a58e3bb7c25e9ab9f310ffdf2d160d",
      "parents": [
        "923a3bad481d1881aa895f1262bfa8f07d37374f"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 16:41:34 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 16:41:48 2025 -0700"
      },
      "message": "remove errant console log\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": "2d4c48f10948cf07634dc743c3af30806f59bdd2",
      "tree": "91372ee95d0a81d6d1a9545fc7e190f708d921af",
      "parents": [
        "88a6efc5c37b09fafafdef69466d81540e33d9b5"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 02 23:35:03 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri May 02 23:37:16 2025 +0000"
      },
      "message": "Remove Charts tab and related Vega components from Sketch\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n\n- Removed Charts tab from navigation\n- Removed sketch-charts component and vega-embed component\n- Removed vega, vega-lite, and vega-embed dependencies from package.json\n- Removed all associated code and UI elements\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": "25f6ff1b44e739e64d8b86cc4ea11bf8c631265c",
      "tree": "2255018ca38ba211e57eb9e76e87b82d61a0c826",
      "parents": [
        "d01d1341abf9b2e62f0b4cc821277dc4c40c6225"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 02 04:24:10 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 02 14:25:31 2025 -0700"
      },
      "message": "Implement Server-Sent Events (SSE) for Real-time Agent Communication\n\n- Add server-side SSE endpoint (/stream?from\u003dN) for streaming state updates and messages\n- Replace polling with SSE in frontend for real-time updates with significant performance improvements\n- Implement efficient connection handling with backoff strategy for reconnections\n- Add visual network status indicator in UI to show connection state\n- Use non-blocking goroutine with channel pattern to handle SSE message delivery\n- Ensure proper message sequencing and state synchronization between client and server\n- Fix test suite to accommodate the new streaming architecture\n- Update mocks to use conversation.Budget instead of ant.Budget\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "d01d1341abf9b2e62f0b4cc821277dc4c40c6225",
      "tree": "915117881cab1f87dd6a44a7d697d86e3af46d74",
      "parents": [
        "3e213085e04f5ddfc07933ce07826ba38ab0ddad"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 02 13:53:36 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 02 14:01:03 2025 -0700"
      },
      "message": "Default to CI\u003d1 for \"npm test\"\n"
    },
    {
      "commit": "44f9b4cec11e269a52fbfc099989ab425b8e125f",
      "tree": "ba09fbf38260b04067a7715e23083fb4a8bf733f",
      "parents": [
        "1c81423e72f7a4abb53fb6ae014ee6987a9f89d1"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri May 02 18:58:20 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri May 02 18:58:20 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "1c81423e72f7a4abb53fb6ae014ee6987a9f89d1",
      "tree": "feac6c0e442d2ad5d1f89b6533e470d6579eb628",
      "parents": [
        "dc372f3f962771b1e30212847371db837d758c2e"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 02 18:34:27 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 02 11:54:04 2025 -0700"
      },
      "message": "webui: add average dollars per hour to Dollar Usage Over Time chart\n\nAdd calculation and display of average dollars per hour rate to the\nDollar Usage Over Time chart in the web UI.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "6c2bb84114e1387e8751d6d2db33bcfc89f2dde5",
      "tree": "c04895af3c7717c3c2d8cffd37dc09eb5e09a476",
      "parents": [
        "21cbc4502295d17bdd31f8083ac11841ce498265"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 02 18:37:20 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 02 11:49:50 2025 -0700"
      },
      "message": "webui: add Escape key handler to dismiss empty line comments\n\nDismiss the line comment input box when the Escape key is pressed\nand the text input is empty.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "495cb96343f76189ab7e484234d6dc1a3b5a787c",
      "tree": "c5e2ac64da4c2aa7247cf17c9d78ba39105c75d9",
      "parents": [
        "4d5e9978fce2feb262663b9d0455c06546723ddc"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu May 01 16:25:53 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu May 01 16:27:44 2025 -0700"
      },
      "message": "sketch-app-shell: fetch \"cancel\" not \"/cancel\"\n\nFixes https://github.com/boldsoftware/sketch/issues/22\n"
    },
    {
      "commit": "e2c7f722803ef4d483a21859e8fc6329645851e0",
      "tree": "95a3f6831f4adacfc4a280e2699dac01d9a1dcab",
      "parents": [
        "a3dcd86d1c05e95ee9c058a43262458a92160898"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 01 21:58:41 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu May 01 22:04:35 2025 +0000"
      },
      "message": "webui: make input box focus on page load\n\nAdd a window.load event listener in the firstUpdated lifecycle method to ensure\nthe chat input gets focused when the page loads completely.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "6866c790c1f8f38e160eac01ff7be2cfaed1fc9e",
      "tree": "3d5a3b8e2665357c077a95b5bf8be3b280d839b8",
      "parents": [
        "c76a392d48f0070ccb011b04cbf25114671a8af4"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu May 01 15:27:35 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu May 01 15:27:35 2025 +0100"
      },
      "message": "webui: Finish removing aria snapshot testing\n"
    },
    {
      "commit": "d9d4581952edb59469a8402910783570be852fb8",
      "tree": "7b06cf74a10d3d812152c21fc72ced395a3e5024",
      "parents": [
        "48c84c9a4df29b1e51c7fdca81053dd9cd0c2446"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 16:53:41 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 18:00:55 2025 -0700"
      },
      "message": "webui: add current Agent state to call-status tooltip\n"
    },
    {
      "commit": "d33ee13991bc7d4c923f12df35032796b8400903",
      "tree": "3b96724eb5a284e995919ccb1f5fa3cef5073993",
      "parents": [
        "78707d6ea7bcd323719358dee3445130fa719037"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 16:26:10 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 16:34:16 2025 -0700"
      },
      "message": "webui: tweak welcome screen wording\n\n(more tweaks welcome!)"
    },
    {
      "commit": "bce3a13a7c16ffdb602b66550e6b3479d34fb9b0",
      "tree": "b83cf1209a5add2b71bc8b5a58d389bed460dd24",
      "parents": [
        "2a5bd6d3e22db146385bea9902e9dd9bc982377d"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 22:03:39 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 22:10:21 2025 +0000"
      },
      "message": "Modernize and streamline Sketch top bar UI\n\nComprehensive improvements to the top bar interface:\n\nRemoved Elements:\n- Poll checkbox and all polling UI controls\n- Network status indicator and all status messages\n- Dotted underlines from tooltip elements\n\nButton Improvements:\n- Added SVG icons to Restart and Stop buttons\n- Made buttons responsive (text hides below 1400px)\n- Stop button now disabled when no active calls\n\nLayout Simplification:\n- Simplified hostname display (outside hostname only)\n- Simplified working directory display (outside directory only)\n- Repositioned tab chooser for better layout\n- Improved responsive behavior across viewport sizes\n\nEnhanced Features:\n- Added GitHub repo auto-detection with clickable links\n- Improved VSCode integration with button styling\n- Changed \u0027SSH Connection\u0027 to \u0027Connect to Container\u0027\n- Enhanced tooltips with more descriptive text\n\nThe UI is now cleaner, more responsive, and provides a better user experience\nacross different screen sizes.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "320113391429ba3531aa772e4e32ba41998afbaa",
      "tree": "169a0fe052fec20295a2e6ea51fed967ac205531",
      "parents": [
        "efda3961932b3c8d8fb169d9e043bc68c3dd1845"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 20:59:40 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 14:05:19 2025 -0700"
      },
      "message": "Amend notification logic to only show for end-of-turn messages without parent_conversation_id\n\nThis change modifies the notification logic to only show notifications when:\n1. The message has end_of_turn \u003d true (which was already being checked)\n2. The message does not have a parent_conversation_id (new condition)\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "db5e9b482194a801524a99af9fee06911147ff26",
      "tree": "af8fa1a7783a404d8c14e347c8fbf8abd02e0e80",
      "parents": [
        "2c4db099e6763cf18f0c57876298b9f5c70ed925"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 19:58:13 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 20:16:43 2025 +0000"
      },
      "message": "Implement notifications feature with toggle and focus handling\n\n- Change notifications to be disabled by default\n- Replace checkbox with bell icon (with cross when disabled)\n- Add window focus detection to only send notifications when window is not focused\n- Update notification toggle to handle clicks directly\n- Ensure notifications are only sent based on configuration and window focus state\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "2c4db099e6763cf18f0c57876298b9f5c70ed925",
      "tree": "ae4408992dd74fa0b5392523d2e6713e388326e7",
      "parents": [
        "b74b526b579320c08ad85cc8b4bdd719c9d6d7c8"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon Apr 28 16:57:50 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 19:59:45 2025 +0000"
      },
      "message": "Restart conversation support.\n\nThe idea here is to let the user restart the conversation, possibly with\na better prompt. This is a common manual workflow, and I\u0027d like to make\nit easier.\n\nI hand wrote the agent.go stuff, but Sketch wrote the rest.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "bc6b629676e97d1789cff9a1d945b5faf680372e",
      "tree": "fd18173bc59f5aae31ee53fae1681e6e8c3c1470",
      "parents": [
        "f830c9d8e7cbe4cbf8146f9e2f1c5fcb57292865"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 18:00:15 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 18:24:23 2025 +0000"
      },
      "message": "Add browser notifications for agent messages with EndOfTurn\u003dtrue\n\nWhen a message with EndOfTurn\u003dtrue is received, show a system notification using the browser Notifications API. Include the sketch title and beginning of the message content in the notification. Added a toggle for users to enable/disable notifications.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "f830c9d8e7cbe4cbf8146f9e2f1c5fcb57292865",
      "tree": "86aa808f441f06ead73786aa15019a518e13eb07",
      "parents": [
        "85068949181b59b1c5617cb9de353511e3f5fab1"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 18:16:01 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 18:16:01 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "e81233fa9bfbacf6756c00105eae08f6f0e36656",
      "tree": "292e17f26f8110df08b131ec43f287ea6ed8c8c6",
      "parents": [
        "250348ec3c8bcba21caa62fd4ae53e4d9476fafa"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 04:05:41 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 11:13:16 2025 -0700"
      },
      "message": "Add gentle pulsing animation to activity notification icons\n\n- Added CSS keyframes animation for a subtle pulsing effect\n- Applied the animation to both LLM (thinking) and tool call indicators when active\n- The animation scales the icons slightly and adjusts opacity to create a gentle pulse\n- Makes it clearer that these are activity notifications\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "eb5166a5043946ad6782cb64af987d23a32e3203",
      "tree": "cd4b20e220c211f845545e33ccd03739c7331d71",
      "parents": [
        "3cae7d97036513e4743083da7bb232a2aa566e82"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 17:04:20 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 11:13:16 2025 -0700"
      },
      "message": "Shrink title text to reduce truncation in header\n\nReduces the chat title font size from 16px to 14px to help it fit better\nin the top left corner of the UI without getting cut off.\n\nAlso increases the title container max-width from 25% to 30% to provide\nmore space for longer titles.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "e634d266ace9afe0f8485c13ed0aae6bcfc0a8f8",
      "tree": "b2b8d92b5365c13e5cb0abbeb14c85d8b1a9e992",
      "parents": [
        "42f7a7c93682a4ed04c62688e1475cd6ebc04de5"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 09:52:24 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 11:13:16 2025 -0700"
      },
      "message": "webui: add go2ts go:generate line\n\nThis way I\u0027m way more likely to actually run it.\nAnd I think it means CI will check it too.\n"
    },
    {
      "commit": "81eacc409f4f5ec758493769c8d1a31e94aaeafa",
      "tree": "fe7c7dc73de6421c92ac2009f82a90d8e72df19f",
      "parents": [
        "3a89ba89acee96cd963a0e64d812f4ba7943d6d6"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 18:10:50 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 18:10:50 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "3a89ba89acee96cd963a0e64d812f4ba7943d6d6",
      "tree": "9139f02cd222fcdfc7d3d4a2d2820a8198a7a754",
      "parents": [
        "d01f67c2669a8b408c382e40465c152855e89125"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Apr 30 17:52:29 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 11:10:03 2025 -0700"
      },
      "message": "build(deps-dev): bump vite from 6.3.2 to 6.3.4 in /webui\n\nBumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.3.2 to 6.3.4.\n- [Release notes](https://github.com/vitejs/vite/releases)\n- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)\n- [Commits](https://github.com/vitejs/vite/commits/v6.3.4/packages/vite)\n\n---\nupdated-dependencies:\n- dependency-name: vite\n  dependency-version: 6.3.4\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "d01f67c2669a8b408c382e40465c152855e89125",
      "tree": "a2224097e2c2551504fd1f7b9987454756dba038",
      "parents": [
        "7910eef0b83f5ce15af3c1a9fa6b6f29165d335e"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 17:50:33 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 11:10:03 2025 -0700"
      },
      "message": "ci: amend single commits when auto-formatting queue-main branches\n\nModify the formatting workflow to check the number of commits since\nthe merge-base with origin/main. If there\u0027s exactly one commit\nsince the merge-base, amend that commit instead of adding a new\nformatting commit. For multiple commits, continue to add a new\ncommit as before.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "d20ded51d0564fd3955320e6bfc6c90e5c190680",
      "tree": "41f521575bd7c56c56583465b1bd7b633c4ef8bf",
      "parents": [
        "abc093cae60860c6837dd2af64715b5f0197a460"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 17:38:36 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 10:50:47 2025 -0700"
      },
      "message": "webui: Don\u0027t auto-expand last message\n\nFix for issue #32. This removes the auto-expansion behavior of\nthe last message in the timeline which was causing messages to\nkeep expanding and contracting in a jarring way.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "abc093cae60860c6837dd2af64715b5f0197a460",
      "tree": "fc5f6223379fa0d5dee10f3eb130721a7a7ace04",
      "parents": [
        "cf57096f6e7f836c9f4ab6cb4d31d754569fae4b"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 10:46:27 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 10:47:19 2025 -0700"
      },
      "message": "Left-align \u0027How to use Sketch\u0027 paragraphs\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n\nLeft-align the paragraphs in the \u0027How to use Sketch\u0027 section while keeping the title centered.\n"
    },
    {
      "commit": "cf57096f6e7f836c9f4ab6cb4d31d754569fae4b",
      "tree": "4dd87e7cf4e8c3f3a48dd3a6ecdb63379f15921c",
      "parents": [
        "47b71c9ceed71bbae94e5754f7005c829ff9071b"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 17:27:39 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 17:27:39 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "47b71c9ceed71bbae94e5754f7005c829ff9071b",
      "tree": "ce80acde442236a78e240584309b557163a5cbf8",
      "parents": [
        "edc88dcc56ebdb1a2d9887728d0b5133b6131fbb"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 15:43:39 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 10:23:06 2025 -0700"
      },
      "message": "Display last commit in UI top bar\n\nAdded a feature to display the last commit information in the sketch UI top bar.\nWhen a commit message is received, the UI now shows either the pushed branch name\nor the commit hash in the top bar next to the cost display. Clicking on this element\ncopies the branch name or commit hash to the clipboard.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\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": "c72fff52ad6c5436fa8469f049fa232f2f6be5ed",
      "tree": "2f42838fc0af2f4954a64b8edcc4c8e09ec08af4",
      "parents": [
        "d3906e2e0a18197148089f384b188135b07559be"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 20:17:54 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 16:24:19 2025 -0700"
      },
      "message": "Add SSH connection information to web UI\n\nThis commit implements:\n1. Added SSH information display to the web UI info button\n2. Shows SSH connection information only when running inside Docker container\n3. Constructs the full SSH hostname as \"sketch-[session_id]\"\n4. Added copy-to-clipboard buttons for SSH commands\n5. Styles the VSCode URL as a proper clickable link\n6. Shows a warning message when SSH is not available\n7. Modified container naming to use only SessionID instead of imgName+SessionID\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "d3906e2e0a18197148089f384b188135b07559be",
      "tree": "a26fb2fec665d3965e09a7cb53a95fd708db944a",
      "parents": [
        "7b6044969c696e1707a25c170eebd67fda919e34"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Tue Apr 29 17:32:14 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Tue Apr 29 15:31:42 2025 -0700"
      },
      "message": "Add @click handler to stopButton in sketch-app-shell.ts\n\nThe stop button now sends a POST request to the /stop endpoint when clicked.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "dc507a303e2ffc2fb934d8717fef6b551193a416",
      "tree": "3248ed4b91d509c69963a1cae666a5bf254c66e0",
      "parents": [
        "5cf49264f156f65ac3948393d7da5c509e34b2b2"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue Apr 29 18:38:53 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue Apr 29 18:38:53 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "5cf49264f156f65ac3948393d7da5c509e34b2b2",
      "tree": "3e0d0c06b9e89a2e97a16812a5f7c75274c85989",
      "parents": [
        "570c3f8350204169007585e0f4a65f1f0085e504"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 18:35:55 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 11:38:12 2025 -0700"
      },
      "message": "Add welcome box with usage instructions to empty chat window\n\nThe welcome box provides a clear introduction with a title \u0027How to use Sketch\u0027\nand helpful instructions about how Sketch works when a user first opens the\napplication and there are no messages in the chat.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "570c3f8350204169007585e0f4a65f1f0085e504",
      "tree": "6c2b3d914cf94fa3c4b23ce73a7f8b613592f3e0",
      "parents": [
        "c2b6bdfdf9ff99becdb9f227dd04af015d9d3370"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue Apr 29 18:26:50 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue Apr 29 18:26:50 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "c2b6bdfdf9ff99becdb9f227dd04af015d9d3370",
      "tree": "6624e0dab07667f2cdc5d2471863d34acb69ec84",
      "parents": [
        "1b47aa2aa46bf1aad16c79d36a9baf60fc69e905"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 11:17:47 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 11:24:36 2025 -0700"
      },
      "message": "Improve status bar icons for LLM and tool calls\n\n- Replace notification-style number badges with background and color changes\n- Use SVG icons instead of emoji\n- Improve visual appearance when active/inactive\n- Update tests accordingly\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": "015b882721adf65cad5a11838d1d72c98e99c6f6",
      "tree": "f3f553b73f01d592755ce245d1819a2d0feb5349",
      "parents": [
        "22bd8eb83b7c779d9d2396c75cc344124e150aee"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 12:29:08 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 12:29:08 2025 -0700"
      },
      "message": "webui: fix \u0027build\u0027 and \u0027dev\u0027 npm scripts\n"
    },
    {
      "commit": "fefde5770a9f6484e23c926b408f86ca8aa388ae",
      "tree": "f418d19da72b00624df996253b00391dfb392041",
      "parents": [
        "d6d2c69696cdd642c778406d7a42f6fa626a33ef"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon Apr 28 10:59:03 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon Apr 28 10:59:03 2025 +0100"
      },
      "message": "webui: Tweak prettier setup\n\nThis should make us more consistent on formatting in local vs CI\n"
    },
    {
      "commit": "d6d2c69696cdd642c778406d7a42f6fa626a33ef",
      "tree": "1da266303d1456b68e7494eb3b89ac5c309961ac",
      "parents": [
        "e66db3e309d840bd25a05b274e95779d2a42a325"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon Apr 28 09:52:19 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon Apr 28 09:52:19 2025 +0100"
      },
      "message": "webui: Add missing step to make install\n"
    },
    {
      "commit": "e66db3e309d840bd25a05b274e95779d2a42a325",
      "tree": "5c95266dbd1dde9937a137ec79ab93513e6410a9",
      "parents": [
        "99a9a0285fe449f047fbc93766f37e6ea7af21df"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Sun Apr 27 15:40:39 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Sun Apr 27 20:52:40 2025 -0700"
      },
      "message": "Redesign Sketch top bar with tab-based interface\n\n- Replace emoji-only buttons with tabs showing both icons and text\n- Reorganize container status to hide detailed info behind (i) button\n- Keep only essential info visible: hostname, working dir, git repo, and cost\n- Improve layout of top banner components\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "99a9a0285fe449f047fbc93766f37e6ea7af21df",
      "tree": "ba255c9b05449c09d137cd6cf81edf58469542a1",
      "parents": [
        "f98d7305e73ecec9a78f94f527693d5adfb89159"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Sun Apr 27 15:15:25 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Sun Apr 27 20:00:22 2025 -0700"
      },
      "message": "Implement tracking of outstanding LLM and Tool calls\n\nThis commit implements a listener pattern between ant.convo and the Agent for tracking outstanding calls.\n\n* Added fields to the Agent struct to track outstanding LLM calls and Tool calls\n* Implemented the listener methods to properly track and update these fields\n* Added methods to retrieve the counts and names\n* Updated the State struct in loophttp.go to expose this information\n* Added a unit test to verify the tracking functionality\n* Created UI components with lightbulb and wrench icons to display call status\n* Added numerical indicators that always show when there are active calls\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "f98d7305e73ecec9a78f94f527693d5adfb89159",
      "tree": "14f8f8a5f9427568081e46a109c6751b7a8cd42a",
      "parents": [
        "dded2d6cbe676afc144899f23fc76bf72908a00d"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 27 17:44:06 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 27 17:45:33 2025 -0700"
      },
      "message": "webui: supress mermaid error msgs\n"
    },
    {
      "commit": "dded2d6cbe676afc144899f23fc76bf72908a00d",
      "tree": "68c2d11390164a80dd1fc4b304486ab5211841f7",
      "parents": [
        "8d93e3679e088af8086fd1c9f4d33de2e85608c2"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Mon Apr 28 00:27:21 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Mon Apr 28 00:27:21 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "8d93e3679e088af8086fd1c9f4d33de2e85608c2",
      "tree": "fe40a5fc3fdf341da5eb4f40954b7a941df284be",
      "parents": [
        "d8adbbaf6970b8d9c40cdf9795476d2850096b18"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 27 23:32:18 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 27 17:25:09 2025 -0700"
      },
      "message": "webui: Add Mermaid diagram support to markdown\n\n* Installed mermaid library\n* Extended markdown renderer to support mermaid code blocks\n* Added CSS styling for mermaid diagrams\n* Added a demo page for testing mermaid diagrams\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "d8adbbaf6970b8d9c40cdf9795476d2850096b18",
      "tree": "1cbff1be11256ec99f4e953d0d0bee78cfb2e30d",
      "parents": [
        "5bff650e0d5603dc77efccb4b4610648aa83cbf6"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Sun Apr 27 19:33:42 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Sun Apr 27 19:33:42 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "5bff650e0d5603dc77efccb4b4610648aa83cbf6",
      "tree": "5475e933d40bb3577c01952772d0f49301d37b60",
      "parents": [
        "1112949adc2bb120a001a925c0c4e9e18def0ee6"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Sat Apr 26 09:11:40 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Sat Apr 26 09:11:40 2025 -0700"
      },
      "message": "fix oddball formatter complaints\n"
    },
    {
      "commit": "5c70bfe5601e9919e598025ac56984e1b2e21040",
      "tree": "a2b53c46956af8beaa37aa4157ad7dc2482d3dba",
      "parents": [
        "eda2a8ca73891aa55831391cea6cc8c6d2a79d67"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Apr 25 21:28:00 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Apr 25 21:28:00 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "5b8ab1f1a7bcdd4d1a44e654d2a50074a64bc443",
      "tree": "f8e9b32d6c7593aa251021e91164dfada4890a2d",
      "parents": [
        "c3391a932e724dc6f6898c8e1b51002d104822e1"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 14:14:26 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 14:14:26 2025 -0700"
      },
      "message": "webui: intentionally break formatting\n\nTo test auto-formatting."
    },
    {
      "commit": "a0801ad5dbd2a0e4d4983447b62f72444e829927",
      "tree": "6c622b74649869703cd85f2fe3ea317ee293d46f",
      "parents": [
        "df2d3dccd3f2f97fd4b8ab3bd153fbef15becea0"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 19:34:53 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:56:59 2025 -0700"
      },
      "message": "Add comma formatting to input and output token displays\n\nThe token counts now display with commas in both the terminal UI and web UI.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "4de8a91553cccc6f7e48419de75acfddafdb549b",
      "tree": "8334b1134d1f1c49fcdb26700ac32d206328b67e",
      "parents": [
        "ddc81426ded54ef97b7650f5f9d1ef9c94b80fd3"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri Apr 25 21:01:30 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri Apr 25 21:01:30 2025 +0100"
      },
      "message": "webui: Add aria snapshot testing\n"
    },
    {
      "commit": "e7c9a4429c54a6d6431f825ee81858785e0c5d8e",
      "tree": "b079963b79cf945955be40a033f52e49c2f7efa4",
      "parents": [
        "46fff9766f75fed8e9956dd126c9d0585057ed37"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri Apr 25 20:02:22 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri Apr 25 20:32:28 2025 +0100"
      },
      "message": "webui: Add test for sketch-app-shell component\n\nCreated a basic test for the top-level Sketch App Shell component with API mocking. Reorganized mock data to be shared between tests and demo.\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "46fff9766f75fed8e9956dd126c9d0585057ed37",
      "tree": "8ebe8ba917454f42e83c2ff58bf06b81d0cb1479",
      "parents": [
        "bd6c1680c6361ee9ed1735ed56edb0bb2b0c56ec"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri Apr 25 14:57:44 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri Apr 25 20:32:28 2025 +0100"
      },
      "message": "webui: More minor css tweaks\n"
    },
    {
      "commit": "9b999b08b8af6a69e24d910a3f3da542b4104c26",
      "tree": "1cd853a40a95c47c9e9b028b9125015ba41cb051",
      "parents": [
        "176a5105d3f5e515ea782b054f1ab853a8afc399"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 16:31:50 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 11:43:58 2025 -0700"
      },
      "message": "Update window title to show \u0027sk: \u003ctitle\u003e\u0027 and add disconnection indicator\n\nThe window title now displays \u0027sk: \u003ctitle\u003e\u0027 to make it easier to identify\nwhich tab is which when multiple sketch tabs are open. Additionally, a red\ncircle indicator (🔴) is added to the title when the connection to the server\nis lost.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "6bc2eb24313de1455fc5b6c2ea231b86fb5d1329",
      "tree": "7e5f39a498f266be72af9b17bff6014b066b4ba7",
      "parents": [
        "35889970de8690e8e38ea14503dd1a11db751498"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 03:14:07 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 11:43:58 2025 -0700"
      },
      "message": "Fix: Prevent diff2html anchor links from resetting view\n\nWhen clicking anchor links in the diff view, the page was resetting to conversation view.\nAdded event handling to intercept clicks on these links to prevent default browser behavior\nand instead perform smooth scrolling to the target element without changing the URL.\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "35889970de8690e8e38ea14503dd1a11db751498",
      "tree": "575df0d71e7fc89e7a6f2f5f68fdf80efc10ce5c",
      "parents": [
        "f5e28f67b3f569c73b1b020b5783872371bd0c3c"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Apr 24 20:48:16 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 11:40:27 2025 -0700"
      },
      "message": "all: only display total input tokens\n\nKnowing the cache reads and writes was mildly interesting for us,\nbut it is inside baseball, and our calculations ended up being a little wrong.\nStreamline the UI and make the math right.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "e923bb38613f15e458eb1c696e15057bbaa46a59",
      "tree": "bbd2b8d05b649db33451367635de2de80d204fdc",
      "parents": [
        "4097e5357b93d80297177ee1c7ebf736e33a623d"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 18:48:01 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 19:06:40 2025 +0100"
      },
      "message": "webui: Add empty conversation demo\n"
    },
    {
      "commit": "4097e5357b93d80297177ee1c7ebf736e33a623d",
      "tree": "b8fd43dcf1c6310ab0c2a7c34bb7c1f503136f9d",
      "parents": [
        "563d6b35a841a9dbafcaa57bf247fe9f9bf5e841"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 18:55:28 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 19:06:40 2025 +0100"
      },
      "message": "webui: Cleanup css and fix layout\n\n- Fixes #13\n"
    },
    {
      "commit": "563d6b35a841a9dbafcaa57bf247fe9f9bf5e841",
      "tree": "c5da1c5f5561f36f0f008958077cc33f0094d4a9",
      "parents": [
        "c6aabfa12da0726206cc753850dd7d723113af90"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 16:17:40 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 19:06:40 2025 +0100"
      },
      "message": "webui: Tweak mock\n"
    },
    {
      "commit": "c6aabfa12da0726206cc753850dd7d723113af90",
      "tree": "311fe32f4d65094b44e934fbca4e6f49dcc4e9b3",
      "parents": [
        "ac96b09ba64e8bb2707fb1f6c54369b4f8b844f5"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 14:40:26 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 19:06:40 2025 +0100"
      },
      "message": "webui: Remove some debug logging\n"
    },
    {
      "commit": "ac96b09ba64e8bb2707fb1f6c54369b4f8b844f5",
      "tree": "2c4911673de35b0ec7e08dca8880d3cedec53e7b",
      "parents": [
        "26daff7287b50f79a2f54563de83fa175ab35616"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 14:26:12 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 19:06:40 2025 +0100"
      },
      "message": "webui: Don\u0027t allow launch to accidentally use wrong server\n"
    },
    {
      "commit": "26daff7287b50f79a2f54563de83fa175ab35616",
      "tree": "f9f6ac873231b1e87be654137410fd02abcadc3d",
      "parents": [
        "7b43662d9959e1f5c7dd2b390474192b442d5801"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 14:25:55 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 19:06:40 2025 +0100"
      },
      "message": "webui: Fix demo css\n"
    },
    {
      "commit": "b9ac849c781135bfd08e71d0b0b4355433006d1f",
      "tree": "74e71f018c8bed529025194e0a3b365a826d1d69",
      "parents": [
        "8cac59aedb3ae4f45464ce3cd4eed36d6834dc7b"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 12:09:40 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 12:21:19 2025 +0100"
      },
      "message": "Fix css mime type\n"
    },
    {
      "commit": "8cac59aedb3ae4f45464ce3cd4eed36d6834dc7b",
      "tree": "2ffecc10a275f859c354c234d08e9b763376a4ff",
      "parents": [
        "bbca240367c3df26870ffe0fcc41c0c004679736"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 12:21:19 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 12:21:19 2025 +0100"
      },
      "message": "feat: integrate Mock Service Worker (MSW) for API mocking and testing\n\nCurrently just used for demo page\n\n- Added MSW as a dependency in package.json.\n- Configured MSW in the demo HTML to start the worker and handle API requests.\n- Created mockServiceWorker.js to manage service worker lifecycle and request handling.\n- Implemented browser.ts to set up the MSW worker with defined request handlers.\n- Developed handlers.ts to simulate API responses and manage application state for testing.\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"
    }
  ]
}
