)]}'
{
  "log": [
    {
      "commit": "d0ac1eadd3a80c9d115ce4d1c13cdb78ed266df3",
      "tree": "e5b39519d626c5e866a1646063461886f75716bf",
      "parents": [
        "5e227dd8f494194284b4b545c02e09bc79909d41"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Apr 21 20:04:19 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Apr 21 20:04:53 2025 -0700"
      },
      "message": "sketch: \"git add remote sketch-host\"\n\nHaving a named remote makes working with the sketch container\neasier with the terminal and so forth.\n"
    },
    {
      "commit": "5e227dd8f494194284b4b545c02e09bc79909d41",
      "tree": "cbe3fb6cb160fea4379e822fcca2cfcbe5bc51cf",
      "parents": [
        "e8d6b80c8804353641c0d999d1897e29b068bbdc"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Apr 21 15:55:29 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Apr 21 20:04:53 2025 -0700"
      },
      "message": "sketch: Linux support\n\nTogether with 8a89e1cbd3e7c9bbe1c561e88141527a0c894e06, this\nshould resolve https://github.com/boldsoftware/sketch/issues/3,\nin supporting Linux.\n\nTo test on a Mac, run \"limactl shell default go run ./cmd/sketch -verbose\", assuming\nyou have a lima default VM with sketch\u0027s dependencies already prepped.\n\nThe issues we encountered were:\n\n1. Explicit checks for \"is Colima installed\", \"is docker installed\",\n   etc. Easy enough to fix these.\n\n2. When go\u0027s toolchain builds, it puts the output in different places\n   depending whether it\u0027s cross-compiled or not. Fine, we adapt.\n   Note that os.Rename() doesn\u0027t always work, and we fall back to\n   copy/delete. Mode has to be set appropriately to, to make the\n   /bin/sketch executable executable.\n\n   Re-building is kind of silly: we could use /proc/self/exe, for\n   example, or cross-mount the binary into the container, or any\n   number of other things. That said, here we keep the paths the same.\n\n3. Docker networking setup for the git server. The host git repo\n   is served with git\u0027s cgi-bin wrapper. host.docker.internal\n   seems to work different in colima vs Ubuntu\u0027s docker.io, so\n   an extra command line flag to docker was added. Then,\n   it turns out that our git server checks that the remote is\n   127.0.0.1, which seems to be how Colima does its networking,\n   but isn\u0027t the case for Docker in general. To handle this, we\n   use HTTP Basic Auth with a random password. (Git also has\n   an \"http.extraHeader\" configuration, but basic auth seems just\n   as good and more obvious.)\n\nIncidentally, I\u0027m also adding the git remote as a git remote\nnamed \"sketch-host\" to make it easier to work with in the terminal,\nif necessary.\n"
    },
    {
      "commit": "e8d6b80c8804353641c0d999d1897e29b068bbdc",
      "tree": "3ee460802c8a7c375a24aa8795acf5a51e427280",
      "parents": [
        "5164eee229bec08f6ba01d6416a4e0c324230c5a"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 19:02:05 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 21 19:02:05 2025 -0700"
      },
      "message": "Add GitHub workflow to run tests for changes under loop/webui/...  (#7)\n\n* Add GitHub workflow for loop/webui tests\n\nThis workflow runs npm test in the loop/webui directory\nwhen there are changes to files in that directory.\n\nCo-Authored-By: sketch\n\n* webui: use terser output on ci"
    },
    {
      "commit": "5164eee229bec08f6ba01d6416a4e0c324230c5a",
      "tree": "a7948033c06853104f35cd013fb4b2ddcaf760dd",
      "parents": [
        "2deac8429a5364866ab6471b44466f78ccf5c0b3"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 18:20:23 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 18:20:23 2025 -0700"
      },
      "message": "webui: run format, ignore src/types.ts\n"
    },
    {
      "commit": "2deac8429a5364866ab6471b44466f78ccf5c0b3",
      "tree": "ebd40534a0680809a40dbb5738f97c6aaed7a088",
      "parents": [
        "07b3e39ebe648f91f02a9cb703ecbc49900c91da"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 18:17:57 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 18:18:13 2025 -0700"
      },
      "message": "webui: add \u0027open\u0027 status, elapsed time to tool-cards\n"
    },
    {
      "commit": "07b3e39ebe648f91f02a9cb703ecbc49900c91da",
      "tree": "7c49f8f8b7ab1d5086e4fa777534f6aedc793e93",
      "parents": [
        "8a89e1cbd3e7c9bbe1c561e88141527a0c894e06"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 22:51:14 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 16:57:08 2025 -0700"
      },
      "message": "Make textarea in sketch-chat-input user-resizable\n\nFixes https://github.com/boldsoftware/sketch/issues/6\n\n- Changed resize property from \u0027none\u0027 to \u0027vertical\u0027 to allow user resizing\n- Increased max-height from 120px to 300px to allow more expansion\n- Enhanced user experience by allowing them to resize the chat input according to their needs\n- Automatically resize the textarea as the user types (up to max-height)\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "8a89e1cbd3e7c9bbe1c561e88141527a0c894e06",
      "tree": "06e01294a87f29acb808a1d479a627a8c0711f35",
      "parents": [
        "176de79e7d3d6a894babccc5d8dc8bb9bf133828"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Apr 21 15:27:13 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Apr 21 15:35:02 2025 -0700"
      },
      "message": "sketch: support Linux with -unsafe\n\nhostReqsCheck wants too much in unsafe mode, and Colima doesn\u0027t make\nsense for Linux anwyay, so let\u0027s fix that.\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "176de79e7d3d6a894babccc5d8dc8bb9bf133828",
      "tree": "bec096858c74a6a51774ccff398a613c7944c2db",
      "parents": [
        "d9f1337ec3317a60df50d8ba4eefb448473d62fa"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Apr 21 12:25:18 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Apr 21 15:35:02 2025 -0700"
      },
      "message": "sketch: compress JS and CSS\n\nWe noticed that our JS bundles weren\u0027t compressed; let\u0027s compress them.\nSketch did most of the work here itself, but there\u0027s some nonsense\naround the fact that we pass a zip.Reader around, which can\u0027t seek.\nWe\u0027re probably doing more work than strictly necessary on the server side.\n\nAdd gzip compression for JS and source map files in esbuild\n\n- Added compression for .js and .js.map files in the esbuild Build() function\n- Gzipped files are created alongside the originals with .gz extension\n- This allows for compressed asset serving when supported by clients\n\nCo-Authored-By: sketch\n\nAdd support for serving pre-compressed JS and source map files\n\n- Created a custom HTTP handler for /static/ path\n- Handler checks if requested JS/JS.map files have gzipped versions\n- Serves gzipped files with proper Content-Encoding headers when available\n- Falls back to original files when compressed versions are not found\n- Client support for gzip encoding is verified through Accept-Encoding header\n\nCo-Authored-By: sketch\n\nExtend gzip compression to include CSS files\n\n- Added CSS files to the compression list alongside JS and source map files\n- Added debug output to show which files are being compressed\n- Updated error messages to reflect the inclusion of CSS files\n\nCo-Authored-By: sketch\n\nFix variable naming in Accept-Encoding header processing\n\n- Renamed \u0027header\u0027 variable to \u0027encoding\u0027 for better semantics when processing Accept-Encoding headers\n- Addresses gopls check issue in compressed file handler\n\nCo-Authored-By: sketch\n\nSimplify Accept-Encoding header processing\n\n- Simplified check for gzip support using strings.Contains()\n- More efficient approach than splitting and iterating\n- Addresses gopls efficiency recommendation\n\nCo-Authored-By: sketch\n\nExtract compressed file handler to separate package\n\n- Created a new package loop/server/gzhandler\n- Moved compressedFileHandler implementation to the new package\n- Renamed to Handler for better Go idioms\n- Updated loophttp.go to use the new package\n- Improved modularity and separation of concerns\n\nCo-Authored-By: sketch\n\nEnhance gzhandler and add test coverage\n\n- Updated gzhandler to handle all files except .gz files\n- Added comprehensive test suite for gzhandler\n- Removed debug print from esbuild.go\n- Tests different file types, browsers with and without gzip support\n- Tests directory handling\n\nCo-Authored-By: sketch\n\nFix \u0027seeker can\u0027t seek\u0027 error in gzhandler\n\n- Changed approach to read gzipped file into memory before serving\n- Avoids io.Seeker interface requirement for http.ServeContent\n- Fixes 500 error when serving compressed JavaScript files\n- Added missing io import\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "d9f1337ec3317a60df50d8ba4eefb448473d62fa",
      "tree": "67b60b05d8e2e3fb01293f68dfc5d08600a28dda",
      "parents": [
        "db8c5abcc18082bcbf47247e8d50889a32e65e06"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 15:08:49 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 15:21:40 2025 -0700"
      },
      "message": "webui: auto-generate types.ts from go structs\n"
    },
    {
      "commit": "db8c5abcc18082bcbf47247e8d50889a32e65e06",
      "tree": "519f68c44d1b5569c57533cec9b886d360e0b54e",
      "parents": [
        "fae1757ffae063830d5f789258bebee62727b1b4"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 21 15:09:16 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 21 15:09:55 2025 -0700"
      },
      "message": "README.md: add missing comma\n\nAt least, I think it is a missing comma.\nCould also have been a missing \"that\".\n\nOf course, the typos are a sign that it was written by a human.\nWeird world.\n"
    },
    {
      "commit": "fae1757ffae063830d5f789258bebee62727b1b4",
      "tree": "8ae6b4a6d1d2d80830b3d7c86e207199d0d48a83",
      "parents": [
        "64d329991f8577311ff5bea692b8fbc711b97b32"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 21 11:48:05 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 21 11:48:05 2025 -0700"
      },
      "message": "dockerimg: unset GOBIN when installing"
    },
    {
      "commit": "64d329991f8577311ff5bea692b8fbc711b97b32",
      "tree": "fea131e6e5bfba5f83b1fd79c03738f2b7d559d4",
      "parents": [
        "2c5bba48c23d379fa9a77d06b77093849af87a9d"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon Apr 21 09:14:36 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon Apr 21 09:14:36 2025 -0700"
      },
      "message": "README.md: some basic info\n"
    },
    {
      "commit": "2c5bba48c23d379fa9a77d06b77093849af87a9d",
      "tree": "66ec4140ecac50d81f8e521204e315183ec83f35",
      "parents": [
        "43664f62866c05a5d7d6b324904f75995d37bba7"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 19:33:17 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 19:45:01 2025 -0700"
      },
      "message": "webui: mv scroll behavior to sketch-timeline\n\nMoves the automatic scrolling behavior from sketch-app-shell into\nsketch-timeline, where it makes more sense.\n\nThis change also makes automatic scrolling conditional on\nan internal \"scrollingState\", which we update whenever you\nmanually scroll to, or away from the bottom of the timeline.\n\nIf you scroll to the bottom of the timeline, then it\u0027s \"sticky\"\nand newly arriving messages will keep scrolling you to the bottom\nas they render.\n\nIf you scroll up to older messages though, then we stop automatically\nscrolling you to the latest messages at the bottom of the timeline.\n\nWhen the timeline is in this latter \"floating\" scrollingState, we\nalso render a floating down-arrow button over the lower right corner\nof the timeline.  Clicking on this will take you down to the latest\nmessage at the end of the timeline.\n"
    },
    {
      "commit": "43664f62866c05a5d7d6b324904f75995d37bba7",
      "tree": "e1642d12c23acebad84c1297818db365836971bc",
      "parents": [
        "b29f8911e4c0d99d6c32866d7174a51b6730e9d8"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 16:13:03 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 16:13:03 2025 -0700"
      },
      "message": "termui: print newline before branch name\n"
    },
    {
      "commit": "b29f8911e4c0d99d6c32866d7174a51b6730e9d8",
      "tree": "34e445527e949fb27970d4264db8a776323be485",
      "parents": [
        "ec3ad1a7798b0dc1d17d363c91680b7828d7fce2"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 15:39:11 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 15:53:30 2025 -0700"
      },
      "message": "webui: Migrate from @open-wc/testing to Playwright\n"
    },
    {
      "commit": "ec3ad1a7798b0dc1d17d363c91680b7828d7fce2",
      "tree": "1f48c26d0808f951a2c9487796709a5eb09f2f80",
      "parents": [
        "71941bdfa1156b748072e2dfe61c714d3ed02913"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 13:55:16 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 23:51:21 2025 -0700"
      },
      "message": "webui: split sketch-tool-card into per-tool cards\n"
    },
    {
      "commit": "71941bdfa1156b748072e2dfe61c714d3ed02913",
      "tree": "28eeb5cb68bef3e0eb5b6a5ec63d17f4150e4fbb",
      "parents": [
        "9abbf92a1c58300005971d7f89b301620d59e883"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 13:31:48 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 14:01:53 2025 -0700"
      },
      "message": "loop/webui: add prettier\n"
    },
    {
      "commit": "9abbf92a1c58300005971d7f89b301620d59e883",
      "tree": "b2170fdb5383543e727536c2dc121a9914f6a8a6",
      "parents": [
        "86b56862f8d3e192646a17548ef5294582c31f8f"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 13:17:38 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 18 13:17:38 2025 -0700"
      },
      "message": ".github/workflows: use ubuntu-latest (#2)\n\n"
    },
    {
      "commit": "86b56862f8d3e192646a17548ef5294582c31f8f",
      "tree": "d0235f3f56695de8e6281ba3f57a663847204f33",
      "parents": [
        "f5bb3d3f1aa33e2a066c4139675f096f73c1f9d4"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 13:04:03 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 18 13:04:03 2025 -0700"
      },
      "message": "loop/webui: swtich to web components impl (#1)\n\n* loop/webui: swtich to web components impl\n\nThis change reorganizes the original vibe-coded\nfrontend code into a structure that\u0027s much\neasier for a human to read and reason about,\nwhile retaining the user-visible functionality\nof its vibe-coded predecessor. Perhaps most\nimportantly, this change makes the code testable.\n\nSome other notable details:\n\nThis does not use any of the popular large web\nframeworks, but instead follows more of an\n\"a la carte\" approach: leverage features\nthat already exist in modern web browsers,\nlike custom elements and shadow DOM.\n\nTemplating and basic component lifecycle\nmanagement are provided by lit.\n\nState management is nothing fancy. It\ndoesn\u0027t use any library or framework, just\na basic \"Events up, properties down\"\napproach.\n\n* fix bad esbuild.go merge\n\n* loop/webui: don\u0027t bundle src/web-components/demo\n\n* loop/webui: don\u0027t \u0027npm ci\u0027 dev deps in the container\n\n* rebase to main, undo README.md changes, add webuil.Build() call to LaunchContainer()"
    },
    {
      "commit": "f5bb3d3f1aa33e2a066c4139675f096f73c1f9d4",
      "tree": "186963b48527831888af9054c5e400c9198297de",
      "parents": [
        "8a617cb963b73d6dd38b44289720b1808278f9b7"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 10:47:59 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 10:57:48 2025 -0700"
      },
      "message": "dockerimg: make sure webui build exists before copying it\n"
    },
    {
      "commit": "8a617cb963b73d6dd38b44289720b1808278f9b7",
      "tree": "7d1a040d452c4e7aad460758a9b60d53d71a69f6",
      "parents": [
        "8bff16a56b85ae53977350984c3376b8a2eff989"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:28:43 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:28:44 2025 -0700"
      },
      "message": "dockerimg: reuse a cached gopath for cross compiling\n\nAlso build using sources in the currently checked out sketch.dev go\nmodule if sketch is invoked inside one.\nThis is useful when develping sketch.\n"
    },
    {
      "commit": "8bff16a56b85ae53977350984c3376b8a2eff989",
      "tree": "5b7e94021dda0c9adc7b585ea5b150f823fc9d0a",
      "parents": [
        "be10fa9661f7382453dd1bf9b63eb3615c48e2e7"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:16:49 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:17:59 2025 -0700"
      },
      "message": "webui, dockerimg: store the webui assets in a zip and cp them into the container\n"
    },
    {
      "commit": "be10fa9661f7382453dd1bf9b63eb3615c48e2e7",
      "tree": "d147e67682c51b2b66d562bf4271edb513064609",
      "parents": [
        "b9eaef5da7b64da01637bb4fe60bea43bba75ede"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:16:00 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:17:59 2025 -0700"
      },
      "message": "dockerimg: mkdir .cache in the base template and rebuild when the template changes\n"
    },
    {
      "commit": "b9eaef5da7b64da01637bb4fe60bea43bba75ede",
      "tree": "3a6cea0c5dc448c3a817bfe262166e8fd242f401",
      "parents": [
        "993a3fcbad8df15e5a735798d260316350ce151f"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 15:23:18 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 15:23:19 2025 -0700"
      },
      "message": "dockerimg: set GOTOOLCHAIN\u003dauto for cross compiling\n\nWithout this, if a user sets GOTOOLCHAIN\u003dlocal in their host env the\nbuild will fail.\n"
    },
    {
      "commit": "993a3fcbad8df15e5a735798d260316350ce151f",
      "tree": "0de32b37978c0cffc9f5a0fdb14173b2838a3f42",
      "parents": [
        "69c67317a8730d2573689b56a98949a5e4e956c9"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 13:51:45 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 13:51:45 2025 -0700"
      },
      "message": "dokerimg: clean up temp dir\n"
    },
    {
      "commit": "69c67317a8730d2573689b56a98949a5e4e956c9",
      "tree": "79c2e12800fc7bb513d038ed6b5926d522aea96b",
      "parents": [
        "2e463fb649fcff14d4025ddb91f630a98e7da526"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 13:42:00 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 13:42:00 2025 -0700"
      },
      "message": "dockerimg: fix cross compile command\n"
    },
    {
      "commit": "2e463fb649fcff14d4025ddb91f630a98e7da526",
      "tree": "0e86854d80d2759a913870655f13226c31f9d30c",
      "parents": [],
      "author": {
        "name": "Earl Lee",
        "email": "earl.lee@sketch.dev",
        "time": "Thu Apr 17 11:22:22 2025 -0700"
      },
      "committer": {
        "name": "Earl Lee",
        "email": "earl.lee@sketch.dev",
        "time": "Thu Apr 17 11:35:33 2025 -0700"
      },
      "message": "Initial commit\n"
    }
  ]
}
