)]}'
{
  "log": [
    {
      "commit": "141547d1d7169bf1c9a9d156eb6b585f1d9d398c",
      "tree": "e21b530b625a3433653a08fa6ec581a0b2add8a6",
      "parents": [
        "568bebf2f2a23917ac6ce7d2f2f30aba54a57eca"
      ],
      "author": {
        "name": "banksean",
        "email": "banksean@gmail.com",
        "time": "Thu Jul 24 09:21:18 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu Jul 24 16:25:01 2025 +0000"
      },
      "message": "sketch-app-shell: nav to /messages/ on sessionEnd\n\nFixes https://github.com/boldsoftware/bold/issues/457\n"
    },
    {
      "commit": "a6b995b83277dd730e35a8f5be14c139d82a544e",
      "tree": "2cb9d54d6c38916a6639061e2086f24055e68ecf",
      "parents": [
        "57afbca4ac1dbd4351aae93302e34ee45b36a25f"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jul 24 00:45:05 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jul 23 17:53:58 2025 -0700"
      },
      "message": "webui: kill eslint\u0027s no-explicit-any warning dead dead dead\n\nA sign that it maybe it\u0027s not a good fit for us\nis the fact that it was sprinkled around our codebase\nas prolifically as blinding snow in an Antarctic blizzard.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s79f40917a73a3320k\n"
    },
    {
      "commit": "aa22eb7947ae6bb09ce558bcfa52a1d8b2b3286a",
      "tree": "89a95de4ba4f9e7889f6133dea31a7e5f73f54c6",
      "parents": [
        "9dc2f62c6d44f53e057bd7319ffbcbc00ef5f2a0"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Jul 23 19:59:36 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Jul 23 19:59:36 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "9dc2f62c6d44f53e057bd7319ffbcbc00ef5f2a0",
      "tree": "753ea15307dd1ee834ae6973f1a363858e09f4b5",
      "parents": [
        "ddd22da04ed405520012089ffb2bc244b82e41e7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jul 23 01:04:00 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jul 23 12:58:52 2025 -0700"
      },
      "message": "all: remove multiplechoice tool\n\nIt\u0027s rarely used; doesn\u0027t pull its weight.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s11d827ec20c6ddb8k\n"
    },
    {
      "commit": "44f7616740655a904c6b0319d739bfce97f4951b",
      "tree": "6728e7919443b389c53009365efc881089e47671",
      "parents": [
        "581bd795582ab99b1aa81a39466a8433c14d4485"
      ],
      "author": {
        "name": "banksean",
        "email": "banksean@gmail.com",
        "time": "Mon Jul 21 03:04:52 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Mon Jul 21 03:09:20 2025 +0000"
      },
      "message": "webui: remove sketch-network-status component\n\nRemove legacy sketch-network-status component that was emptied in\nprevious commits. The component has been superseded by sketch-call-status\nwhich handles all connection status functionality.\n\nFiles removed:\n- sketch-network-status.ts: Component with empty render (display: none)\n- sketch-network-status.test.ts: Test file for invisible component\n- sketch-network-status.demo.ts: Demo file for non-functional component\n\nUpdated references:\n- sketch-app-shell-base.ts: Remove import and component usage\n- status-indicators.demo.ts: Remove unused import\n- demo-framework/demo-runner.ts: Remove from component list\n- index-generated.html: Regenerated without network status demo\n\nConnection status functionality is now fully handled by sketch-call-status\ncomponent which properly displays IDLE/WORKING/DISCONNECTED states with\nvisual indicators and animations. This removal eliminates dead code and\nreduces the LitElement migration scope to just sketch-monaco-view.ts.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s2b8f6e849aabb45fk\n"
    },
    {
      "commit": "3eaa43377ddaec484ea3564f178078a84dc6e02d",
      "tree": "79c226b85a10f50cf554b87899828e318d63f46f",
      "parents": [
        "d082fdceb0378ddbceb81f51ab77ac1af904d57c"
      ],
      "author": {
        "name": "banksean",
        "email": "banksean@gmail.com",
        "time": "Sat Jul 19 02:19:06 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Sat Jul 19 18:44:56 2025 +0000"
      },
      "message": "webui: implement comprehensive dark mode support\n\nAdd complete dark mode implementation across all web UI components with\ntheme initialization and consistent styling:\n\nCore infrastructure:\n- Update DARK_MODE.md documentation with current implementation details\n- Add theme initialization to sketch-app-shell-base component\n- Implement ThemeService integration with existing theme toggle system\n\nComponent updates with dark mode variants:\n- sketch-app-shell: Main container backgrounds and text colors\n- sketch-app-shell-base: Top banner, todo panel container with gradient backgrounds\n- sketch-chat-input: Input fields, buttons, overlay messages, and drop zones\n- sketch-container-status: Info panels, SSH connection displays, and expandable details\n- sketch-call-status: Status indicators, banners, and activity states\n- sketch-view-mode-select: Tab container, button states, and active tab styling\n- sketch-timeline-message: Message bubbles, markdown content, code blocks, and commit info\n- sketch-push-button: Overlay popup, form controls, and result containers\n- sketch-todo-panel: Todo items, headers, comment modal, and form elements\n- sketch-diff-range-picker: Dropdown interface, commit display, and git reference badges\n\nCSS and styling improvements:\n- Comprehensive markdown content styling for dark theme\n- Code block backgrounds and syntax highlighting adjustments\n- Mermaid diagram container styling for dark mode\n- Auto-generated link styling with proper contrast\n- Git reference badge colors (tags: amber, branches: green, sketch-base: blue)\n\nInteractive element enhancements:\n- Consistent hover states across light and dark themes\n- Proper focus indicators with accessible contrast ratios\n- Loading spinners and progress indicators adapted for dark backgrounds\n- Error and success message styling with semantic color preservation\n\nKey implementation details:\n- Consistent color mappings: white→gray-900, gray-100→gray-800, gray-200→gray-700\n- Preserved brand colors (blue-500, red-600, green-600) that work in both themes\n- Maintained semantic color coding for success/error/warning states\n- Ensured accessibility with proper contrast ratios throughout\n- Theme system integration enables seamless switching without page reload\n\nThe web UI now provides a complete, professional dark mode experience\nwith excellent usability and visual consistency while preserving all\nexisting functionality and accessibility standards.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s8219557c3ecba46dk\n"
    },
    {
      "commit": "7208bb4b7fbdfec4a86843020eb8d384ac9889e7",
      "tree": "b5b577fdde5d46c00d624595ddba49209701e7a4",
      "parents": [
        "254c49faa2537d79e1394c4109f48a6e0990967c"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Jul 18 00:44:11 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jul 17 18:04:13 2025 -0700"
      },
      "message": "webui: add tooltips for upper-right corner buttons\n\nFixes https://github.com/boldsoftware/sketch/issues/160\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s7884db8812a87864k\n"
    },
    {
      "commit": "254c49faa2537d79e1394c4109f48a6e0990967c",
      "tree": "3b13d86f48e45846dc225ccd24253f5b0dca0398",
      "parents": [
        "55b4ab50d0ee61e15825cb4254cfc63b8f5489bd"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu Jul 17 17:26:24 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Jul 18 00:40:30 2025 +0000"
      },
      "message": "sketch: \"git push\" button\n\nUltimately, we want to allow users to push their changes to github, and\nthereby do a good chunk of work without resorting to the terminal (and\nfiguring out how to move the git references around, which requires a\nbunch of esotiric and annoying expertise).\n\nThis commit introduces:\n\n1. For outtie\u0027s HTTP server (which is now comically Go HTTP -\u003e\n   CGI-effing-bin -\u003e git -\u003e shell script -\u003e git in this case), there\u0027s a\n   custom git hook that forwards changes to refs/remotes/origin/foo to\n   origin/foo. This is a git proxy of sorts. By forwarding the\n   SSH_AUTH_SOCK, we can use outtie\u0027s auth options without giving innie\n   the actual credentials. This works by creating a temporary directory\n   for git hooks (for outtie).\n\n2. Innie sets up a new remote, \"upstream\" when a \"passthrough-upstream\"\n   flag is pasksed. This remote kind of looks like the real upstream (so\n   upstream/foo) is fetched. This will let the agent handle rebases\n   better.\n\n3. Innie exposes a /pushinfo handler that returns the list of remotes\n   and the current commit and such. These have nice display names for\n   the outtie\u0027s machine and github if useful.\n\n   There\u0027s also a /push handler. This is the thing that knows about the\n   refs/remotes/origin/foo thing. There\u0027s no magic git push refspec that\n   makes this all work without that, I think. (Maybe there is? I don\u0027t\n   think there is.)\n\n   Note that there\u0027s been some changes about what the remotes look like,\n   and when we use the remotes and when we use agent.GitOrigin().\n   We may be able to simplify this by using git\u0027s insteadof\n   configurations, but I think it\u0027s fine.\n\n4. The web UI exposes a button to push, choose the remote and branch,\n   and such. If it can\u0027t do the push, you\u0027ll get a button to try to get\n   the agent to rebase.\n\n   We don\u0027t allow force pushes in the UI. We\u0027re treating those\n   as an advanced feature, and, if you need to do that, you can\n   figure it out.\n\nThis was collaboration with a gazillion sketch sessions.\n"
    },
    {
      "commit": "c37e066371997d221af074b0bc1da392c82c6a2b",
      "tree": "b352de3edf0227f002aaa0ab674aea4feaed76fa",
      "parents": [
        "df23403824257c1201f64f865eaf169ceef45c3d"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Jul 03 08:46:21 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu Jul 03 16:25:09 2025 +0000"
      },
      "message": "sketch-container-status:latest context window size\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": "261c9116af76218e9d0c4c7c426f7829b911421c",
      "tree": "5ad8adb42cad1357bd49a92bb64caa0b5e3e716a",
      "parents": [
        "a70dcc45ebdf79aba2a49f445caa96f40ce5a603"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Jun 25 16:36:20 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Jun 25 23:45:45 2025 +0000"
      },
      "message": "rm shadowRoot references from SketchAppShellBase\n\nit no longer has a shadowRoot since it\u0027s using tailwind now.\n"
    },
    {
      "commit": "a70dcc45ebdf79aba2a49f445caa96f40ce5a603",
      "tree": "0412fce470e83de280e3e8ff5836418d2a0d54b0",
      "parents": [
        "618bfb28892561a8ef2e3d6163de4fd6c990beda"
      ],
      "author": {
        "name": "banksean",
        "email": "banksean@gmail.com",
        "time": "Wed Jun 25 20:54:11 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Jun 25 15:57:55 2025 -0700"
      },
      "message": "fix visibility and css breakpoits on todo panel\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sbb5ba87b117a38c1k\n"
    },
    {
      "commit": "8b2bc8eacb6ca23c1dbfda31eb9f3651eb756820",
      "tree": "3ddde7e060d63b7acde22f770f3769b819608cc8",
      "parents": [
        "3999593021336893670576875c130c1b171e797d"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Jun 25 12:52:16 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Jun 25 13:08:24 2025 -0700"
      },
      "message": "fix stop/end button css breakpoints\n"
    },
    {
      "commit": "7735844caf9fa4e2d7bbe3bf64d20e86b9bf469e",
      "tree": "e5c73e24642f2dab2ac95ba3db4c04e1ac0ac82e",
      "parents": [
        "bf66a2f9313894d63f204816ba90e412e02363c0"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Wed Jun 25 00:26:08 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Jun 25 03:12:26 2025 +0000"
      },
      "message": "skaband: create forked app shell for /newsessions with shared base\n\nFactor out shared components from sketch/webui app shell and create\nnewsessions-specific version under skaband with pinned topbar/textarea layout.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s9fcdda62becc98f9k\n"
    }
  ]
}
