)]}'
{
  "log": [
    {
      "commit": "64f60461b00c474b0b4747a06177d5c7a357bba9",
      "tree": "cfeceff998a165af451099c0ec23b5d2b0fd42f2",
      "parents": [
        "db8caa0eb8576b8c0d65cc0b7b6aa4e241a7cdb1"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon Jun 16 13:57:10 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Mon Jun 16 20:58:24 2025 +0000"
      },
      "message": "loop: add diff stats from sketch-base to HEAD in /state endpoint\n\nAdd lines added/removed statistics computed from sketch-base to current HEAD,\ndisplayed in webui Diff mode button for quick change overview.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s3f10ecf39df6b581k\n"
    },
    {
      "commit": "c7c2cc1e9d2a90515e071527241e0ce680fe0738",
      "tree": "df1b7548a47fa1e4f219bcd8a27e5fadaa0acc3c",
      "parents": [
        "83c5be6f73607c6add6d5c389f7894e1d7b5e06a"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Jun 13 03:21:18 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Jun 13 03:48:18 2025 +0000"
      },
      "message": "webui: fix repository name parsing for names containing dots\n\nFix GitHub repository URL parsing in sketch-container-status component to\nproperly handle repository names containing dots, resolving broken GitHub\nlinks in the ongoing session log banner.\n\nProblem Analysis:\nThe formatGitHubRepo function used regex patterns with [^/\\s.]+ character\nclasses that excluded dots from repository names. This caused repository names\nlike \u0027boldsoftware/sketch.git\u0027 to be truncated to \u0027boldsoftware/sketch\u0027 when\nparsed, breaking GitHub links and repository display in the session banner.\n\nThe issue occurred in three regex patterns for different GitHub URL formats:\n- HTTPS URLs: /https:\\/\\/github\\.com\\/([^/]+)\\/([^/\\s.]+)(?:\\.git)?/\n- SSH URLs: /git@github\\.com:([^/]+)\\/([^/\\s.]+)(?:\\.git)?/\n- Git protocol: /git:\\/\\/github\\.com\\/([^/]+)\\/([^/\\s.]+)(?:\\.git)?/\n\nThe [^/\\s.]+ pattern specifically excluded dots (.) from matching, which was\nproblematic for legitimate repository names containing dots.\n\nImplementation Changes:\n\n1. Regex Pattern Updates:\n   - Changed [^/\\s.]+ to [^/\\s]+? in all three URL patterns\n   - Removed dot exclusion while maintaining whitespace and slash exclusion\n   - Added non-greedy quantifier (?) to prevent over-matching\n   - Added end-of-string anchor ($) for precise matching\n\n2. Updated patterns:\n   - HTTPS: /https:\\/\\/github\\.com\\/([^/]+)\\/([^/\\s]+?)(?:\\.git)?$/\n   - SSH: /git@github\\.com:([^/]+)\\/([^/\\s]+?)(?:\\.git)?$/\n   - Git: /git:\\/\\/github\\.com\\/([^/]+)\\/([^/\\s]+?)(?:\\.git)?$/\n\nTechnical Details:\n- Non-greedy matching (+?) ensures proper handling of .git suffix\n- End anchors ($) prevent partial matches and improve precision\n- Dots now allowed in repository names while preserving .git detection\n- Existing functionality preserved for repositories without dots\n\nTesting:\nVerified fix with comprehensive test cases:\n- git@github.com:boldsoftware/sketch.git → boldsoftware/sketch ✓\n- https://github.com/user/repo.with.dots.git → user/repo.with.dots ✓\n- git@github.com:org/project.name.git → org/project.name ✓\n- https://github.com/test/normal-repo → test/normal-repo ✓\n\nBenefits:\n- GitHub links now work correctly for repositories with dots in names\n- Session banner displays proper repository information\n- Maintains backward compatibility with existing repository names\n- Improves user experience for repository navigation\n\nThis fix resolves the specific issue where repository names containing dots\nwould have their GitHub links truncated, breaking navigation to the actual\nrepository on GitHub.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sda0a251af3d756b6k\n\nwebui: improve GitHub repo parsing tests\n\nReplace internal method testing with component behavior testing for better\nintegration coverage and maintainability.\n\n- Test actual GitHub link rendering in DOM instead of calling private methods\n- Add separate test cases for repository names with dots\n- Verify href attributes, text content, and title attributes are correct\n- Cover both general dot-containing names and the specific boldsoftware/sketch case\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s216977b6be91a2bak\n"
    },
    {
      "commit": "6d3de48ec0ec2fb8f194a11f1711b7128b7d1699",
      "tree": "14325a290001d13a482c116c83ee0b87aa7e36c5",
      "parents": [
        "a1762b94e6ddf5db0a0f6b7a5104fa236855320b"
      ],
      "author": {
        "name": "philip.zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Tue Jun 10 19:38:14 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Jun 10 19:40:16 2025 -0700"
      },
      "message": "feat: add -link-to-github flag with Octocat icon for GitHub branch linking\n\nAdd internal flag to enable GitHub branch linking in both termui and webui\ninterfaces, displaying clickable Octocat icons next to copy icons for pushed\nbranches when working with GitHub repositories.\n\nProblem Analysis:\nWhen sketch pushes branches to GitHub repositories, users had no direct way to\nnavigate from the sketch interface to view those branches on GitHub. Branch\nnames were displayed as plain text in both terminal and web interfaces,\nrequiring users to manually construct GitHub URLs or switch to external tools\nto view their pushed changes on the GitHub platform.\n\nThis created friction in the workflow, especially for teams collaborating on\nGitHub where quick access to branch views, pull request creation, and code\nreview processes are essential parts of the development workflow.\n\nImplementation Changes:\n\n1. Command Line Flag Infrastructure:\n   - Added linkToGitHub bool field to CLIFlags struct\n   - Configured -link-to-github as internal flag with false default\n   - Integrated flag passing through ContainerConfig and AgentConfig chains\n   - Added flag to dockerimg launch command arguments for container mode\n\n2. Agent Interface Enhancement:\n   - Added LinkToGitHub() method to CodingAgent interface\n   - Implemented method in Agent struct returning config.LinkToGitHub\n   - Extended State struct with link_to_github JSON field (with omitempty)\n   - Updated getState() function to include agent\u0027s GitHub linking preference\n   - Updated mockAgent in tests to support new LinkToGitHub() method\n\n3. Terminal UI GitHub Integration:\n   - Added isGitHubRepo() method with regex pattern matching for GitHub URLs\n   - Implemented getGitHubBranchURL() for constructing GitHub branch links\n   - Enhanced commit message display to show GitHub URLs when flag enabled\n   - Updated exit summary to include GitHub links for single and multiple branches\n   - Added regex import for GitHub URL pattern validation\n\n4. Web UI TypeScript Integration:\n   - Added link_to_github field to State interface in types.ts\n   - Enhanced formatGitHubRepo() method to return owner/repo extraction\n   - Implemented getGitHubBranchLink() helper in container status component\n   - Created parallel helper methods in timeline message component\n\n5. Container Status Component Updates:\n   - Added commit-info-container with flexbox layout for proper alignment\n   - Implemented layout: Branch Text → Copy Icon → Octocat Icon\n   - Added 16px clipboard copy icon with opacity states (70% default, 100% on hover)\n   - Integrated 16px Octocat SVG icon as clickable GitHub link\n   - Maintained existing copyCommitInfo click functionality for branch text\n\n6. Timeline Message Component Enhancement:\n   - Added commit-branch-container for consistent layout structure\n   - Implemented same layout pattern: Branch Text → Copy Icon → Octocat Icon\n   - Added 14px clipboard and Octocat icons matching timeline scale\n   - Enhanced CSS with hover states and proper alignment\n   - Preserved existing copyToClipboard functionality for branch text clicks\n\n7. Data Flow Integration:\n   - Updated sketch-timeline component to pass state to message components\n   - Modified sketch-app-shell to provide containerState to timeline\n   - Ensured proper state propagation through component hierarchy\n   - Maintained backward compatibility with existing state management\n\nTechnical Details:\n- GitHub URL detection supports HTTPS, SSH, and git protocol formats\n- Regex patterns: ^https://github\\.com/, ^git@github\\.com:, ^git://github\\.com/\n- Link format: https://github.com/{owner}/{repo}/tree/{branch-name}\n- Internal flag prevents exposure in user-visible help documentation\n- SVG Octocat uses official GitHub icon design with 16-point grid\n- Copy icons use standard clipboard SVG with overlapping rectangles design\n- Event propagation properly stopped to prevent interference with copy actions\n- Conditional rendering ensures icons only appear when GitHub links available\n- Flexbox layout ensures proper alignment across different screen sizes\n- CSS transitions provide smooth hover state animations\n\nBenefits:\n- Direct navigation from sketch UI to GitHub branch views\n- Seamless integration with GitHub-based development workflows\n- Enhanced productivity for teams using GitHub collaboration features\n- Clear functional separation: text copy vs external GitHub link\n- Familiar clipboard icon reinforces copy functionality\n- Improved visual hierarchy guides user interaction patterns\n- Maintains existing copy-to-clipboard functionality as fallback\n- Zero impact on non-GitHub repositories or when flag disabled\n- Consistent experience across terminal and web interfaces\n- Enhanced accessibility with distinct click targets and hover states\n\nTesting:\n- Verified flag parsing and configuration propagation through all layers\n- Confirmed GitHub URL detection works with various GitHub URL formats\n- Tested conditional rendering in both web UI components\n- Validated CSS styling and hover effects for GitHub branch links\n- Ensured backward compatibility with non-GitHub repositories\n- Verified TypeScript compilation with new template structures\n- Confirmed proper icon positioning and spacing in test layouts\n- Validated hover states and opacity transitions function correctly\n- All Go tests and TypeScript compilation successful\n\nThis enhancement bridges the gap between sketch\u0027s development environment and\nGitHub\u0027s collaboration platform, enabling more efficient workflows for teams\nusing GitHub repositories while preserving full functionality for other Git\nhosting solutions. The visual design provides intuitive flow from local\noperations (copy) to external actions (GitHub), creating a more organized\nand user-friendly interface for branch management workflows.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s1c083b45b5401c2bk\n"
    },
    {
      "commit": "3d040bd66f81a9211e616ef755b261323d4fea95",
      "tree": "7c5cc14efb4e335586292b0e4225549d4a3a3438",
      "parents": [
        "19969a9af6da4b5b5e25d02aa635dabad196e464"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Jun 06 02:35:19 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Jun 06 02:35:19 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "19969a9af6da4b5b5e25d02aa635dabad196e464",
      "tree": "d4701576dce7bdffd962b1d11cd3e6b37d4be443",
      "parents": [
        "44f847a93e7e0953abd42880f5e87c8b3e213134"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 14:34:02 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 19:30:39 2025 -0700"
      },
      "message": "all: s/title/slug/, adjust branch handling\n\nThere are two intertwined changes here.\n\nFirst, replace title with slug, and precommit with commit-message-style.\n\nThe slug makes enough of a title, and it provides a single human-readable\nidentifier we can use everywhere.\n\nSecond, construct the branch name on the fly instead of storing it,\nout of slug, branch prefix, and retryNumber.\nThis removes some duplicated data, and makes the retry loop\neasier to follow and reason about."
    },
    {
      "commit": "44f847a93e7e0953abd42880f5e87c8b3e213134",
      "tree": "477e9410248ed5983742660e4637ba5016bd9589",
      "parents": [
        "0337623c8e014f4446cfb72ffc271b20cedb80fe"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 14:33:50 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 19:30:39 2025 -0700"
      },
      "message": "webui: move cost display to popup info panel and hide when zero\n\nAnd remove a top column, because we now can.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s523262bb871c97d6k"
    },
    {
      "commit": "d03318d51ca1e707698f1aab8d18ed83fc159cbe",
      "tree": "ae2ee324779b56baa1bc0670aa6852366a5ad9ab",
      "parents": [
        "8236cbc9eadb1bf775bbfa24ccf04be2c69faaaf"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu May 08 13:09:12 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 09 15:06:33 2025 -0700"
      },
      "message": "sketch: Introduce versions for sketch state\n"
    },
    {
      "commit": "2c4db099e6763cf18f0c57876298b9f5c70ed925",
      "tree": "ae4408992dd74fa0b5392523d2e6713e388326e7",
      "parents": [
        "b74b526b579320c08ad85cc8b4bdd719c9d6d7c8"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon Apr 28 16:57:50 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 19:59:45 2025 +0000"
      },
      "message": "Restart conversation support.\n\nThe idea here is to let the user restart the conversation, possibly with\na better prompt. This is a common manual workflow, and I\u0027d like to make\nit easier.\n\nI hand wrote the agent.go stuff, but Sketch wrote the rest.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "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": "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": "5c70bfe5601e9919e598025ac56984e1b2e21040",
      "tree": "a2b53c46956af8beaa37aa4157ad7dc2482d3dba",
      "parents": [
        "eda2a8ca73891aa55831391cea6cc8c6d2a79d67"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Apr 25 21:28:00 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Apr 25 21:28:00 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "5b8ab1f1a7bcdd4d1a44e654d2a50074a64bc443",
      "tree": "f8e9b32d6c7593aa251021e91164dfada4890a2d",
      "parents": [
        "c3391a932e724dc6f6898c8e1b51002d104822e1"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 14:14:26 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 14:14:26 2025 -0700"
      },
      "message": "webui: intentionally break formatting\n\nTo test auto-formatting."
    },
    {
      "commit": "a0801ad5dbd2a0e4d4983447b62f72444e829927",
      "tree": "6c622b74649869703cd85f2fe3ea317ee293d46f",
      "parents": [
        "df2d3dccd3f2f97fd4b8ab3bd153fbef15becea0"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 19:34:53 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:56:59 2025 -0700"
      },
      "message": "Add comma formatting to input and output token displays\n\nThe token counts now display with commas in both the terminal UI and web UI.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "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": "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": "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": "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": "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()"
    }
  ]
}
