)]}'
{
  "log": [
    {
      "commit": "255dc4320aed97625a17d9d398c5d076c35e9700",
      "tree": "81fb28bdd4b3aad8093349bac6cd3458fadc247c",
      "parents": [
        "e5b2fc0061e542fe2350c1675e7d18172b418882"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Sun Jul 06 21:58:00 2025 +0000"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Sun Jul 06 15:13:51 2025 -0700"
      },
      "message": "webui: fix diff scrolling (broken in 265839b0 / 5450584)\n\nSketchTailwindElement disabled shadow DOM, so the :host CSS selector\nno longer worked since there\u0027s no shadow DOM. Also some heights\nstopped being calculated correctly.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s2155f0d365ba51cak\n"
    },
    {
      "commit": "ffa94c65f4b7b3aabb0ecb50dbd9d8c2bfd40da3",
      "tree": "5f677bbf845f2b00777c2b7babe7a7dbacb49b93",
      "parents": [
        "5477736d9678803a245764439df767bf0e7c561d"
      ],
      "author": {
        "name": "philip.zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Thu Jun 19 18:43:37 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Jun 20 01:44:11 2025 +0000"
      },
      "message": "webui: add print styles for full chat printing\n\nImplement CSS print media queries across key webui components to ensure\ncomplete chat conversations can be printed without content truncation.\n\nThey\u0027re not perfect but better than nothing.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s3815b4291912c721k\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": "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": "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": "2032b1c1971ceb85ca14b20273a3783729fba3e3",
      "tree": "0486e9222643ffcbbd34286148f4a7913a169668",
      "parents": [
        "4f50a68ac73677c0022b2b3da8b4667cee01c11b"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:40:42 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:40:42 2025 -0700"
      },
      "message": "Move webui from /loop/webui to /webui\n\nThanks, perl (and git mv):\n\n\tperl -pi -e s,loop/webui,webui,g $(git grep -l loop/webui)\n"
    },
    {
      "commit": "e2a8c2f1fae1f8e3162b2533d27825e1bf800574",
      "tree": "4dcdd7de679c90a4d3ec79b47111ce5e67fd07b2",
      "parents": [
        "d140295fa7d794f5b30feb4eee2f45f9cc9ff383"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed Apr 23 15:09:25 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed Apr 23 15:09:49 2025 +0100"
      },
      "message": "webui: Improve dx\n\nFor local development, switch to Vite and update web components for improved demo experience. Note that we haven\u0027t changed how we bundle when we\u0027re actually running in sketch; that\u0027s still the go/esbuild in-memory setup. This just changes demo dev setup to get breakpoints working and a functioning full sketch-app-shell.\n\nWe still need to add some mock data, but this is a start\n\n- Introduced `vite.config.mts` for Vite setup with hot module reloading.\n- Updated `package.json` and `package-lock.json` to include Vite and related plugins.\n- Refactored demo scripts to utilize Vite for local development.\n- Created `launch.json` for VSCode debugging configuration.\n- Enhanced `Makefile` with a new demo task.\n- Improved styling and structure in demo HTML and CSS files.\n- Implemented `aggregateAgentMessages` function for message handling in web components.\n"
    }
  ]
}
