)]}'
{
  "log": [
    {
      "commit": "9bca61ef623ea8cd72a906752be73af572af02a9",
      "tree": "4d6488b6e6e8543c3f0b5e1682d11e0927c27d1b",
      "parents": [
        "75bd37d2a3067b6f431d56e891064b73dc2def2c"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu May 22 12:40:06 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu May 22 12:44:59 2025 -0700"
      },
      "message": "feat: enhance UI with commit pulsing animation and improved copy icon\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s80fdaac660ea645ek\n"
    },
    {
      "commit": "8c3b53a97ae2a204842c0c86ca859947ce20b1dd",
      "tree": "6532221877cdcb1bd572144fcc5926cfd4231ecb",
      "parents": [
        "456d5f9d4213deab28a1f528cb8edc3a1f8d5262"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu May 22 18:30:58 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu May 22 18:30:58 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "14fe75d6ece5116b3887b6fc027e564c4de518e6",
      "tree": "5a3e72a02da8d06818fcd3531147087f8741f81b",
      "parents": [
        "f28729932fdf9ecc67d3fabbfca297178a323a14"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu May 22 17:39:38 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu May 22 11:28:39 2025 -0700"
      },
      "message": "webui: Remove restart conversation button and modal component\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s0da284ec42d4da59k\n"
    },
    {
      "commit": "55c87e3ababb0800b5710cbb11bec4dea8c13515",
      "tree": "13517efe8467be99714a65a24963873cbe18e137",
      "parents": [
        "9d7f0ccec1317b68c754b6b154f7c362395028c2"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Tue May 20 14:08:18 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Tue May 20 13:11:23 2025 +0000"
      },
      "message": "webui: Fix cursor jumping during image uploads\n\nWhen pasting an image and continuing to type while it\u0027s uploading,\nthe cursor position would jump when upload completed, disrupting typing.\n\nThis fix simply removes the explicit cursor positioning code after\nimage upload, allowing the browser to maintain the user\u0027s current cursor\nposition naturally. This provides a more intuitive experience, especially\nwhen typing while an image is uploading.\n\nThe approach is simpler and more robust than trying to track cursor\nposition changes and calculate offsets manually.\n"
    },
    {
      "commit": "397871d299216f63dc38a9cc6f2ca386d0f4bd75",
      "tree": "ea1cec9278f37739f972a390b0ec564a1fe9219f",
      "parents": [
        "a8322202f36c35f677b8834cdce8f21ab3d8c6dc"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon May 19 15:02:45 2025 +0100"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Mon May 19 14:03:43 2025 +0000"
      },
      "message": "webui: Add End button to shutdown container\n\nThis change adds a new button to the sketch-app-shell UI alongside the\nexisting Restart and Stop buttons. When clicked, the End button shows a\nconfirmation dialog and then sends a request to a new /end endpoint.\n\nThe /end endpoint gracefully shuts down the inner sketch container.\n\nFixes #88\n"
    },
    {
      "commit": "8c4636270be67625cc27ce356f6da1a11e245069",
      "tree": "f6a4db58f1eb71033410150daa7290d4e41aca0a",
      "parents": [
        "5e3570280bf3bb0f84482ff9556739d34eb08093"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri May 16 21:54:17 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri May 16 21:54:17 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "5e3570280bf3bb0f84482ff9556739d34eb08093",
      "tree": "0721d16a93a8744466fb5206114d1f25b5b8cadb",
      "parents": [
        "272a90ee1a74bda5618d4866e03f4b7067947784"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 16 04:50:34 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 16 14:53:24 2025 -0700"
      },
      "message": "webui: Update status indicators\n\n- Remove green dot connection indicator\n- Add DISCONNECTED state with red styling when connection is lost\n- Update the status bar to show DISCONNECTED instead of IDLE/WORKING when disconnected\n- Create demo page to preview all three status states\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: skR3m0v3Gr3nD0tD1sc0nn3ct3dR3d\n\nChange-ID: sa2b3679b9cdcaf80k\n"
    },
    {
      "commit": "272a90ee1a74bda5618d4866e03f4b7067947784",
      "tree": "9baf4f84ce80b1c7073a95b6959f6dd11ab3b48b",
      "parents": [
        "d3ac112a45111abf0e57c327d55e2cc66a136abb"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 16 14:49:51 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 16 14:51:40 2025 -0700"
      },
      "message": "Add Monaco diff-view, the saga ...\n\nI set out to use Monaco to support the diff view. diff2html is lovely,\nbut there were a ton of usability improvements I wanted to make (line\nnumbers not making things double spaced, choosing which diff, editing\nthe right-hand side), and it seemed a dead end. Furthermore, Phabricator\nand Gerrit\u0027s experience is that diffs should be shown file by file,\nbecause you\u0027ll inevitably see a diff with a file that\u0027s too large, and\nthe GitHub PR view often breaks on big changes... so I wanted to show\nfiles diff-by-diff, with \"infinite\" context when unchanged sections are\nexpanded. So...\n\nUltimately, all of this was sketch-coded over maybe 30 Sketch sessions.\nI threw away a lot of branches. My git reflog is a superfund site.\n\nPrompting whole-hog didn\u0027t work. Or, rather, it made significant\nprogress, but something very serious wouldn\u0027t work, and I couldn\u0027t\nfigure out what, and nor could Sketch.\n\nInstead, I started by adding a new webcomponent that was just a\nplaceholder. Then, using https://rodydavis.com/posts/lit-monaco-editor,\nI nudged Sketch into adding Monaco to it. Sketch pulled out:\n\n   You\u0027re right, I should properly read the blog post before implementing the\n   solution. Let me check the referenced blog post.\n\nI worked heavily in the demo environment at first, but here I ran into\nthe issue that we have two different esbuild systems: one is vite and\none is esbuild.go, and they\u0027re configured differently enough.\n\nMonaco is unusable and confusingly so when its CSS isn\u0027t loaded. The right\nway to load it, I\u0027ve found, is via\n\n  @import url(\u0027./static/monaco/min/vs/editor/editor.main.css\u0027);\n\nI spent more time than I care to admit noticing that originally\nthis wasn\u0027t relative, and when we use a skaband setting, the\npaths need to be relative-aware.\n\nThe paths to the various workers need to be similarly correctly placed.\n\nGetting Sketch to build demo data but not put testing code into production\ncode was tricky. (I threw away a lot of efforts and factories and singletons...)\n\nWhen I set out to do the git commit selection, I wanted to do a bunch of\nbackend /git/* handlers. These were easy enough to code in sketch. I had\nto convince Sketch to put them in git_tools.go and not in the agent.\nIt doesn\u0027t really matter: these functions to parse git are pretty stateless,\nbut it\u0027s less work to have them separate. Sketch was mediocre at writing\ntests for them. Did you know that our container has an older version\nof git that doesn\u0027t have the same options to decorate ref names? Yeah, nor did\nI.\n\nHandling unstaged changes was fun. git diff --raw shows unstaged files\nas having identity 0000. Ideally we\u0027d be using jj and there\u0027d be\na synthetic commit, but instead uncommitted-possible files are read\nby content.\n\nA real big challenge was getting the Monaco view to use the right vertical and\nhorizontal space. I did this many, many times. I don\u0027t claim to understand flex\nand the virtual dom, and :host, and all the interactions. It would fix one\nthing and break another. The chat window would shrink. The terminal would\nshrink.\n\nScreenshot support was excellent. I eventually added paste support just so\nthat I could expedite my workflow, and Sketch coded that easily on the first\npass with minor feedback.\n\nI learned the hard way that Safari\u0027s support for WebComponents/shadow\ndom in its web inspector is rough. See https://fediverse.zachleat.com/@zachleat/114518629612122858\n\nI also learned the hard way that Chrome doesn\u0027t use fonts loaded in CSS\nin a shadow dom. That\u0027s why the codicon font had to be in the global\nstyle sheet.\n\nKudos to John Reese who kindly allowed me, a long time ago, to adapt a\nshell script he had at work to look over diffs into https://github.com/philz/git-vimdiff.\nThat\u0027s the inspiration for having the \"new code\" be editable when you\u0027re\nreviewing it; why shouldn\u0027t it be!?!\n\nThere are a handful of follow up tasks:\n\n* We lose state when we switch to the Chat view and back.\n* Need URL-based support for where we are.\n* Maybe need shortcut keys to move between diffs and changes.\n* Maybe need caching or look-ahead for downloading the next or previous\n  file.\n* We spend too much vertical real estate on all the diff selections;\n  could we scroll it out of the way, collapse it, tighten it, etc.\n* The workers sometimes throw errors into the console. I think they\u0027re\n  harmless and merely need to be caught and suppressed.\n* Needing to commit changes when things are saved is weird. Should we\n  commit automatically? Amend the previous commit? Have a button for\n  that? Show the git dirty state?\n* Our JS bundle is big. We could maybe delay loading the monaco bundle\n  to help.\n\nThanks for coming to my TED talk.\n"
    },
    {
      "commit": "8bdf627180b64b0dc09018bf512f6ebf192ab674",
      "tree": "47d9b1e5348a33846fc11704f99c3cf7151ec3f1",
      "parents": [
        "0ead54d4591b9de1dedb897302f3ffaf36454c8e"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 16 13:36:21 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 16 14:51:40 2025 -0700"
      },
      "message": "Playwright: don\u0027t use junit inside Sketch.\n\nI\u0027ve found Sketch doesn\u0027t understand the JUnit failure nearly\nas well as the usual way.\n"
    },
    {
      "commit": "044a62e8e3d28a573c624d722f0fde38c30a19e2",
      "tree": "cfed4a459489b6f8c08c7aa98aa6ea416dc0f427",
      "parents": [
        "276f460cc7136e50a07cf544ee5ef6bf2a1c2630"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri May 16 10:40:59 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri May 16 10:47:11 2025 +0000"
      },
      "message": "webui: Prevent sending messages while uploads are in progress\n\nThis fixes an issue where users could press Enter immediately after pasting an image,\nwhich would submit the message with just the \u0027[Uploading image.png...]\u0027 placeholder text.\n\nNow the system:\n1. Tracks uploads in progress\n2. Prevents message submission while uploads are active\n3. Shows visual feedback to the user\n4. Disables the send button during uploads\n"
    },
    {
      "commit": "bd7b625d4ca17b5cb5207b4917a6e61ea398f2d0",
      "tree": "32c1588d9cd5854d1322615d0aa14cc35d33f3a9",
      "parents": [
        "e3c2f22ee87eb9830dad42ca0388b9743923ec59"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu May 15 16:21:36 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu May 15 15:14:37 2025 -0700"
      },
      "message": "webui: reposition working/idle banner over lightbulb/wrench icons\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sb695b8b61b1f5134k\n"
    },
    {
      "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": "74d690e7b4794f2c164a9da30dd106a002b935d9",
      "tree": "412f1ad777e599ed61904c7f80c53859315babab",
      "parents": [
        "039fc34bd9c8f7cf3e9f3c9aeee2e9677ce28e00"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 14 18:16:03 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 15 12:40:29 2025 -0700"
      },
      "message": "claudetool: remove knowledge base, focus on about sketch\n\nWe should have a more general kb.\nMeanwhile, this is important and standalone.\nMake it all clearer and sharper.\n"
    },
    {
      "commit": "339b56efb8d84aa0c445071b01c48637e4943192",
      "tree": "0afd52f0b7e2eee21cd4d1ae8c834bb706ca91ac",
      "parents": [
        "75f93a1e5f32366c138c1584fdeb4919e257719d"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu May 15 14:48:07 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu May 15 15:01:30 2025 +0000"
      },
      "message": "webui: Implement drag-and-drop file upload in chat window\n\nFixes https://github.com/boldsoftware/sketch/issues/93\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s1ff4cfd325e3822ck\n"
    },
    {
      "commit": "a10f151746c0dafd073d4998755bedbec8f82db6",
      "tree": "882cde04e6d9fc0244f6fdb531532051e52ffb45",
      "parents": [
        "6525d826f22d12a57b9acb474a5e7b22b48ba7ea"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu May 15 13:53:26 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu May 15 14:14:03 2025 +0000"
      },
      "message": "webui: add copy button to markdown code blocks\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: skad1b3ffhsk\n"
    },
    {
      "commit": "3321939d46174ae7ab27483b8d37e0174e6476db",
      "tree": "77e9a4aa33aca4193a6136aeb30d25ac892e40ea",
      "parents": [
        "f84e88cd1c2455610de5cb73b8766972216bc14c"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed May 14 20:43:24 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu May 15 03:44:20 2025 +0000"
      },
      "message": "Explaining relative paths to my dear llm.\n"
    },
    {
      "commit": "f84e88cd1c2455610de5cb73b8766972216bc14c",
      "tree": "c38c21c73bd2412d1d21f0846c8ba1ba95e276e9",
      "parents": [
        "da796543d8e7087e428b1e55b8f70bc8edf206ae"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed May 14 23:19:01 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed May 14 23:35:47 2025 +0000"
      },
      "message": "webui: Add file paste upload support\n\n- Add new /upload endpoint in loophttp.go to save pasted files to /tmp\n- Make the implementation generic to handle any file type, not just images\n- Implement paste event handling in sketch-chat-input.ts to detect files\n- Add logic to upload files and insert file paths in chat input\n- Improve random filename generation with better comments\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sff2e40b9b3e4c05ak\n\nwebui: Improve file upload UI experience\n- Use relative path for upload endpoint\n- Add loading indicator during file upload\n- Show error message if upload fails\n- Improve cursor position handling\n"
    },
    {
      "commit": "7231839efcb072bf6e256d56fee7d2d9b4510583",
      "tree": "93231c027a5bd66d58513a65327aec37016270d1",
      "parents": [
        "eab12def4e6aacfd50bf8a460c714d20300706b7"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed May 14 02:56:07 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 13 20:05:05 2025 -0700"
      },
      "message": "webui: add agent state and status banner\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s9f1c332aad2630dfk\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": "34bb09adf0cfc2f7fa4a2615e72d634aa88a6016",
      "tree": "d11fc262309a5d9ca704ebefe1ee43e20d8f572d",
      "parents": [
        "848572dcc2fff195e330d896530de63cd21b0f00"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Tue May 13 15:39:54 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Tue May 13 15:56:29 2025 -0700"
      },
      "message": "webui: fix client-side nav back button\n"
    },
    {
      "commit": "848572dcc2fff195e330d896530de63cd21b0f00",
      "tree": "87d93dadd66dbf5c8bc18060739d1235ef93c953",
      "parents": [
        "c31e29689eaf26e7904e074bf8dcb3f02150c1ac"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Tue May 13 22:27:42 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 13 22:31:22 2025 +0000"
      },
      "message": "webui: Add documentation explaining sketch-tool-card component architecture\n\nAdded DEAR_LLM.md that documents the relationship between LitElement\nsubclasses and the sketch-tool-card custom element. The document explains:\n- Component hierarchy and containment relationships\n- How composition (not inheritance) is used for specialized components\n- Shadow DOM encapsulation and CSS styling effects\n- Various styling techniques used in the components\n\nThis serves as a reference for understanding the web component architecture.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s7f7a15baab05d7e9sk\n"
    },
    {
      "commit": "7fb3499f45c55be818fe6d439fe61fa82ee59572",
      "tree": "2f1219ca674e9c34c6bbb2653237bece4059e3f6",
      "parents": [
        "17b1094cadb489b38596527d2d1f693653797fad"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 13 02:23:55 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 13 02:23:55 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "31785aed38e0f63fa736430c6240c8a76b8285dc",
      "tree": "35916d3dbedaeac296ece3dd57610efd82c99c8d",
      "parents": [
        "5c7f95714f34ea327b8f300238da6491dedd6adb"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 06 01:50:58 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 19:17:50 2025 -0700"
      },
      "message": "loop: add knowledge_base tool for on-demand information\n\nThe knowledge_base tool provides a way for agents to access specialized information\nwhen needed. Initial topics include:\n\n- sketch: how to use Sketch, including SSH, secrets, and file management\n- go_iterators: information about Go\u0027s iterator feature added in Go 1.22\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "5c7f95714f34ea327b8f300238da6491dedd6adb",
      "tree": "3e550d2deb91606405dc398782443fdd37a18e2f",
      "parents": [
        "8dff12f977fa4f52c27142e8f7b4c8c5d9293711"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 13 01:17:31 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 13 01:17:31 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "6d4c7eadb2d465aa665288acc3f45e693d9a76d3",
      "tree": "2e5128fc06d72237a292d038008ab15bf59e9b59",
      "parents": [
        "98b64d1b30d8715a9238fcda7ecedd313c37b5b7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 12:14:24 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 17:36:19 2025 -0700"
      },
      "message": "dear_llm: update\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s9141e33d762836c9k"
    },
    {
      "commit": "98b64d1b30d8715a9238fcda7ecedd313c37b5b7",
      "tree": "f50c5eafc52d823b81849fa1cd7f384cff5fa461",
      "parents": [
        "39ed5a59d0c3802b3895dbc5da0b38b358252ea3"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 19:42:43 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 17:36:19 2025 -0700"
      },
      "message": "webui: switch to chat view when user sends a message\n\nWhen a user sends a message by hitting the Send button or pressing Enter,\nautomatically switch them back to the Chat view so they can immediately\nsee that their message is being processed.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s35da158cf333d3abk\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": "04e778cbe6955cccf56a4e52c163a1c2220ff84a",
      "tree": "fe0d1b60f73d113cf82a8f66759e6496d3414942",
      "parents": [
        "05224846741b500d8103bd6930a7717e1211ef01"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sat May 10 22:08:04 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sat May 10 23:27:10 2025 -0700"
      },
      "message": "webui: name:sketch-webui, export web-components\n\nThe purpose of this change is so we can re-use the\nsketch-timeline custom element in a different app\nin a different repo, specifically the app that\nrenders publicly shared sketch session transcripts\nat sketch.dev/messages/\u003csession ID\u003e\n"
    },
    {
      "commit": "80b488d853e2766b638e65cfe44a5904d7cb24ee",
      "tree": "abd280ec3924efb4dbbd72622129bc4af56e28ca",
      "parents": [
        "6458e7c751856a9f7f4004367cb6274e564a1489"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 18:21:54 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Sun May 11 01:22:37 2025 +0000"
      },
      "message": "Browser tools: initialize lazily and add timeouts.\n\nAlso rename browser_screenshot to browser_take_screenshot for clarity\\n- Update both Go and UI code to maintain consistency\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s8a5cabff914f88dfk\n"
    },
    {
      "commit": "d03318d51ca1e707698f1aab8d18ed83fc159cbe",
      "tree": "ae2ee324779b56baa1bc0670aa6852366a5ad9ab",
      "parents": [
        "8236cbc9eadb1bf775bbfa24ccf04be2c69faaaf"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu May 08 13:09:12 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 09 15:06:33 2025 -0700"
      },
      "message": "sketch: Introduce versions for sketch state\n"
    },
    {
      "commit": "4d54493fe3808ecd0c6a9a4d0bbcc7786e97b094",
      "tree": "9877409fc95aaa32aed882426ea15464b8036e34",
      "parents": [
        "a4ad8af8b08a54326bbbd99d57110a42c459c54e"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 13:33:53 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu May 08 19:25:30 2025 +0000"
      },
      "message": "all: support hiding subconvo output\n\nSome of it is systematically noisy.\n"
    },
    {
      "commit": "a4ad8af8b08a54326bbbd99d57110a42c459c54e",
      "tree": "91efd4a68b335315d91aa1fc41244e2faaeeb873",
      "parents": [
        "3b279a51ed0d83f3659be932d7e346609df42107"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu May 08 15:05:27 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu May 08 15:05:27 2025 +0100"
      },
      "message": "webui: Streamline playwright reporter config\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": "07e98cc3bbb33571af4f30b402c611ded849a323",
      "tree": "cdd3eca6b8d0fb88fddf5cb410b99a31d97337e9",
      "parents": [
        "7ac5ed06fe591a4a5a904929e16a9d1982bfa781"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 16:01:33 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 16:01:33 2025 +0100"
      },
      "message": "docs: Update CONTRIBUTING and README for WebUI development server setup and usage\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": "47fbca6b478414e6a07a23dbb911f73380340a60",
      "tree": "25c36f0ef5d97a06fafc86c356dd1d93e62dec63",
      "parents": [
        "ef58e063d0d82f318a766bd2e91f9deceff2cc0c"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed May 07 12:38:12 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed May 07 12:38:12 2025 +0000"
      },
      "message": "all: fix formatting\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": "c575fd79d923bbbe395dcae1d04681e8ead19818",
      "tree": "33273e0f496940ca7d25a9c6e6bccd915f2b29d7",
      "parents": [
        "b6d6d384a2cdbabd2d6abc94bd6b2c6c937d5e22"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Tue May 06 15:46:38 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 13:34:11 2025 +0100"
      },
      "message": "webui: Fix demo page\n\n- Change asset root for vite\n- Update mock handlers to support SSE by replacing long polling implementation with Server-Sent Events (SSE) in webui mock handlers.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "4962f153fa0d6812543addd690be8dba8c04a406",
      "tree": "3a90c5736422c77f8ef3dc8d552640e65f1e07a0",
      "parents": [
        "8b43ffbf41d06aee5ad5c734f1661a3b62cfe1a9"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 06 17:24:20 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 06 17:24:20 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "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"
    }
  ],
  "next": "46fff9766f75fed8e9956dd126c9d0585057ed37"
}
