)]}'
{
  "log": [
    {
      "commit": "3cae7d97036513e4743083da7bb232a2aa566e82",
      "tree": "bd75e33df4f46fc4ea8f59a03268904dd178d1fb",
      "parents": [
        "e634d266ace9afe0f8485c13ed0aae6bcfc0a8f8"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 09:54:29 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 11:13:16 2025 -0700"
      },
      "message": "cmd/sketch: make -open default to true"
    },
    {
      "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": "42f7a7c93682a4ed04c62688e1475cd6ebc04de5",
      "tree": "e2c65947daa4012b98c6a884149c393332fd2f0c",
      "parents": [
        "23b6a2d690a4e208ec21604a5dd6a59bd1129ab5"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 10:29:21 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 11:13:16 2025 -0700"
      },
      "message": "loop: enforce rather than fix branch formatting\n\nThis way the UI will always be correct;\nthe UI runs off the LLM response, not the fixed version.\n"
    },
    {
      "commit": "23b6a2d690a4e208ec21604a5dd6a59bd1129ab5",
      "tree": "b1aa365e89aa6a9af0596a6f4ab72d0dd4021dcb",
      "parents": [
        "2978ab21bc1c0d589343468c59bb072934d8b8c7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 04:07:52 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 11:13:16 2025 -0700"
      },
      "message": "termui: remove path from prompt\n\nCurious whether anyone gets sad about its removal.\nI prefer the simpler version.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "2978ab21bc1c0d589343468c59bb072934d8b8c7",
      "tree": "3b598bd3a64eedd0602ce7ed9a01bca2a9096ef2",
      "parents": [
        "c2d26106a9bf0ce453589899640432314779b060"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 10:29:32 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 11:13:16 2025 -0700"
      },
      "message": "termui: fix up emoji spacing a little"
    },
    {
      "commit": "c2d26106a9bf0ce453589899640432314779b060",
      "tree": "6e1d3216316f5df066d22c8aa62f6f014e249def",
      "parents": [
        "81eacc409f4f5ec758493769c8d1a31e94aaeafa"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 06:19:43 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 11:13:16 2025 -0700"
      },
      "message": "termui: turn the user from a faceless gray menace into a superhero\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": "7910eef0b83f5ce15af3c1a9fa6b6f29165d335e",
      "tree": "9294b377622f118053e05650a56e2e8bcc66eb4b",
      "parents": [
        "d20ded51d0564fd3955320e6bfc6c90e5c190680"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 17:50:33 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 17:54:50 2025 +0000"
      },
      "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": "edc88dcc56ebdb1a2d9887728d0b5133b6131fbb",
      "tree": "a5b44389b3ac59022c3006d8347c36626cc7019e",
      "parents": [
        "885a16a8e37fe82dac66a7db729be202f6ce4bea"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 02:55:01 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 09:41:22 2025 -0700"
      },
      "message": "Rename cancelInnerLoop to cancelTurn to match refactored naming\n\n- Updated all references to cancelInnerLoop and CancelInnerLoop\n- Changed method and variable names to match the new processTurn naming\n- Updated references in related files: server/loophttp.go and termui/termui.go\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "885a16a8e37fe82dac66a7db729be202f6ce4bea",
      "tree": "eff84390d70dda2a09c79faffad2ba0850c1b763",
      "parents": [
        "0d95d3a268ffad82b7c645200804fb43ed088a81"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 02:49:25 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 09:41:22 2025 -0700"
      },
      "message": "Refactor loop/agent.go to reduce complexity\n\n- Restructured Agent.InnerLoop into smaller, more focused functions\n- Renamed InnerLoop to processTurn to better reflect its purpose\n- Extracted helper methods for different responsibilities\n- Improved code organization and testability\n- Each extracted function now handles a single responsibility\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "0d95d3a268ffad82b7c645200804fb43ed088a81",
      "tree": "ac9a63b6648a2555382769bcd9ce157170291224",
      "parents": [
        "9c0fc89eea578d71389edb4fd7d92eb73816f528"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 16:22:28 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 16:22:35 2025 +0000"
      },
      "message": "Improve SSH config file safety in dockerimg/ssh_theater.go\n\n- Add SafeWriteFile method to the FileSystem interface that:\n  - Writes data to a temporary file first\n  - Syncs to disk to ensure data is written\n  - Creates a backup of the original file (if it exists)\n  - Safely renames the temporary file to the target\n\n- Update all file modification operations to use SafeWriteFile:\n  - addContainerToSSHConfig\n  - removeContainerFromSSHConfig\n  - addContainerToKnownHosts\n  - removeContainerFromKnownHosts\n  - CheckForIncludeWithFS\n\nThis change reduces the risk of corruption if the process is interrupted\nwhile modifying configuration files.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "9c0fc89eea578d71389edb4fd7d92eb73816f528",
      "tree": "b5537fe6f3456ec941dde88d1bb65792212875f8",
      "parents": [
        "c796e7fb2df221dbef753556a3077da81a7fbe0c"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 08:48:42 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 08:48:42 2025 -0700"
      },
      "message": "fmt\n"
    },
    {
      "commit": "c796e7fb2df221dbef753556a3077da81a7fbe0c",
      "tree": "652c542588c3bba3ad9897c4f5e5d231fbde7aed",
      "parents": [
        "78520f50d518f331c6608cfd0dff7bb4a75dc93b"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 08:44:06 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 08:44:55 2025 -0700"
      },
      "message": "ssh_theater: fix tests\n"
    },
    {
      "commit": "78520f50d518f331c6608cfd0dff7bb4a75dc93b",
      "tree": "fadca8a92dbe7e67fcae66c89f54f398fb219c58",
      "parents": [
        "3b0795b1c52d9b470f361299e9cd359c53704a04"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 06:16:08 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 06:16:08 2025 -0700"
      },
      "message": "loop: update test fixture"
    },
    {
      "commit": "3b0795b1c52d9b470f361299e9cd359c53704a04",
      "tree": "9fab2d27f829cb93fba774f65f4a1426fec3ce05",
      "parents": [
        "74b012128c939c8fd119a4af2205451105a19ad3"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Tue Apr 29 19:09:23 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Tue Apr 29 19:39:22 2025 -0700"
      },
      "message": "ssh_theater: auto-add Include to ~/.ssh/config\n"
    },
    {
      "commit": "74b012128c939c8fd119a4af2205451105a19ad3",
      "tree": "a1b3d989ec446adc6a2b6233452c64324546ec1f",
      "parents": [
        "fff269b875d14dd6fbd1b90050739679f4bc2061"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Tue Apr 29 18:40:53 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Tue Apr 29 19:27:20 2025 -0700"
      },
      "message": "ssh_theather: use ~/.config/sketch not ~/.sketch\n"
    },
    {
      "commit": "fff269b875d14dd6fbd1b90050739679f4bc2061",
      "tree": "ee3155adc63e627cf2fe8e24a4bf1a5d7776b5c7",
      "parents": [
        "47b193683089f6ca98877af497f7800d4a26f4a9"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 01:49:39 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 19:06:19 2025 -0700"
      },
      "message": "Update title tool to reject branch names that already exist\n\nAdded a check to the title tool to verify that branches do not already exist\nbefore setting them, which prevents potential issues with duplicate branch names.\nIncludes a new unit test to validate this behavior.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "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": "0137a7f2a025a2ac08e536b207ded2d58e928e32",
      "tree": "3834c7b2a22a9e9564e67120346ae8e9eb9354fc",
      "parents": [
        "d499fd6e12374193df2d769d12753bbd1ddd1493"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 01:16:35 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 19:06:19 2025 -0700"
      },
      "message": "Improve git cherry-pick display with abbreviated SHA/branch references\n\nThis change modifies how git cherry-pick commands are displayed in the UI.\nInstead of showing full SHA hashes, it now attempts to:\n1. Show branch/tag names if available\n2. Fall back to abbreviated SHA via git rev-parse --short\n3. Use the original full SHA only if the above methods fail\n\nThis makes cherry-pick commands more readable and user-friendly.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "d499fd6e12374193df2d769d12753bbd1ddd1493",
      "tree": "e8c2a8a134773164910b78b4606bd196c55d6d5f",
      "parents": [
        "dae19073cfdc420af8da311c4f3974ac6db77b46"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 01:31:29 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 19:06:19 2025 -0700"
      },
      "message": "Add permission callback to Bash tool to enforce title setting before git commits\n\n- Convert Bash tool from a plain variable to a struct with a permission callback function\n- Add a constructor for creating Bash tools with custom callback functions\n- Implement a permission check in agent.go that verifies a branch name has been set before allowing git commits\n- If no branch name is set and a git commit command is attempted, return an error instructing to use the title tool first\n- Maintain backward compatibility for tests with BashRun function\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "dae19073cfdc420af8da311c4f3974ac6db77b46",
      "tree": "d2744d5ff7a9477e34537d7be9b772a3d3de522b",
      "parents": [
        "a9b3822fd2cfdc035e7daa8b59496f9838a4b2c6"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 01:08:57 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 19:06:19 2025 -0700"
      },
      "message": "Add WillRunGitCommit function to bashkit\n\nThis function inspects a bash script to determine if it will run \u0027git commit\u0027 commands.\nThe implementation is similar to the existing Check function but is kept separate as requested.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "a9b3822fd2cfdc035e7daa8b59496f9838a4b2c6",
      "tree": "9fc7773eb4c012398133633e41e6f1551f621996",
      "parents": [
        "1ae976bde49d4f0dc48146c1e3d3f38201e1f830"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 18:05:06 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 18:05:06 2025 -0700"
      },
      "message": "Add branch_name parameter to title tool\n\nModified the title tool to accept a branch_name parameter, which allows specifying\na custom branch name slug instead of deriving it from the title. The branch name\nis still cleaned to ensure it\u0027s valid.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "1ae976bde49d4f0dc48146c1e3d3f38201e1f830",
      "tree": "9d6235d7b3a16df5b968c271ca318147ac293412",
      "parents": [
        "e2d24ab80f34e25f602b306ea8e8b765101d8585"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 00:06:43 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 17:59:55 2025 -0700"
      },
      "message": "loop: fiddle with titleToBranch\n\nAdd support for numbers.\nUse strings.Map.\n"
    },
    {
      "commit": "e2d24ab80f34e25f602b306ea8e8b765101d8585",
      "tree": "0ba0f2f3874069024baf1af857ec67d045ea813d",
      "parents": [
        "dbe02304e804066bb32fcf6f41690336a98e6531"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 00:01:41 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 17:41:18 2025 -0700"
      },
      "message": "dockerimg: add \u0027apk add grep\u0027\n\nClaude wants to use lots of grep features that the busybox version lacks.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "dbe02304e804066bb32fcf6f41690336a98e6531",
      "tree": "d27ed5e5b94b004167e202254b97f7d1806733bd",
      "parents": [
        "2b2090e7fa8fd53eda5dca132980c3e2fa4cb3b8"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 16:44:23 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 16:44:23 2025 -0700"
      },
      "message": "loop: extract system prompt into a separate file\n\nThis will make swapping it out easier, if/when desired.\n"
    },
    {
      "commit": "2b2090e7fa8fd53eda5dca132980c3e2fa4cb3b8",
      "tree": "269e400e420a30079bfbaa7dea562e4b6d80d9d7",
      "parents": [
        "c72fff52ad6c5436fa8469f049fa232f2f6be5ed"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 16:41:34 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 16:42:35 2025 -0700"
      },
      "message": "claudetool: add missing json schema field\n\nApparently this is required, and Anthropic happens to not care."
    },
    {
      "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": "7b6044969c696e1707a25c170eebd67fda919e34",
      "tree": "3c8d8672a42ca507fbe668f6735125644ff68bcd",
      "parents": [
        "dc507a303e2ffc2fb934d8717fef6b551193a416"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 11:45:59 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 11:51:09 2025 -0700"
      },
      "message": "bin/sk-ls.sh: Show currently running sketches in Docker and what they\u0027re up to\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": "1b47aa2aa46bf1aad16c79d36a9baf60fc69e905",
      "tree": "10cfc03414feef2c7adf723be101b136a7c387c5",
      "parents": [
        "2dc86b9bda41cf30926833b044d8669d92273b20"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon Apr 28 19:25:38 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 11:24:29 2025 -0700"
      },
      "message": "Add initial-commit CLI flag for specifying git reference\n\nThis adds a new -initial-commit flag to the sketch CLI which allows specifying\na different git reference besides HEAD as the starting point. The flag is\nincompatible with -unsafe mode and will show an error if both are used.\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": "50a1d62e0dc285c69b7c495e4a01a47fa3561692",
      "tree": "3a3e261735a063208430e457a0fbf93c1d30f58c",
      "parents": [
        "5fabc74b668752dc68e05a9a452cc15cf62077f7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 09:59:03 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 09:59:13 2025 -0700"
      },
      "message": "loop: don\u0027t panic when LLM API call fails\n\nAnd refactor a touch."
    },
    {
      "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": "d4b1cc76714b5e139e539259673afe7d74afa1cb",
      "tree": "69e30a90339000e8a42fba993acff1c58a7d2e98",
      "parents": [
        "15272c1ddf6eba4e8d9b2697a3e6af09752a6cf1"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 13:49:18 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 06:53:26 2025 -0700"
      },
      "message": "Sort git rev-list by time and limit results for related files\n\nSort the git rev-list by time (descending) and limit the result to max 100\ncommits in the related files calculation. This limits runtime and favors\nrecent commits, which are more likely to be relevant.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "15272c1ddf6eba4e8d9b2697a3e6af09752a6cf1",
      "tree": "c8022595159550121c43087cdfab1620d9ae6539",
      "parents": [
        "9c07e1d30f7f576bd7679a155873f6419743e6a6"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 28 19:36:15 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 28 19:36:15 2025 -0700"
      },
      "message": "claudetool: add two more \"related files\" todos"
    },
    {
      "commit": "9c07e1d30f7f576bd7679a155873f6419743e6a6",
      "tree": "e962e6cb86fdaca7fbb4359efd025b39a47de74e",
      "parents": [
        "ffecb1e9fbaca84d7f142aa294fa795c324587af"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 28 19:25:37 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 28 19:25:37 2025 -0700"
      },
      "message": "loop: prevent panic on double Agent.Init"
    },
    {
      "commit": "ffecb1e9fbaca84d7f142aa294fa795c324587af",
      "tree": "00bcb908d9a6b2d09b0ebf7bc3d1024f5cd9a16d",
      "parents": [
        "ffb58a30bd18ff8e21d228ac072dc636cb0510c8"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 28 18:59:14 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 28 16:15:34 2025 -0700"
      },
      "message": "claudetool: add \"related files\" detection to codereview tool\n\n"
    },
    {
      "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": "ea3fc200402ef92fb2d35c9b56ab77e77a983338",
      "tree": "c95a9faf8d5cebb0e22d96cef4f17aec02089145",
      "parents": [
        "015b882721adf65cad5a11838d1d72c98e99c6f6"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 12:53:37 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 12:54:22 2025 -0700"
      },
      "message": "dockerimg: fix vscode:// links\n\nThis adds an undocumented parameter that makes vsc open a new window\ninstead of replacing your current vsc window with the link.\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": "22bd8eb83b7c779d9d2396c75cc344124e150aee",
      "tree": "81fc507d28db05b011d463745e125e6126260fb0",
      "parents": [
        "0dcebe1bf2ec5d6f85aa71fb46367e2adf8f4947"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 10:36:37 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 28 10:36:37 2025 -0700"
      },
      "message": "sshserver: fix env for ssh pty sessions\n"
    },
    {
      "commit": "0dcebe1bf2ec5d6f85aa71fb46367e2adf8f4947",
      "tree": "03bb39dc484e95c56f9dd5b4a6c75aa295736cdd",
      "parents": [
        "fefde5770a9f6484e23c926b408f86ca8aa388ae"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon Apr 28 14:51:04 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon Apr 28 14:51:04 2025 +0100"
      },
      "message": "Add support for passing prompt without -one-shot\n\nAdded `-prompt` option\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": "1112949adc2bb120a001a925c0c4e9e18def0ee6",
      "tree": "591396d3d0932a475dc1db5d79b2b96b649daaba",
      "parents": [
        "5fdd024fa3d3df5fe5a2c216672d912b6aade60a"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 25 20:41:53 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 25 20:43:00 2025 -0700"
      },
      "message": "dockerimg: use a default image from a public registry\n\nIf the LLM chooses our default alpine Go image, we save some\nwork by instead starting from a sketch docker image pushed\nto ghcr.io.\n"
    },
    {
      "commit": "5fdd024fa3d3df5fe5a2c216672d912b6aade60a",
      "tree": "08e20aa0006bb422603693557cbfa7b2d92ae55a",
      "parents": [
        "b74c4f6e1c93afca3d37a6b68c717d41a51fa612"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 19:31:58 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 19:38:09 2025 -0700"
      },
      "message": "Sketch \"inception\" support.\n\nI wanted to tell Sketch-in-container to run\n\n\tgo run ./cmd/sketch -unsafe -skaband-addr\u003d -one-shot \u0027what is todays date\u0027\"\n\nand have it work. And now it does.\n\nThe underlying complexity is whether \"inDocker\" is enough to know\n\"isInsideSketch\", so I separated that as far as necessary. The skaband\nstuff is still complicated.\n\nIt might be preferable to use env variables for all outside-\u003einside\ncommunication rather than use flags sometimes and variables sometimes\n(like, for keys), but here we are.\n"
    },
    {
      "commit": "b74c4f6e1c93afca3d37a6b68c717d41a51fa612",
      "tree": "8e5c31de6634a56bec23e026d8fd8515d92eb173",
      "parents": [
        "833a0f83af52be33eed3baf0f67ffa3ddab55cb4"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 19:18:49 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 19:38:09 2025 -0700"
      },
      "message": "make -one-shot command line work with both -unsafe and regular\n\nThe \"-one\" option had atrophied in a variety of ways, against both\nunsafe and dockerized environments. I resurrected it, and simplified\nthe flag handling slightly by using just one flag.\n"
    },
    {
      "commit": "833a0f83af52be33eed3baf0f67ffa3ddab55cb4",
      "tree": "0f1c78df648d499ed6ac3e975276ecc977ab4e70",
      "parents": [
        "0cbd976940708c94eb8b644b14bfda3f19087997"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Apr 24 18:39:36 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 19:31:00 2025 -0700"
      },
      "message": "claudetool: improve codereview\n\nDo a bunch of un-vibecoding and bug fixing.\nUnfortunately, lots left.\nGet rid of vet; gopls check covers it.\n\nAdd testing infrastructure and a bunch of fixtures.\n"
    },
    {
      "commit": "0cbd976940708c94eb8b644b14bfda3f19087997",
      "tree": "c52d063201ece6aa1b9691e2dac5a5d31ceab1a3",
      "parents": [
        "33f717263a1b7172ed8e0182481adb1b1ededb7a"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 25 16:30:20 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 25 16:30:20 2025 -0700"
      },
      "message": "rename a file that was driving me crazy\n"
    },
    {
      "commit": "33f717263a1b7172ed8e0182481adb1b1ededb7a",
      "tree": "6c3e212689dc203318fff3d4be6e6a5eb750f226",
      "parents": [
        "2cba69514b40c49a7a71102962b917c8a9eb4194"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Apr 25 23:23:22 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Apr 25 23:23:22 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "2cba69514b40c49a7a71102962b917c8a9eb4194",
      "tree": "b623b2f6dca84a875a40758361617111b724edda",
      "parents": [
        "6f2bf8aa1d1105d292b8fb7961fc30b41d15cc79"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 25 20:32:10 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 25 16:19:49 2025 -0700"
      },
      "message": "Add unit tests for dockerimg/sshtheater.go with refactoring for testability\n\nRefactored the code to use dependency injection to make it more testable, including:\n- Created FileSystem and KeyGenerator interfaces\n- Added RealFileSystem and RealKeyGenerator implementations\n- Refactored SSHTheater to use these interfaces\n- Added comprehensive unit tests for all functionality\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "6f2bf8aa1d1105d292b8fb7961fc30b41d15cc79",
      "tree": "87b89de8e93958c878f92bafeb32e67d0f407134",
      "parents": [
        "5c70bfe5601e9919e598025ac56984e1b2e21040"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 15:29:46 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 15:32:56 2025 -0700"
      },
      "message": "sketch: fix double space in SSH warning\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": "eda2a8ca73891aa55831391cea6cc8c6d2a79d67",
      "tree": "4d64d78eacc2ef0193910bd7da41f67ac5da90d1",
      "parents": [
        "5b8ab1f1a7bcdd4d1a44e654d2a50074a64bc443"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 21:24:11 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 14:27:06 2025 -0700"
      },
      "message": "Simplify and fix GitHub workflow push to main\n\nInstead of fetching and checking out the formatted commit before pushing,\ndirectly push the formatted commit SHA to main. This simplifies the workflow\nand is more reliable.\n\nAdd missing outputs section to workflow_call definition in formatting.yml\nto properly expose the commit SHA to the calling workflow.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\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": "c3391a932e724dc6f6898c8e1b51002d104822e1",
      "tree": "d325f2df9d7a4d8ea8ddca9a47df9e362222ac8e",
      "parents": [
        "a0801ad5dbd2a0e4d4983447b62f72444e829927"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 21:03:33 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 14:10:35 2025 -0700"
      },
      "message": "Fix autoformatting push to main in GitHub workflow\n\nThe push-to-main job was not correctly fetching the latest commit\n(with formatting fixes) from the queue-main branch before pushing to main.\nThis ensures the latest changes are used.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "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": "df2d3dccd3f2f97fd4b8ab3bd153fbef15becea0",
      "tree": "fd3749e53b40131d8b9e6da9045c59fbcbc31ef2",
      "parents": [
        "6e42f32893e061a36f67aa0abbb8c62b402262c2"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 12:31:35 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:23:52 2025 -0700"
      },
      "message": "dockerimg: add extra space for terminals that render emojis wide"
    },
    {
      "commit": "6e42f32893e061a36f67aa0abbb8c62b402262c2",
      "tree": "1a23bff4eeb700f9a1fd2152b300fedfe4d4f9ff",
      "parents": [
        "15a4db76df2c71b8398702727e9892e51dc18478"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:18:36 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:23:52 2025 -0700"
      },
      "message": ".github/workflows: let prettier format yml files\n\nI don\u0027t care. But now when I hit save it won\u0027t change any more.\n"
    },
    {
      "commit": "15a4db76df2c71b8398702727e9892e51dc18478",
      "tree": "953a02dcf9cc8c4faabba73b09937355060ef02d",
      "parents": [
        "ae77226709546105985bc38c06382dceabae50ff"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:18:06 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:23:52 2025 -0700"
      },
      "message": ".github/workflows: improve autoformatter commit message"
    },
    {
      "commit": "ae77226709546105985bc38c06382dceabae50ff",
      "tree": "e3b691c973341c5e62aefd1ba72ecbf00da31900",
      "parents": [
        "4de8a91553cccc6f7e48419de75acfddafdb549b"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 20:02:22 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:13:27 2025 -0700"
      },
      "message": "Try again to fix GitHub Actions permission issues\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": "ddc81426ded54ef97b7650f5f9d1ef9c94b80fd3",
      "tree": "cfd82b5dad08203a8f756350cbfed80a09031edc",
      "parents": [
        "e7c9a4429c54a6d6431f825ee81858785e0c5d8e"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 19:47:05 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 12:52:46 2025 -0700"
      },
      "message": "Fix GitHub Actions permissions for pushing to main\n\nUse explicit GitHub token for authentication when pushing to main branch in the\nqueue-main workflow to resolve the 403 permission denied error.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "e7c9a4429c54a6d6431f825ee81858785e0c5d8e",
      "tree": "b079963b79cf945955be40a033f52e49c2f7efa4",
      "parents": [
        "46fff9766f75fed8e9956dd126c9d0585057ed37"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri Apr 25 20:02:22 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri Apr 25 20:32:28 2025 +0100"
      },
      "message": "webui: Add test for sketch-app-shell component\n\nCreated a basic test for the top-level Sketch App Shell component with API mocking. Reorganized mock data to be shared between tests and demo.\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "46fff9766f75fed8e9956dd126c9d0585057ed37",
      "tree": "8ebe8ba917454f42e83c2ff58bf06b81d0cb1479",
      "parents": [
        "bd6c1680c6361ee9ed1735ed56edb0bb2b0c56ec"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri Apr 25 14:57:44 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri Apr 25 20:32:28 2025 +0100"
      },
      "message": "webui: More minor css tweaks\n"
    },
    {
      "commit": "bd6c1680c6361ee9ed1735ed56edb0bb2b0c56ec",
      "tree": "738d834bcf4b9ef1f538a15c600ac7e47bc8076b",
      "parents": [
        "8b00db1c6b7ee7930c005efa547775ad3709f37a"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 12:04:07 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 12:04:07 2025 -0700"
      },
      "message": "autofix formatting during queue-main pushes\n\n"
    },
    {
      "commit": "8b00db1c6b7ee7930c005efa547775ad3709f37a",
      "tree": "ee34fd0b0c6b123bc09dc80fb78aa79831d5853d",
      "parents": [
        "9b999b08b8af6a69e24d910a3f3da542b4104c26"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 18:41:38 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 11:44:05 2025 -0700"
      },
      "message": "Add run-formatters.sh script and update GitHub workflow\n\nThis commit adds a new bin/run-formatters.sh script that can both check and fix code formatting.\nThe script handles Go code formatting with gofumpt and webui formatting with Prettier.\nThe GitHub workflow has been updated to use this script in check mode.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "9b999b08b8af6a69e24d910a3f3da542b4104c26",
      "tree": "1cd853a40a95c47c9e9b028b9125015ba41cb051",
      "parents": [
        "176a5105d3f5e515ea782b054f1ab853a8afc399"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 16:31:50 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 11:43:58 2025 -0700"
      },
      "message": "Update window title to show \u0027sk: \u003ctitle\u003e\u0027 and add disconnection indicator\n\nThe window title now displays \u0027sk: \u003ctitle\u003e\u0027 to make it easier to identify\nwhich tab is which when multiple sketch tabs are open. Additionally, a red\ncircle indicator (🔴) is added to the title when the connection to the server\nis lost.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "176a5105d3f5e515ea782b054f1ab853a8afc399",
      "tree": "591e6bd3eebe72b4706a86977ff29c23dcdd72de",
      "parents": [
        "6bc2eb24313de1455fc5b6c2ea231b86fb5d1329"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Thu Apr 24 20:32:37 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 11:43:58 2025 -0700"
      },
      "message": "Add force-rebuild flag to allow user to rebuild docker container explicitly.\n"
    },
    {
      "commit": "6bc2eb24313de1455fc5b6c2ea231b86fb5d1329",
      "tree": "7e5f39a498f266be72af9b17bff6014b066b4ba7",
      "parents": [
        "35889970de8690e8e38ea14503dd1a11db751498"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 03:14:07 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 11:43:58 2025 -0700"
      },
      "message": "Fix: Prevent diff2html anchor links from resetting view\n\nWhen clicking anchor links in the diff view, the page was resetting to conversation view.\nAdded event handling to intercept clicks on these links to prevent default browser behavior\nand instead perform smooth scrolling to the target element without changing the URL.\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "35889970de8690e8e38ea14503dd1a11db751498",
      "tree": "575df0d71e7fc89e7a6f2f5f68fdf80efc10ce5c",
      "parents": [
        "f5e28f67b3f569c73b1b020b5783872371bd0c3c"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Apr 24 20:48:16 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 11:40:27 2025 -0700"
      },
      "message": "all: only display total input tokens\n\nKnowing the cache reads and writes was mildly interesting for us,\nbut it is inside baseball, and our calculations ended up being a little wrong.\nStreamline the UI and make the math right.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "f5e28f67b3f569c73b1b020b5783872371bd0c3c",
      "tree": "174b42b12dadc6bbd96257aa0f7cdde722d09609",
      "parents": [
        "faa39bec76f463c0e2c9b06f567a596d47af0d50"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 25 10:48:00 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 25 10:48:00 2025 -0700"
      },
      "message": "sshtheater: check for Include line in ~/.ssh/config\n"
    },
    {
      "commit": "faa39bec76f463c0e2c9b06f567a596d47af0d50",
      "tree": "cd05540a4622b7277a79c05c9f7ce58c9b4dcbd4",
      "parents": [
        "01ed5bee0c121852d0e2ab3836a08acab68397e4"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 25 08:06:38 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 25 08:06:57 2025 -0700"
      },
      "message": "cmd/sketch: only show structured logs printf if --unsafe\n\nThe inner sketch binary running in docker runs with --unsafe.\n"
    },
    {
      "commit": "01ed5bee0c121852d0e2ab3836a08acab68397e4",
      "tree": "e2b473d510d146f9474b2eedb5526b8a4eead1f2",
      "parents": [
        "7d5a6301a256823ab4b26a68dbd166f0d0737409"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Apr 24 22:46:53 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Apr 24 22:46:53 2025 -0700"
      },
      "message": "sshserver: enable ssh port forwarding\n"
    },
    {
      "commit": "7d5a6301a256823ab4b26a68dbd166f0d0737409",
      "tree": "99abfc40814eb152f9e3442d7f75ef8a5e306002",
      "parents": [
        "4854c6535a320f6fbfe8baee02af509367e4236c"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Apr 24 21:27:51 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Apr 24 21:29:46 2025 -0700"
      },
      "message": "SSHTheater: fix known_hosts update issue\n"
    },
    {
      "commit": "4854c6535a320f6fbfe8baee02af509367e4236c",
      "tree": "6ef13e82fb6597c443b31c350af8e390a8d0062f",
      "parents": [
        "53786efbbbb2fbc3edb91ba639894e713b293140"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Apr 24 18:37:02 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Apr 24 20:49:55 2025 -0700"
      },
      "message": "dockerimg: +SSHTheater, auto-configures local ssh\n\n- removes the old cli flags for pointing sketch at existing ssh key files\n- generates key pairs for both the container ssh server and the user if\n  these don\u0027t already exist in ~/.sketch/\n- automatically edits ~/.sketch/known_hosts and ~/.sketch/ssh_config to\n  add entries when you start a sketch container and remove them when you\u0027re\n  done\n- does not make any edits to default ~/.ssh/config files, so you\u0027ll have\n  to manually add line to you default ssh config file like:\n  `Include HOME_DIR/.sketch/ssh_config`\n  in order to have your ssh tools pick up what sketch is putting down.\n"
    },
    {
      "commit": "53786efbbbb2fbc3edb91ba639894e713b293140",
      "tree": "1442ed25c365a61cd35f9c2a0052cebb6fa66083",
      "parents": [
        "f91095a6a873a4d2faa91d075e93abd4761bc7b5"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 24 12:52:51 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 24 12:52:55 2025 -0700"
      },
      "message": "dockerimg: use emoji in container debug info\n\nThis should potentially be removed (or moved to --verbose) but I am\nstill using it semi-reguarly during debugging.\nShould probably be removed in a few weeks by default.\n"
    },
    {
      "commit": "f91095a6a873a4d2faa91d075e93abd4761bc7b5",
      "tree": "6e07670daa2cfcca51d5b896efdeb9e30db37709",
      "parents": [
        "b1fe3c8513684281fbb9d5af56319524cf5b6caa"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 24 12:49:27 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 24 12:49:28 2025 -0700"
      },
      "message": "termui: remove Initial Commit startup message\n\nI cannot think of a good use for this.\nIt is not particularly informative, because it is hard to\ninterpret a commit sha. And less is more.\n"
    },
    {
      "commit": "b1fe3c8513684281fbb9d5af56319524cf5b6caa",
      "tree": "9e721bdb2e25ab3947b50e4466129808c5f4cbf4",
      "parents": [
        "094e4d291369d5a04375e1fd9c95f17a236532a0"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 24 11:38:46 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 24 11:38:46 2025 -0700"
      },
      "message": "readme.md: remove pending invite step\n"
    },
    {
      "commit": "094e4d291369d5a04375e1fd9c95f17a236532a0",
      "tree": "f9321e4ecaf73a0d764225012847f8ef6916fd9f",
      "parents": [
        "1d06132f5a79950ab8a64eb72219363fb63ca92f"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 24 11:35:14 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 24 11:35:17 2025 -0700"
      },
      "message": "cmd/sketch, dockerimg: remove unhelpful initial debug messages\n"
    },
    {
      "commit": "1d06132f5a79950ab8a64eb72219363fb63ca92f",
      "tree": "46ed36f431ee3aef7caacbae7b1ebe7560d3f544",
      "parents": [
        "6a50b1811c7fbf8be7e5ad4cc77a576e2d612a66"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Apr 24 09:52:56 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Apr 24 11:11:44 2025 -0700"
      },
      "message": "sshserver: add direct-tcpip channel, allow non-pty\n\nThis change enables VS Code to connect to local sketch containers\nover SSH.\n\nThe VSC docs describe how to use this feature:\nhttps://code.visualstudio.com/docs/remote/ssh\n"
    },
    {
      "commit": "6a50b1811c7fbf8be7e5ad4cc77a576e2d612a66",
      "tree": "e7665da7411934d25ffd512c37b41a3921f63ad6",
      "parents": [
        "e923bb38613f15e458eb1c696e15057bbaa46a59"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Apr 24 11:07:41 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Apr 24 11:08:10 2025 -0700"
      },
      "message": "ant: fix subconvo url\n\nnot sure how/when this regressed...\n"
    }
  ],
  "next": "e923bb38613f15e458eb1c696e15057bbaa46a59"
}
