)]}'
{
  "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",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b95708e6f9c7db6cf1bb35304252cebd694cadb4",
      "old_mode": 33188,
      "old_path": "webui/Makefile",
      "new_id": "48198c306e05c56b670c4fd94251f8ecc5697725",
      "new_mode": 33188,
      "new_path": "webui/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3bde6c1d0f0a8c882bbb29047016d38e51281c39",
      "new_mode": 33188,
      "new_path": "webui/eslint.config.mjs"
    },
    {
      "type": "modify",
      "old_id": "8b841baf2a24908fec31307717f6fd9071128e06",
      "old_mode": 33188,
      "old_path": "webui/mockServiceWorker.js",
      "new_id": "de7bc0f292d4cbfd1bbc656861812d88d1271e95",
      "new_mode": 33188,
      "new_path": "webui/mockServiceWorker.js"
    },
    {
      "type": "modify",
      "old_id": "7afec619f6fb398babaca74e22962f40ac64a0bc",
      "old_mode": 33188,
      "old_path": "webui/package-lock.json",
      "new_id": "bdac10c218d8e1e192b1889a534c8e3c3d8f3f25",
      "new_mode": 33188,
      "new_path": "webui/package-lock.json"
    },
    {
      "type": "modify",
      "old_id": "6454fb8dd5dfaaa6ce0e0396aecada179e362762",
      "old_mode": 33188,
      "old_path": "webui/package.json",
      "new_id": "7ec01920fe1fee1b14f2a1a70ff7d1c43b6d3853",
      "new_mode": 33188,
      "new_path": "webui/package.json"
    },
    {
      "type": "modify",
      "old_id": "2b3d7aef9d7728a8017524a19754561dfa4c86c6",
      "old_mode": 33188,
      "old_path": "webui/src/data.ts",
      "new_id": "c94fde415b95b1cfe7e4d16730b78602e4eae38a",
      "new_mode": 33188,
      "new_path": "webui/src/data.ts"
    },
    {
      "type": "modify",
      "old_id": "56c52f3f707f2efef36683342106867c36037e92",
      "old_mode": 33188,
      "old_path": "webui/src/messages-viewer.test.ts",
      "new_id": "bd499f849a3f36dcc192d2b0187dacc49a7466f7",
      "new_mode": 33188,
      "new_path": "webui/src/messages-viewer.test.ts"
    },
    {
      "type": "modify",
      "old_id": "e23de4941e737e296e588696f3a669073196d71b",
      "old_mode": 33188,
      "old_path": "webui/src/messages-viewer.ts",
      "new_id": "c374646bd7df8dfbaf13337d38b8287d0d0952d4",
      "new_mode": 33188,
      "new_path": "webui/src/messages-viewer.ts"
    },
    {
      "type": "modify",
      "old_id": "b60a0fa0583c0d38263e82f6c49368e21244d696",
      "old_mode": 33188,
      "old_path": "webui/src/utils.ts",
      "new_id": "9e4fb5f72a934393e5c9abe967fb2941b5bc0d05",
      "new_mode": 33188,
      "new_path": "webui/src/utils.ts"
    },
    {
      "type": "modify",
      "old_id": "3dc11f8e7343a2d4af05dc97488bfa9d670760dd",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/aggregateAgentMessages.ts",
      "new_id": "366b69034f86f615542caa1855e9e8945b15bc97",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/aggregateAgentMessages.ts"
    },
    {
      "type": "modify",
      "old_id": "7ddcc7e1b27649bc1024dcca256681e9d602d340",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/chat-input.ts",
      "new_id": "746d9ce70aa584db24da4f71fb885bcbbb5c38eb",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/chat-input.ts"
    },
    {
      "type": "modify",
      "old_id": "5e2df2db58eb3edca55885dc586b28564b1458a9",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/demo-fixtures/view-mode-select.ts",
      "new_id": "8747e6ee4f7b7a5a33d5f8f9f397142e429dc422",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/demo-fixtures/view-mode-select.ts"
    },
    {
      "type": "modify",
      "old_id": "a547c0a4e8d1c2ab3866f1a8cd38901b6467d3a4",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/demo-framework/demo-runner.ts",
      "new_id": "1c9160c123c7c0db2298c4c6c34206e5b668bada",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/demo-framework/demo-runner.ts"
    },
    {
      "type": "modify",
      "old_id": "0e0573073360a5cb30ab8fe901f2af5123c48f47",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/mocks/browser.ts",
      "new_id": "30e2210c670ab87e6c8e6e69869e4f158ff52f28",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/mocks/browser.ts"
    },
    {
      "type": "modify",
      "old_id": "29f0710d015f6600df7567463d7e6e8dbb4a8bf3",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/mocks/handlers.ts",
      "new_id": "b5753a130977a9f9078ff1d385c8c9c3aa1bb963",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/mocks/handlers.ts"
    },
    {
      "type": "modify",
      "old_id": "d0ee53c0f5994b570eeb6b1a3b193925e7072b86",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/sketch-app-shell.demo.ts",
      "new_id": "332b0fb8fd00d8d9fcf216b61b846da4e8cf1c19",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/sketch-app-shell.demo.ts"
    },
    {
      "type": "modify",
      "old_id": "44b8c21e7747b719f3658183913dc13b1e803433",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/sketch-call-status.demo.ts",
      "new_id": "f01b19014ca8f1a8f77764836c007f4f37d86031",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/sketch-call-status.demo.ts"
    },
    {
      "type": "modify",
      "old_id": "f18c0b9e294d61c9dfbf9c966c81fd968cf51a57",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/sketch-chat-input.demo.ts",
      "new_id": "ac5f756746cfefc9ba3555be5c2215f7bc25838a",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/sketch-chat-input.demo.ts"
    },
    {
      "type": "modify",
      "old_id": "b57412dd440342bcbc1fce9137cf0ce3ba194d6c",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/sketch-container-status.demo.ts",
      "new_id": "da0e435676bc146ddc6214eae39f3ac36f239225",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/sketch-container-status.demo.ts"
    },
    {
      "type": "modify",
      "old_id": "0a41250a65b8da9bf1c4e5227f6518d2ab1d4e29",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/sketch-timeline.demo.ts",
      "new_id": "845967b4c1ec878191339029c69888566a21345e",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/sketch-timeline.demo.ts"
    },
    {
      "type": "modify",
      "old_id": "f2796574c3225b70adf33eff194a0d1bae6ae4f8",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/sketch-tool-calls.demo.ts",
      "new_id": "80eda2684aa5eb46c90d2ffe4480eed303507ac7",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/sketch-tool-calls.demo.ts"
    },
    {
      "type": "modify",
      "old_id": "c187fbd56d0054b6fbcd2f5bfdbba5bc8b984064",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/demo/sketch-view-mode-select.demo.ts",
      "new_id": "523f37131c6869ead0577a4c055f2b801868fd3d",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/demo/sketch-view-mode-select.demo.ts"
    },
    {
      "type": "modify",
      "old_id": "94abdbc1a7cbc0de01247df0771ff2c28306fa4f",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/mobile-chat-input.ts",
      "new_id": "c41cdff502bb828d526b7a2ea364bb3f79758a11",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/mobile-chat-input.ts"
    },
    {
      "type": "modify",
      "old_id": "26ef963274aded6952880de988519e1aea646309",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/mobile-chat.ts",
      "new_id": "bd3a9e3a7104fbcf7083e334292427dbd95ded41",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/mobile-chat.ts"
    },
    {
      "type": "modify",
      "old_id": "9d74518086a860368a70928f665d218dec92d5e7",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/mobile-diff.ts",
      "new_id": "7511602cb0949acafdae53bd5e6dfdf7506741d1",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/mobile-diff.ts"
    },
    {
      "type": "modify",
      "old_id": "1a27c05bc5014414b74cbeb19206309bfe406f9b",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/mobile-shell.ts",
      "new_id": "dd59ad8b5c6469c393c61ae83f3e93a0f6143084",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/mobile-shell.ts"
    },
    {
      "type": "modify",
      "old_id": "502b019df6e0a10b0a6739c2fa8bb7443ac4a654",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-app-shell-base.ts",
      "new_id": "070ed216b360fee6bf721c81de3b53738ab096e2",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-app-shell-base.ts"
    },
    {
      "type": "modify",
      "old_id": "94e9a550ef81a6edbd96885ea30b6b929814192e",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-app-shell.test.ts",
      "new_id": "6c8d46859e0c3e6b8429b8e373773356c4367306",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-app-shell.test.ts"
    },
    {
      "type": "modify",
      "old_id": "532ccf41add0da8bcad53012b1582aaa39641afe",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-chat-input.test.ts",
      "new_id": "8c1a47a63c85c5a4c94c2837e502c07faa9aa2e0",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-chat-input.test.ts"
    },
    {
      "type": "modify",
      "old_id": "557e171891d45f1efd4d5841eab44196fda81326",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-chat-input.ts",
      "new_id": "6ccdb3238b70be08bd6fea4574c4d1eea1620727",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-chat-input.ts"
    },
    {
      "type": "modify",
      "old_id": "09fe41e0d4156ad0f423a14e11947d732b990ddb",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-container-status.ts",
      "new_id": "5e276a889693ce79bd4cd193e15d7e2876d965d1",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-container-status.ts"
    },
    {
      "type": "modify",
      "old_id": "127732a46ee183fb5220efa37b223c5db7677667",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-diff-range-picker.ts",
      "new_id": "6a656f32526300d91154df60d954c4de827fe3a3",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-diff-range-picker.ts"
    },
    {
      "type": "modify",
      "old_id": "ccdfebc292d1df8055e60f04f4457a302f0f2795",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-diff2-view.ts",
      "new_id": "650826c5c5b2ec7fc07d9b80ccd964fb077c66c5",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-diff2-view.ts"
    },
    {
      "type": "modify",
      "old_id": "7366153ca096a47138d1eb4f406942c6dae13b82",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-monaco-view.test.ts",
      "new_id": "d967cc94c0bfbbfff2be420564fd623972655c47",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-monaco-view.test.ts"
    },
    {
      "type": "modify",
      "old_id": "917b816f9544dd4e32db97aa0b3f401cb0dd213b",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-monaco-view.ts",
      "new_id": "fa657f9f90a90fd89f03390bcfb68b4df8eef66e",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-monaco-view.ts"
    },
    {
      "type": "modify",
      "old_id": "0c3b9a7415d1f9efbdc962642b26ca581b4b2003",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-terminal.ts",
      "new_id": "38e742553189272a553d7f3d9667c961668cedc9",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-terminal.ts"
    },
    {
      "type": "modify",
      "old_id": "1fb8334324cbbc6d4f12ca5cb74d8cf3f624908f",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-timeline-message.ts",
      "new_id": "695ef79b824c501cf5a620299ae1eddcd17f863f",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-timeline-message.ts"
    },
    {
      "type": "modify",
      "old_id": "314c5a070a5d1366eaf9f6eb3f38ecbaa5c2ee17",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-timeline.test.ts",
      "new_id": "64323c0d0d5f175e1592d4d5780d84eb882269fd",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-timeline.test.ts"
    },
    {
      "type": "modify",
      "old_id": "b0edb4236968d8162a725f835bc368ebe81bd9ef",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-timeline.ts",
      "new_id": "b0e6d4c726f6eac69cc487a9a9c8c5dc609a8f19",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-timeline.ts"
    },
    {
      "type": "modify",
      "old_id": "dd23276d0c503c8bfa6fdac63b964f5b9935d1fc",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-todo-panel.ts",
      "new_id": "7760faf8700173f1b46aaa4606fecd9e3751cfe6",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-todo-panel.ts"
    },
    {
      "type": "modify",
      "old_id": "c12f72252a16b61fc3cf4af0983ad458b7ffc031",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-tool-card.ts",
      "new_id": "34e902096361d97d3b6145605df535306a2ddcdc",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-tool-card.ts"
    },
    {
      "type": "modify",
      "old_id": "3862393c652898822da78b175baf1865b15f3cc1",
      "old_mode": 33188,
      "old_path": "webui/src/web-components/sketch-view-mode-select.test.ts",
      "new_id": "da4d10cd5d51dbbb9e368f26ee7bca4e22ca85d9",
      "new_mode": 33188,
      "new_path": "webui/src/web-components/sketch-view-mode-select.test.ts"
    },
    {
      "type": "modify",
      "old_id": "9fc8e3a1d578f33b9162742534f315a782594ff3",
      "old_mode": 33188,
      "old_path": "webui/vite.config.mts",
      "new_id": "e9b52d3ba6f0543310e0f99ca52b215bd1d59652",
      "new_mode": 33188,
      "new_path": "webui/vite.config.mts"
    }
  ]
}
