)]}'
{
  "log": [
    {
      "commit": "618bfb28892561a8ef2e3d6163de4fd6c990beda",
      "tree": "c1ef367f8a4ecea00f237bc084f1ecbd15773764",
      "parents": [
        "8b2bc8eacb6ca23c1dbfda31eb9f3651eb756820"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Jun 25 20:52:30 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Jun 25 22:24:00 2025 +0000"
      },
      "message": "webui: implement modular demo system with TypeScript and shared fixtures\n\nReplace hand-written HTML demo pages with TypeScript demo modules and\nautomated infrastructure to reduce maintenance overhead and improve\ndeveloper experience with type safety and shared code.\n\nProblems Solved:\n\nDemo Maintenance Overhead:\n- Hand-written HTML demo pages contained extensive boilerplate duplication\n- No type checking for demo setup code or component data\n- Manual maintenance of demo/index.html with available demos\n- Difficult to share common fake data between demo pages\n- No hot module replacement for demo development\n\nCode Quality and Consistency:\n- Demo setup code written in plain JavaScript without type safety\n- No validation that demo data matches component interfaces\n- Inconsistent styling and structure across demo pages\n- Duplicated fake data declarations in each demo file\n\nSolution Architecture:\n\nTypeScript Demo Module System:\n- Created DemoModule interface for standardized demo structure\n- Demo modules export title, description, imports, and setup functions\n- Full TypeScript compilation with type checking for demo code\n- Dynamic import system for on-demand demo loading with Vite integration\n\nShared Demo Infrastructure:\n- demo-framework/ with types.ts and demo-runner.ts for core functionality\n- DemoRunner class handles dynamic loading, cleanup, and error handling\n- Single demo-runner.html page loads any demo module dynamically\n- Supports URL hash routing for direct demo links\n\nCentralized Fake Data:\n- demo-fixtures/ directory with shared TypeScript data files\n- sampleToolCalls, sampleTimelineMessages, and sampleContainerState\n- Type-safe imports ensure demo data matches component interfaces\n- demoUtils with helper functions for consistent demo UI creation\n\nAuto-generated Index Page:\n- generate-index.ts scans for *.demo.ts files and extracts metadata\n- Creates index-generated.html with links to all available demos\n- Automatically includes demo titles and descriptions\n- Eliminates manual maintenance of demo listing\n\nImplementation Details:\n\nDemo Framework:\n- DemoRunner.loadDemo() uses dynamic imports with Vite ignore comments\n- Automatic component import based on demo module configuration\n- Support for demo-specific CSS and cleanup functions\n- Error handling with detailed error display for debugging\n\nDemo Module Structure:\n- sketch-chat-input.demo.ts: Interactive chat with message history\n- sketch-container-status.demo.ts: Status variations with real-time updates\n- sketch-tool-calls.demo.ts: Multiple tool call examples with progressive loading\n- All use shared fixtures and utilities for consistent experience\n\nVite Integration:\n- Hot Module Replacement works for demo modules and shared fixtures\n- TypeScript compilation on-the-fly for immediate feedback\n- Dynamic imports work seamlessly with Vite\u0027s module system\n- @vite-ignore comments prevent import analysis warnings\n\nTesting and Validation:\n- Tested demo runner loads and displays available components\n- Verified component discovery and dynamic import functionality\n- Confirmed shared fixture imports work correctly\n- Validated auto-generated index creation and content\n\nFiles Modified:\n- demo-framework/types.ts: TypeScript interfaces for demo system\n- demo-framework/demo-runner.ts: Core demo loading and execution logic\n- demo-fixtures/: Shared fake data (tool-calls.ts, timeline-messages.ts, container-status.ts, index.ts)\n- demo-runner.html: Interactive demo browser with sidebar navigation\n- generate-index.ts: Auto-generation script for demo index\n- sketch-chat-input.demo.ts: Converted chat input demo to TypeScript\n- sketch-container-status.demo.ts: Container status demo with variations\n- sketch-tool-calls.demo.ts: Tool calls demo with interactive examples\n- readme.md: Comprehensive documentation for new demo system\n\nBenefits:\n- Developers get full TypeScript type checking for demo code\n- Shared fake data ensures consistency and reduces duplication\n- Hot module replacement provides instant feedback during development\n- Auto-generated index eliminates manual maintenance\n- Modular architecture makes it easy to add new demos\n- Vite integration provides fast development iteration\n\nThe new system reduces demo maintenance overhead while providing\nbetter developer experience through TypeScript, shared code, and\nautomated infrastructure.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s3d91894eb7c4a79fk\n"
    },
    {
      "commit": "cb48b67edc89182fbde0827fd25f7c4c1640d2c8",
      "tree": "dd01329422b22139d42390c311b914cbdf0a54e9",
      "parents": [
        "7735844caf9fa4e2d7bbe3bf64d20e86b9bf469e"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Jun 25 10:11:16 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Jun 25 10:11:34 2025 -0700"
      },
      "message": "sketch-app-shell: add tailwind css to demo html\n"
    },
    {
      "commit": "26daff7287b50f79a2f54563de83fa175ab35616",
      "tree": "f9f6ac873231b1e87be654137410fd02abcadc3d",
      "parents": [
        "7b43662d9959e1f5c7dd2b390474192b442d5801"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 14:25:55 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 19:06:40 2025 +0100"
      },
      "message": "webui: Fix demo css\n"
    },
    {
      "commit": "8cac59aedb3ae4f45464ce3cd4eed36d6834dc7b",
      "tree": "2ffecc10a275f859c354c234d08e9b763376a4ff",
      "parents": [
        "bbca240367c3df26870ffe0fcc41c0c004679736"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 12:21:19 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu Apr 24 12:21:19 2025 +0100"
      },
      "message": "feat: integrate Mock Service Worker (MSW) for API mocking and testing\n\nCurrently just used for demo page\n\n- Added MSW as a dependency in package.json.\n- Configured MSW in the demo HTML to start the worker and handle API requests.\n- Created mockServiceWorker.js to manage service worker lifecycle and request handling.\n- Implemented browser.ts to set up the MSW worker with defined request handlers.\n- Developed handlers.ts to simulate API responses and manage application state for testing.\n"
    },
    {
      "commit": "2032b1c1971ceb85ca14b20273a3783729fba3e3",
      "tree": "0486e9222643ffcbbd34286148f4a7913a169668",
      "parents": [
        "4f50a68ac73677c0022b2b3da8b4667cee01c11b"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:40:42 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:40:42 2025 -0700"
      },
      "message": "Move webui from /loop/webui to /webui\n\nThanks, perl (and git mv):\n\n\tperl -pi -e s,loop/webui,webui,g $(git grep -l loop/webui)\n"
    },
    {
      "commit": "e2a8c2f1fae1f8e3162b2533d27825e1bf800574",
      "tree": "4dcdd7de679c90a4d3ec79b47111ce5e67fd07b2",
      "parents": [
        "d140295fa7d794f5b30feb4eee2f45f9cc9ff383"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed Apr 23 15:09:25 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed Apr 23 15:09:49 2025 +0100"
      },
      "message": "webui: Improve dx\n\nFor local development, switch to Vite and update web components for improved demo experience. Note that we haven\u0027t changed how we bundle when we\u0027re actually running in sketch; that\u0027s still the go/esbuild in-memory setup. This just changes demo dev setup to get breakpoints working and a functioning full sketch-app-shell.\n\nWe still need to add some mock data, but this is a start\n\n- Introduced `vite.config.mts` for Vite setup with hot module reloading.\n- Updated `package.json` and `package-lock.json` to include Vite and related plugins.\n- Refactored demo scripts to utilize Vite for local development.\n- Created `launch.json` for VSCode debugging configuration.\n- Enhanced `Makefile` with a new demo task.\n- Improved styling and structure in demo HTML and CSS files.\n- Implemented `aggregateAgentMessages` function for message handling in web components.\n"
    },
    {
      "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()"
    }
  ]
}
