)]}'
{
  "log": [
    {
      "commit": "5681b7c857682006489780fca02384e1db26ceab",
      "tree": "63d70c33be17d0eea5efd78fa5012e5985090dd0",
      "parents": [
        "08b073b79f4372e2f61c03ba17e5d86a5cf7a769"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jul 18 10:42:47 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jul 18 10:43:17 2025 -0700"
      },
      "message": "Fix terminal CSS.\n"
    },
    {
      "commit": "93b53d8e55e1b0c5c85d387ab46a6ee3f96a8e8c",
      "tree": "a5a38ef8d33dcbd38efd39c527354e676be7edd3",
      "parents": [
        "9d9c812b496268f033d48df5e8f91c421730a2e2"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Jul 18 00:11:07 2025 +0000"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Jul 18 13:50:16 2025 +1000"
      },
      "message": "skaband: fix terminal under /newsessions\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sf39677ac8518e6dfk\n"
    },
    {
      "commit": "32969cde983b415a2ef95ccf8a8f798acfa70870",
      "tree": "9ac42989bb2defa11f4fc639be64b78bc4af6b83",
      "parents": [
        "4844be2a83915a9041c1c3c2a8882cee8c5f2be4"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu Jul 03 03:25:25 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu Jul 03 03:25:25 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "4844be2a83915a9041c1c3c2a8882cee8c5f2be4",
      "tree": "3cee7b1035b037f34140856ec69346764b2f3968",
      "parents": [
        "882b1d12f097997164523af4947954781ccfce09"
      ],
      "author": {
        "name": "banksean",
        "email": "banksean@gmail.com",
        "time": "Thu Jul 03 00:32:55 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Jul 02 20:23:28 2025 -0700"
      },
      "message": "webui: convert sketch-terminal to SketchTailwindElement inheritance\n\nConvert sketch-terminal component from LitElement to SketchTailwindElement inheritance\nto disable shadow DOM and enable consistent Tailwind utility class usage across the\nwebui component library.\n\nInheritance Change:\n- Replace LitElement with SketchTailwindElement as base class\n- Remove CSS-in-JS static styles in favor of Tailwind utility classes\n- Switch from shadow DOM to light DOM rendering for better Tailwind integration\n\nCSS to Tailwind Conversion:\n- Terminal view container: w-full bg-gray-100 rounded-lg overflow-hidden mb-5 shadow-md p-4\n- Terminal container: w-full h-full overflow-hidden\n- Maintain 70vh height using inline style for specific viewport requirement\n- Remove static CSS definitions while preserving visual appearance\n\nDOM Query Updates:\n- Change renderRoot.querySelector to this.querySelector for light DOM compatibility\n- Update CSS loading from shadow DOM injection to global document head injection\n- Rename loadXtermlCSS to loadXtermCSS for consistency\n\nTechnical Implementation:\n- Preserve all terminal functionality: xterm.js integration, SSE connections, resize handling\n- Maintain event listeners for view mode changes and window resize events\n- Keep terminal input queue processing and WebSocket communication intact\n- Update xterm CSS loading to work with light DOM architecture\n\nThe conversion enables the terminal component to benefit from global Tailwind\nstyles while maintaining all existing terminal emulation functionality and\nserver communication features.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s853becde7eccb88ck\n"
    },
    {
      "commit": "26bc659f8f7e8864a6fb0a71dcbee7d3742d3763",
      "tree": "5429b19391d26f2cf8a82253237a52d2d33543e6",
      "parents": [
        "a14b0183208df257a43748b51666043db7e62138"
      ],
      "author": {
        "name": "philip.zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Jun 30 20:15:30 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue Jul 01 03:20:42 2025 +0000"
      },
      "message": "webui: add ESLint and eslint-typescript\n\nI\u0027ve historically found this stuff worthwhile, so let\u0027s swallow the pill.\n\nFortunately, sketch was happy to oblige.\n\n- Install ESLint, @eslint/js, and typescript-eslint packages\n- Configure eslint.config.mjs with recommended TypeScript ESLint rules\n- Add browser globals support for DOM and web APIs\n- Integrate ESLint into npm test workflow via package.json scripts\n- Update Makefile to run lint checks as part of test suite\n- Fix 249+ linting issues including:\n  * Remove unused imports and variables (with _ prefix convention)\n  * Fix case declaration issues with eslint-disable blocks\n  * Remove unnecessary escape characters\n  * Address prefer-const violations\n  * Handle unused function parameters appropriately\n- Configure ignore patterns to exclude dist/ and node_modules/\n- Set rules to allow explicit \u0027any\u0027 types temporarily\n- Convert warnings for ts-ignore, async promise executors, and unsafe optional chaining\n\nResults:\n- ESLint now runs successfully with 0 errors and only 6 warnings\n- TypeScript compilation continues to work correctly\n- Linting integrated into test workflow for continuous quality enforcement\n- Codebase follows consistent ESLint TypeScript recommended practices\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sd7b538be0a28d294k\n"
    },
    {
      "commit": "00bcaef0355aaff1daea17ac0631fd17cabb0235",
      "tree": "7b1c05bafa95d90c682af161579c93012ef22a16",
      "parents": [
        "c7cdd77f99dece73f223597263f8495c15d7f35f"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 30 04:21:15 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri May 30 05:13:07 2025 +0000"
      },
      "message": "webui: remove unused diff2html-based diff view\n\nRemove the old diff view implementation that used diff2html library\nin favor of the Monaco-based diff2 view. This cleanup removes:\n\n- sketch-diff-view.ts component that used diff2html library\n- diff2html static CSS files (diff2html.min.css, diff2.css)\n- diff2html npm package dependency from package.json\n- Old diff view mode references throughout the codebase\n- Demo files for the old diff view component\n\nChanges include:\n\n1. Removed Files:\n   - webui/src/web-components/sketch-diff-view.ts\n   - webui/src/diff2html.min.css\n   - webui/src/diff2.css\n   - webui/src/web-components/demo/sketch-diff-view.demo.html\n\n2. Updated Components:\n   - sketch-app-shell.ts: Remove old diff view import, ViewMode type,\n     CSS selectors, and view switching logic\n   - sketch-view-mode-select.ts: Update type definitions to remove \u0027diff\u0027 mode\n   - sketch-terminal.ts: Fix view mode type and correct CSS loading comments\n\n3. Package Management:\n   - Removed diff2html 3.4.51 dependency from package.json\n   - Updated package-lock.json to reflect removed dependency\n\n4. Demo Cleanup:\n   - Removed reference to old diff view demo from index.html\n   - Updated timeline demo to remove diff2html from dependencies list\n\nThe Monaco-based diff2 view (sketch-diff2-view.ts) remains fully\nfunctional and is now the only diff view implementation. All file\npicker, range picker, and empty view components continue to work\nwith the new diff view.\n\nTesting confirms the diff functionality works correctly after cleanup.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s22dd1dc722d02125k\n"
    },
    {
      "commit": "37aaf08095add87b345bfc87d4aae4d2e95ed0fd",
      "tree": "b831c2e6f1701b0df480a88c6bf9d7bc633c8362",
      "parents": [
        "e01ea0e6d41c8235261d09d2847489ff298d1ed9"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 06 03:15:55 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 06 03:28:19 2025 +0000"
      },
      "message": "Fix terminal not loading when first tabbed to.\n\nThe terminal for some reason, at least in Safari, thought it was\nreally small, so it would be hard to use until you resized your window.\nI got Claude, below, to make it lazily init when you tab to the\nterminal view, which is better anyway.\n\nImplement lazy initialization for sketch-terminal component\n\nInstead of initializing the terminal when the component is created (which causes sizing issues when the terminal isn\u0027t visible), this change defers initialization until the terminal tab is actually activated.\n\nThis solves the problem where the terminal was initialized with strange dimensions because:\n1. The terminal is now only initialized when its tab is visible\n2. We use a flag to track initialization state\n3. The resize handler only runs for initialized terminals\n\nThis approach is more efficient and avoids unnecessary initialization when the terminal isn\u0027t being used.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "2032b1c1971ceb85ca14b20273a3783729fba3e3",
      "tree": "0486e9222643ffcbbd34286148f4a7913a169668",
      "parents": [
        "4f50a68ac73677c0022b2b3da8b4667cee01c11b"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:40:42 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:40:42 2025 -0700"
      },
      "message": "Move webui from /loop/webui to /webui\n\nThanks, perl (and git mv):\n\n\tperl -pi -e s,loop/webui,webui,g $(git grep -l loop/webui)\n"
    },
    {
      "commit": "72682df0c3aa2e2b8917d0f66bdf8988dfbcb59f",
      "tree": "b5c213237eced535db85dc8906fa42127bd525f0",
      "parents": [
        "4de80d219b96677b9e43e50293ec55bdf273f36d"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 13:09:46 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 13:09:46 2025 -0700"
      },
      "message": "Prettier.\n"
    },
    {
      "commit": "000c1f73c9cff59722a54ef9ee85ac32ec61ef3d",
      "tree": "f0122950864ff308894f59e920824b9df5f337f2",
      "parents": [
        "a0f68fac3049907e83b0b97198a6b8115e5dea8c"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Tue Apr 22 11:57:37 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Tue Apr 22 11:58:31 2025 -0700"
      },
      "message": "sketch: fix utf8 issues in terminal\n\nThere\u0027s some fun between the OS being UTF8 and JS strings\nbeing UTF16. Using uint8arrays seems to help.\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": "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": "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": "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"
    }
  ]
}
