)]}'
{
  "log": [
    {
      "commit": "9c96bfe5f091c9451eff5b59c9bffeb2e806b875",
      "tree": "4bd5fa8927354a54d991fc7868d0e74052ceb490",
      "parents": [
        "af7e8292fcb368ad27e31602661513d77a72cd54"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon May 04 09:35:46 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 04 09:35:46 2026 -0700"
      },
      "message": "Add test for DTD discovery (#465)"
    },
    {
      "commit": "af7e8292fcb368ad27e31602661513d77a72cd54",
      "tree": "4bd5fa8927354a54d991fc7868d0e74052ceb490",
      "parents": [
        "f151df92782103faf259379455fb696d94ded8f0"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon May 04 08:36:10 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 04 15:36:10 2026 +0000"
      },
      "message": "Add test for DTD discovery (#465)\n\nCloses https://github.com/dart-lang/ai/issues/405\r\n\r\nThis expands the existing test just a bit to ensure that a DTD instance spawned completely outside of the test harness is discoverable via the MCP server."
    },
    {
      "commit": "f151df92782103faf259379455fb696d94ded8f0",
      "tree": "7b23af337db8b37bf4ca798c098259d8bff73996",
      "parents": [
        "03d251c959bacb97fcd221933ef4ac3992c0491c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri May 01 07:54:12 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 07:54:12 2026 -0700"
      },
      "message": "Bump actions/cache from 5.0.4 to 5.0.5 in the github-actions group (#464)\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "03d251c959bacb97fcd221933ef4ac3992c0491c",
      "tree": "81e027d99e2def59871a7e1ab58f604901338456",
      "parents": [
        "7270c43155f03423966891fe65a69676c7fdefc5"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Apr 30 12:34:59 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 12:34:59 2026 -0700"
      },
      "message": "add obsolete issues skill (#462)"
    },
    {
      "commit": "7270c43155f03423966891fe65a69676c7fdefc5",
      "tree": "55c879a840be8ef0251feb5e5797ffdbe35ac75d",
      "parents": [
        "07af327b141a173229fa6154ded97a417c870077"
      ],
      "author": {
        "name": "Sourav-Sonkar",
        "email": "58032164+Sourav-Sonkar@users.noreply.github.com",
        "time": "Wed Apr 29 01:14:51 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 12:44:51 2026 -0700"
      },
      "message": "fix: graceful shutdown of orphaned test apps on windows (#438)\n\nFixes #407\n\nThis PR resolves the multi-app DTD test teardown failure on Windows.\n\n**What this PR changes:**\n- Modified the test dummy applications in `dtd_multiple_connection_test.dart` and `infinite_wait.dart` to gracefully shut down by listening to `stdin` and calling `exit(0)` when the pipe is closed.\n\n**Why:**\nOn Windows, when `AppDebugSession` terminates the parent `dart run` test process via `process.kill()`, the child `dart` process running the infinite `while(true)` loop tends to be left orphaned. This orphaned process maintained a lock on the `d.sandbox` directory, preventing the test framework from deleting the temp directory during teardown and throwing a \"file in use\" or \"access denied\" error. By having the test fixture scripts monitor `stdin` and exit on its closure, the child process dies gracefully as soon as the test stops the debug session or the test forcefully crashes."
    },
    {
      "commit": "07af327b141a173229fa6154ded97a417c870077",
      "tree": "5066f150d13c3b06940743e50163b4dad315085d",
      "parents": [
        "ff1866d245cb483fa1ae0876af44b0312b099f52"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Tue Apr 28 11:11:31 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 11:11:31 2026 -0700"
      },
      "message": "Update dependencies (#453)"
    },
    {
      "commit": "ff1866d245cb483fa1ae0876af44b0312b099f52",
      "tree": "841bb692fb6781d1efec3db32aa312d78b54736e",
      "parents": [
        "8ce74503fc41368111348eb1dd50cdfa9ec657c6"
      ],
      "author": {
        "name": "Goweii",
        "email": "goweii@163.com",
        "time": "Wed Apr 29 00:13:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 09:13:33 2026 -0700"
      },
      "message": "fix: Add empty properties object to tool input schemas to resolve Claude 400 validation error (#444)\n\nfix: Add empty properties object to tool input schemas to resolve Claude 400 validation error\n\n## Description\n\nThis PR fixes a 400 validation error that occurs when using the Dart MCP server with Claude Code, Claude Desktop, LMStudio, and other AI clients that strictly validate tool input schemas.\n\n### Problem\n\nSeveral MCP tools defined in the server have an `inputSchema` that lacks a `properties` object. While the MCP specification states that only `type` is required for tool input schemas, some clients (including Claude Code, LMStudio, and VS Code) expect `properties` to be present and throw validation errors when it is missing.\n\nThe affected tools are:\n- `mcp_dart_sdk_mcp__analyze_files`\n- `mcp_dart_sdk_mcp__get_active_location`\n- `mcp_dart_sdk_mcp__get_selected_widget`\n- `mcp_dart_sdk_mcp__get_widget_tree`\n- `mcp_dart_sdk_mcp__take_screenshot`\n\nAdditionally, the `pub_dev_search` tool has an excessively long description that causes truncation warnings in some clients.\n\nClaude Code produces the following error when these tools are registered:\n```\nAPI Error: 400 {\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"request.tools.22.input_schema.properties: Required\"}}\n```\n\n### Solution\n\nThis PR updates the tool definitions to:\n1. Add an empty `properties: {}` object to the `inputSchema` of all tools that do not require any input parameters\n2. Truncate the description of the `pub_dev_search` tool to comply with client limitations (1024 characters)\n\n### Related Issue\n\nFixes #170 (https://github.com/dart-lang/ai/issues/170#issuecomment-3920296030)\n\n### Testing\n\n- [ ] Verified that the MCP server starts without validation warnings in VS Code\n- [x] Verified that Claude Code can successfully register and call all tools without 400 errors\n- [ ] Verified that existing tool functionality remains unchanged\n\n### Notes for Reviewers\n\nAccording to the MCP specification, `properties` is optional in the `inputSchema` definition:\n```typescript\nexport interface Tool {\n  inputSchema: {\n    type: \"object\";\n    properties?: { [key: string]: object };\n    required?: string[];\n  };\n}\n```\n\nHowever, adding an empty `properties` object is a simple, low-risk change that improves compatibility with clients that implement stricter validation, such as LMStudio (which defines `properties` as a required field in its `LLMToolParameters` type) and Claude Code."
    },
    {
      "commit": "8ce74503fc41368111348eb1dd50cdfa9ec657c6",
      "tree": "0e17d8b91e617922d24ca5a5809be4bbc0250a9b",
      "parents": [
        "899e56256ea82e01b3c9d78248cb5c582c56cb0f"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Apr 16 11:03:55 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 11:03:55 2026 -0700"
      },
      "message": "add gemini code assist configuration for reviews (#443)\n\nBased on the devtools config at https://github.com/flutter/devtools/blob/master/.gemini/config.yaml"
    },
    {
      "commit": "899e56256ea82e01b3c9d78248cb5c582c56cb0f",
      "tree": "b3932b45cd471fac7943b2905a31b353ffdc0e02",
      "parents": [
        "3d3b7fdaddead83ce262377e5c4ce5b2a843066c",
        "5eae0aef1cd1435a3a7d4b19e7e7a9f6e38cc991"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Tue Apr 14 11:38:29 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 11:38:29 2026 -0700"
      },
      "message": "Merge cherry-pick branch into main (#442)\n\nMerges the cherry-pick branch into main to ensure it doesn\u0027t get GC\u0027d"
    },
    {
      "commit": "5eae0aef1cd1435a3a7d4b19e7e7a9f6e38cc991",
      "tree": "b3932b45cd471fac7943b2905a31b353ffdc0e02",
      "parents": [
        "3d3b7fdaddead83ce262377e5c4ce5b2a843066c",
        "1e69aa896fa23c93458017ee9b0bfacf446cb616"
      ],
      "author": {
        "name": "Jake Macdonald",
        "email": "jakemac@google.com",
        "time": "Tue Apr 14 18:27:49 2026 +0000"
      },
      "committer": {
        "name": "Jake Macdonald",
        "email": "jakemac@google.com",
        "time": "Tue Apr 14 18:27:49 2026 +0000"
      },
      "message": "Merge remote-tracking branch \u0027origin/cherry-pick\u0027 into merge-cherry-pick\n"
    },
    {
      "commit": "1e69aa896fa23c93458017ee9b0bfacf446cb616",
      "tree": "217b8abee3776b663d4486d435598b829aa10326",
      "parents": [
        "a3a196bf4773c7a7a9f93b6798232fb0d8220bc3"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Tue Apr 14 11:20:43 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 11:20:43 2026 -0700"
      },
      "message": "re-implement most of #440 for the current stable release (#441)"
    },
    {
      "commit": "3d3b7fdaddead83ce262377e5c4ce5b2a843066c",
      "tree": "b3932b45cd471fac7943b2905a31b353ffdc0e02",
      "parents": [
        "07df396bdb15cb52edbe59b4bc2c5648c2203781"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Apr 13 14:11:43 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 14:11:43 2026 -0700"
      },
      "message": "Enable roots tools always, collapse under one tool (#440)\n\nFixes https://github.com/dart-lang/ai/issues/439 - and hopefully all future roots issues.\n\nThis enables adding/removing roots at will and will merge those with any roots set by the client.\n\n## Security implications\n\nThe Dart MCP server in general doesn\u0027t perform destructive operations (outside of dart format), so security implications here are light. It does mean that an agent attached to one workspace, can actually interact with other dart projects through the MCP server, but I think that is generally a plus.\n\nEverything is still guarded behind a tool call, so users can choose to not auto-approve based on their agent settings, and any adding/removing of roots will be explicit in that mode."
    },
    {
      "commit": "07df396bdb15cb52edbe59b4bc2c5648c2203781",
      "tree": "b106c09df9b07dd637e1e87a34ae0514b732c6bd",
      "parents": [
        "f1cddc8e1905b9a5753a93ce451522e564311251"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Tue Apr 07 13:59:34 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 13:59:34 2026 -0700"
      },
      "message": "add some instructions for connecting to apps to the README.md (#425)\n\nAdds some basic documentation for connecting to flutter and dart applications, with hints about `--observe` and `--print-dtd`.\n\nCloses https://github.com/dart-lang/ai/issues/416"
    },
    {
      "commit": "f1cddc8e1905b9a5753a93ce451522e564311251",
      "tree": "f5baee6f2abaa8ff6079b869c7eb206220a31f5a",
      "parents": [
        "4bc6fd793c80b5c8cc58939435b4b542c2c04572"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Apr 02 12:12:14 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 12:12:14 2026 -0700"
      },
      "message": "Add support for custom tool metrics, implement some for analyzer tools (#423)\n\nNow that analysis server starts up lazily, we want to capture how much of any given call went towards that initialization versus actual work in the tool call. This also will capture how much extra time is added in order to apply quick fixes.\n\nDetails:\n- Adds elapsed time and boolean for whether the server was started to the `withAnalysisServer` callback \n- Adds a new `customMetrics` extension on `CallToolResult` which uses an expando to store additional analytics information for a given tool call.\n- Adds support to `CallToolMetrics` to merge this extra information into the analytics data (flat merge)."
    },
    {
      "commit": "4bc6fd793c80b5c8cc58939435b4b542c2c04572",
      "tree": "c963de51d514d21ee47e9c1f27f4aa4715d4fa23",
      "parents": [
        "a5ed11e4c4880b35a55b995321c19a6b58fa0867"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Apr 01 07:23:03 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 07:23:03 2026 -0700"
      },
      "message": "Bump the github-actions group with 2 updates (#421)\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "a5ed11e4c4880b35a55b995321c19a6b58fa0867",
      "tree": "64c01cef3846b68e76b006bcf3f9002ffef5af61",
      "parents": [
        "e637e7fea4f80142e5a8f023407eec94d7861b62"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Mar 30 13:22:14 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 13:22:14 2026 -0700"
      },
      "message": "Add `listDtdUris` command to the DTD tool, drop auto DTD connection logic. (#418)\n\nRelated to https://github.com/dart-lang/ai/issues/416.\n\nThis changes the flow for connecting to DTD to require an extra tool call in most cases (list then connect), but also makes things a lot more explicit and also less confusing for the agents.\n\nEventually, this `listDtdUris` command should become just a skill or something like that, but given it is a new command agents won\u0027t know about it out of the box, and adding it as an MCP subcommand should make things much more reliable in general.\n\nAlso adds the application name if provided when listing apps, and fixes a bug where _all_ connected apps would be listed under each DTD URI, instead of only the apps relevant to that DTD instance."
    },
    {
      "commit": "e637e7fea4f80142e5a8f023407eec94d7861b62",
      "tree": "8ae88dfd3849a173690769b1b0711912c5f46ca5",
      "parents": [
        "62370cb632d6e5418ed1571969c2d7f3d442567a"
      ],
      "author": {
        "name": "Ortes",
        "email": "malo.allee@gmail.com",
        "time": "Thu Mar 26 11:19:38 2026 -0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 07:19:38 2026 -0700"
      },
      "message": "[dart_mcp_server] flutter_driver: expose set_frame_sync command (#392)\n\nFixes #391.\n\n## Change\n\nUncomment `set_frame_sync` from the `flutter_driver_command` enum in `dtd.dart`. The `enabled` parameter was already present in the schema — this is a one-line change.\n\n## Why\n\nApps with continuous animations (Rive, Lottie, loading spinners) keep `SchedulerBinding.transientCallbackCount \u003e 0` indefinitely, causing `tap`, `waitFor`, and other finder-based commands to always time out. Calling `set_frame_sync` with `enabled: false` disables frame synchronization for the session, unblocking those commands — but it was unreachable through the MCP tool due to the enum restriction."
    },
    {
      "commit": "62370cb632d6e5418ed1571969c2d7f3d442567a",
      "tree": "da03d78139f6725ab15b1ec051a03c302c403ceb",
      "parents": [
        "325fe27f493a64ae82b39ac32a0d2de7354477cd"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Mar 25 13:40:01 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 13:40:01 2026 -0700"
      },
      "message": "enable the set_semantics flutter driver command (#415)\n\nThis enables agents to enable or disable the semantics tree, which can help with finding and selecting certain elements on the page."
    },
    {
      "commit": "325fe27f493a64ae82b39ac32a0d2de7354477cd",
      "tree": "c743cc045b5adaa9fa53bcc14b04f1711ac02851",
      "parents": [
        "326a0a34ffe2c328deabfab136bf856feddf976f"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Mar 25 08:08:54 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 08:08:54 2026 -0700"
      },
      "message": "start analysis server instances lazily, and time them out after 10 mins (#411)\n\nFixes https://github.com/dart-lang/ai/issues/399\n\nRefactors how the analysis server is handled so that you now pass a callback to a `withAnalysisServer` function, which is given a reference to a live analysis server.\n\nThis function tracks the number of callbacks holding on to an analysis server instance. Once there are no callbacks using an analysis server, we start a 10 minute timer to shut it down. This timer is also reset at the top of `withAnalysisServer`."
    },
    {
      "commit": "326a0a34ffe2c328deabfab136bf856feddf976f",
      "tree": "3b7452a9d1544f28ef4a3d9dc9dcf22d06554b46",
      "parents": [
        "8370c7b351424617f695f7ae88e24668feac37d7"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Tue Mar 24 12:35:57 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 12:35:57 2026 -0700"
      },
      "message": "include subcommand name in tool name when present for analytics (#410)\n\nGiven that we have moved more towards meta-tools with subcommands, we are going to lose some of the granularity on our tool call analytics.\n\nThis will restore that by including the subcommand as a part of the `tool` parameter, using `\u003ctool\u003e.\u003csubcommand\u003e` syntax.\n\nThis will make analytics a bit awkward during the transition, but it shouldn\u0027t be too bad.\n\nWe could decide to _just_ use the sub-command name if we wanted to try and keep the analytics consistent."
    },
    {
      "commit": "8370c7b351424617f695f7ae88e24668feac37d7",
      "tree": "13e6ec99345ad8200b7697fda767b211b2dafed2",
      "parents": [
        "67a879eee8abf1ea22dde3bb114009d1721276b8"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Tue Mar 24 10:13:20 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 17:13:20 2026 +0000"
      },
      "message": "change analyze output to be more compact (#409)\n\nFixes https://github.com/dart-lang/ai/issues/371\r\n\r\nThe output is now very similar to `dart analyze`.\r\n\r\nWhen analyzing the Dart SDK, which has 399 diagnostics for my configuration, this reduced the output size from 160KB to 92KB.\r\n\r\nThe old output was just the pure JSON of the diagnostic, and now it looks like this:\r\n\r\n```md\r\n# Diagnostics for root \u003cyour-root-uri\u003e\r\n\r\nwarning • pkg/front_end/test/id_testing/data/directory_testing/pubspec.yaml:1:1 • The \u0027name\u0027 field is required but missing.\r\nTry adding a field named \u0027name\u0027. • missing_name\r\n\r\nwarning • pkg/front_end/test/language_versioning/data/specified_packages_01/pubspec.yaml:1:1 • The \u0027name\u0027 field is required but missing.\r\nTry adding a field named \u0027name\u0027. • missing_name\r\n```\r\n\r\nPaths are relative to each analyzed root instead of encoding the absolute URI in each, and JSON overhead is removed."
    },
    {
      "commit": "67a879eee8abf1ea22dde3bb114009d1721276b8",
      "tree": "fdcca08338fccba706a0a4a035c71b8eb8483321",
      "parents": [
        "ab352a55a1029a7ff5312a1df56cceea98b30e67"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Mar 23 12:28:06 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 12:28:06 2026 -0700"
      },
      "message": "disable launch_app and all related features by default (#408)\n\nAdds the `flutter_app_lifecycle` category to renable these (`--enable flutter_app_lifecycle`).\n\nAlso somewhat fixes the web server device flows - specifically for the AntiGravity use case. You can now use `launch_app` with the `web_server` device and will just get a URL back to load in the browser.  We no longer wait for the DTD or VmService URIs before returning."
    },
    {
      "commit": "ab352a55a1029a7ff5312a1df56cceea98b30e67",
      "tree": "5340a3c5cdb7ea431be1045b3132ac72176e9666",
      "parents": [
        "8536160d78a34f05bf8668424ab8073b895ddbe7"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Mar 23 10:16:08 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 10:16:08 2026 -0700"
      },
      "message": "add tests for getting runtime errors from multiple apps (#406)\n\nCloses https://github.com/dart-lang/ai/issues/404\n\nI opened https://github.com/dart-lang/ai/issues/405 as well though, as we don\u0027t really have tests of the automatic discovery flow."
    },
    {
      "commit": "8536160d78a34f05bf8668424ab8073b895ddbe7",
      "tree": "e18f97d15431542023713e4c03b0cd6ec744332d",
      "parents": [
        "738019b7b31a678fe61eb2af575bc44274d984df"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Fri Mar 20 10:10:38 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 10:10:38 2026 -0700"
      },
      "message": "Enable quick fixes (#400)\n\nCloses https://github.com/dart-lang/ai/issues/398\n\nAdds an `applyFixes` boolean to the analyze files tool. If passed, then all quick fixes will be applied, and analysis will only return the unfixed diagnostics.\n\n## Highlights\n\n- The MCP server now registers the `workspaceEdit` capability, only handling basic changes since we don\u0027t support file versioning.\n- When `autoFix` is passed to `analyze_files`, we first make an LSP call to `dart.edit.fixAllInWorkspace`. This ends up triggering various workspace edits which we handle and apply (if we can).\n- We then wait again for any ongoing analysis to complete.\n- Then, we return any diagnostics that are still present, following the normal logic.\n\n## Analysis Server Interactions\n\nBelow is the full series of events that now happens when we are applying fixes:\n\n- We send the `dart.edit.fixAllInWorkspace` request\n- We get an analysis start notification (it is computing fixes)\n- We get a diagnostics published notification (twice? unclear why twice)\n- We get one or more workspace edit requests\n- We get an analysis end notification\n- We get an analysis start notification (edits have now been applied presumably)\n- We get a new diagnostics published notification (hopefully fewer!)\n- The original sendRequest call completes\n- We wait for analysis done\n- We get the analysis done notification\n- We return only the remaining diagnostics\n\nThe result is that the tool call applies all fixes and only returns the remaining diagnostics"
    },
    {
      "commit": "738019b7b31a678fe61eb2af575bc44274d984df",
      "tree": "33218f5af92bab9be6b40a5b4541309c0ab0e2a7",
      "parents": [
        "8c64b4c74ecd1f8942a42a80f998e3e081173188"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Mar 19 20:59:05 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 13:59:05 2026 -0700"
      },
      "message": "re-enable the pub tool by default (#401)\n\nThis was previously disabled by default along with many other tools, following the general reasoning that anything which can be done on the CLI should be done on the CLI.\n\nWhile this still holds generally true, the problem with this particular case is it can _also_ be done by just directly editing the `pubspec.yaml` file, and agents often use their outdated knowledge to put bad versions in there. You always want them to end up using `dart pub add` because it will put the latest version that can actually be solved for.\n\nUltimately, it is worth having this tool because when present they do tend to actually use it, where they won\u0027t in my experience use `dart pub add` without some other sort of prompt pushing them to do so.\n\nWe could evaluate in the future whether this can/should be replaced by a skill instead, which would likely have fewer up front tokens since the schema for this tool is somewhat lengthy."
    },
    {
      "commit": "8c64b4c74ecd1f8942a42a80f998e3e081173188",
      "tree": "f3b2fb3446a953fd4d5c862021acf2cf45818d69",
      "parents": [
        "237fe55c084e13c603c9970cb458510092e4561e"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Mar 19 20:58:17 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 13:58:17 2026 -0700"
      },
      "message": "update server instructions (#402)\n\nMoves much of what was in instructions to the description, dropped the note about preferring MCP tools, and added some more useful information such as encouraging agents to list resources.\n\nI also added a short description of the `package-root:` uris and associated tools."
    },
    {
      "commit": "237fe55c084e13c603c9970cb458510092e4561e",
      "tree": "1572d5035989e9941eb7e2e0f9f4155de90d97d1",
      "parents": [
        "a619d4bba99e736b0fbabd3e8b94b0538e013f46"
      ],
      "author": {
        "name": "Jaime Wren",
        "email": "jwren@google.com",
        "time": "Thu Mar 19 13:36:52 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 11:36:52 2026 -0700"
      },
      "message": "[dart_mcp_server] Add automatic DTD discovery and app fallback (#393)"
    },
    {
      "commit": "a619d4bba99e736b0fbabd3e8b94b0538e013f46",
      "tree": "9da79db00911b2e74e9e6ba46f6e83a7aa1d5e71",
      "parents": [
        "05f5e5e7173a07576bfd95be5c4f77086d96acf5"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Mar 05 18:18:46 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 05 10:18:46 2026 -0800"
      },
      "message": "disable all CLI tools by default, as well as get_active_location (#382)\n\nCloses https://github.com/dart-lang/ai/issues/372\n\n- Adds a setting for tools to control whether they are enabled by default or not.\n- No longer default to `all` category being enabled, instead use the tool default if we get no other setting. Allows enabling all tools with `--enable all` regardless of defaults.\n- Updates readme script to add the categories and default enabled status to the table for tools.\n- Also deletes the old screenshot tool which has been disabled for quite some time, and had no way of being enabled. This didn\u0027t fit in well with the new model and it was just tech debt anyways."
    },
    {
      "commit": "05f5e5e7173a07576bfd95be5c4f77086d96acf5",
      "tree": "9f10611038efc9a24e1b539c581ca29b6cd180e7",
      "parents": [
        "85201e5900578a7dd05379fc05897679c308e0b0"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Mar 04 20:57:32 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 04 12:57:32 2026 -0800"
      },
      "message": "Merge the LSP tools into a single tool (#380)\n\nCloses #374"
    },
    {
      "commit": "85201e5900578a7dd05379fc05897679c308e0b0",
      "tree": "65acffbb1ad82a44c738172499644b9acc9b1327",
      "parents": [
        "72062173aef97908a7cea05052dc5448c3adbeac"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Mar 04 20:30:45 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 04 20:30:45 2026 +0000"
      },
      "message": "Collapse dtd tools into a single tool (#381)\n\nCloses https://github.com/dart-lang/ai/issues/370\r\n\r\nAlso adds a skill for how to update the README.md, the agent is typically trying to edit it directly but doesn\u0027t get it exactly perfect, and should instead just invoke the tool."
    },
    {
      "commit": "72062173aef97908a7cea05052dc5448c3adbeac",
      "tree": "2f95952d47a2472fd4090bb5e1730441783ed9bf",
      "parents": [
        "f2748d866311b4b84da727e99395a137c3135d7a"
      ],
      "author": {
        "name": "Chase Knowlden",
        "email": "haroldknowlden@gmail.com",
        "time": "Mon Mar 02 17:56:23 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 14:56:23 2026 -0800"
      },
      "message": "feat: Merge widget related MCP tools into a single widget_inspector MCP tool (#377)\n\nMerges the 3 widget related tool calls with a single widget_inspector tool.\nCloses #373\n"
    },
    {
      "commit": "f2748d866311b4b84da727e99395a137c3135d7a",
      "tree": "7e047e9740371de06872a2d8c9f09d3766b01cb2",
      "parents": [
        "1777aaf7cf98448322f336ce9a28e59cb30588cd"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Mar 02 12:44:57 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 12:44:57 2026 -0800"
      },
      "message": "Add metadata to ElicitRequest objects, forward tool call metadata with with the requests. (#369)\n\nAlso prepares to publish dart_mcp version 0.5.0.\n\nSome clients require elicitation requests to be associated with a tool call, and they link it using the ProgressToken."
    },
    {
      "commit": "1777aaf7cf98448322f336ce9a28e59cb30588cd",
      "tree": "8c2cb05d0d35896952df979eb1ab45d938bfdf05",
      "parents": [
        "5a9ffc702d275dccdb40dc796cd402aff8be7cbb"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Mar 02 12:37:13 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 12:37:13 2026 -0800"
      },
      "message": "add ConstSchema type (#378)\n\nThis adds support for creating `{\"const\": someValue}` schema objects ([spec](https://json-schema.org/understanding-json-schema/reference/const)).\n\nThese are useful if you want to create a top level `oneOf` object, for instance for meta tools, where you want a `command` field with custom arguments for each command, and you don\u0027t want to rely on just descriptions of all the possible arguments and which commands they are valid for."
    },
    {
      "commit": "5a9ffc702d275dccdb40dc796cd402aff8be7cbb",
      "tree": "1293d9b5a046644eaaa494dc388295cd37ab1ed4",
      "parents": [
        "07693bcf986872f547aeb6c73555897dfc5c92d4"
      ],
      "author": {
        "name": "Babelon Codes",
        "email": "babelon.codes@gmail.com",
        "time": "Fri Feb 27 22:53:40 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 19:53:40 2026 -0800"
      },
      "message": "fix: canonicalize paths in _analyzeFiles to match diagnostic URIs (#358)\n\nFixes dart-lang/ai#295\n\nThe diagnostic URIs from the LSP server and the URIs built via\n`rootUri.resolve(path)` can differ on systems with symlinks `(e.g.,\nmacOS /var → /private/var)`. This causes the path filter in\n`_analyzeFiles` to match zero entries, returning false \"No errors\".\n\nApply `fileSystem.path.canonicalize()` to both paths before comparison,\nmatching the pattern already used by `isUnderRoot` in `cli_utils.dart`."
    },
    {
      "commit": "07693bcf986872f547aeb6c73555897dfc5c92d4",
      "tree": "3eaefef4c96e2baee2e4a18fbaa61c96f20b2c4d",
      "parents": [
        "4f57be887ead68651ddf0bce87f26444e42763da"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Fri Feb 27 15:28:06 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 23:28:06 2026 +0000"
      },
      "message": "fix version from 2025-11-05 to 2025-11-25 (#366)\n\nFixes https://github.com/dart-lang/ai/issues/365\r\n\r\nI mostly use antigravity which apparently doesn\u0027t require a valid version number to be returned, so I didn\u0027t notice this for a few days. We did just land a new version in the SDK so we might have a few broken dev releases and should get this in as soon as possible."
    },
    {
      "commit": "4f57be887ead68651ddf0bce87f26444e42763da",
      "tree": "278c30a7bee3f8496cdc2ba7dc596533080e377e",
      "parents": [
        "72a825203a41f66f81d78895048fd7ff73281a9f"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Feb 26 11:51:04 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 19:51:04 2026 +0000"
      },
      "message": "add --version flag (#364)\n\nCloses https://github.com/dart-lang/ai/issues/362"
    },
    {
      "commit": "72a825203a41f66f81d78895048fd7ff73281a9f",
      "tree": "6c8347559d36a38237d27ad8fb852238336077d2",
      "parents": [
        "9c8a2f84f678f28720a4be9fc19c83a6bfcc4f11"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Feb 26 07:10:47 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 07:10:47 2026 -0800"
      },
      "message": "Support multiple dtd connections (#359)\n\nFixes https://github.com/dart-lang/ai/issues/317\n\n- Allows multiple DTD connections.\n- Adds a new `list_connected_apps` tool and `disconnect_dart_tooling_daemon` tool.\n- Adds an `appUri` parameter to all tools that use the VM service. It is optional if only one app is connected, but required otherwise.\n- Cleans up the flutter_launcher tools to use constant strings.\n\nThis does mean we now have `list_running_apps` as well as `list_connected_apps`, and there is some overlap. Ultimately I think it is OK though, and did some manual testing to ensure agents could still figure out which tools to use. The \"running\" apps are only those launched with `launch_app`, which we will probably discontinue as a whole in the near future. "
    },
    {
      "commit": "9c8a2f84f678f28720a4be9fc19c83a6bfcc4f11",
      "tree": "0a9aef81907c8314d04447cff83552647f1da954",
      "parents": [
        "44b22f4c5eb149c64938f726ca491b83d92680cd"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Feb 25 13:24:32 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 13:24:32 2026 -0800"
      },
      "message": "use string constants for all map keys in api library (#361)\n\nFollow up to #357"
    },
    {
      "commit": "44b22f4c5eb149c64938f726ca491b83d92680cd",
      "tree": "647987bbf932da11b971c8a018e61f5f295f0de8",
      "parents": [
        "fd7ce1e5b27a85a73af175d85d72f670bc453bac"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Feb 25 08:17:27 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 08:17:27 2026 -0800"
      },
      "message": "Update dart_mcp to spec version 2025-11-25 (#357)\n\n**Note:** This does not implement Task support, which is still experimental. It would be a fair bit of implementation work and should be done in a separate PR if we choose to implement it. But I think we should wait until it is non-experimental anyways.\n\nThis ended up being fairly complex, but it\u0027s not as bad as it looks, as much of the changes are to examples and tests.\n\nSee the CHANGELOG.md for a full description of the changes, some highlights:\n- Adds Icon support\n- Adds support for URL elicitation, including handling `UrlElicitationRequired` errors in tool calls.\n  - Added examples showing all the possible interactions here.\n- There were also some changes to how enums are represented, and multi-select enums are now supported.\n  - Includes validation for these.\n- I added a skill for updating to the latest spec.\n  - Note however that use of this skill MUST be overseen, the LLMs do love to hallucinate spec changes.\n- Adds `ToolChoice` support for sampling"
    },
    {
      "commit": "fd7ce1e5b27a85a73af175d85d72f670bc453bac",
      "tree": "e46dfd682970496a7d545f74cf0b2af1e60c66a2",
      "parents": [
        "ae7b97f73f5e7c8adaa451ad5a2b4454487b10d6"
      ],
      "author": {
        "name": "Daniel Llamas",
        "email": "daniel@soyllamas.com",
        "time": "Thu Feb 19 13:30:26 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 19 11:30:26 2026 -0800"
      },
      "message": "dart_mcp_server: add `args` parameter to `launch_app` tool (#354)\n\nFixes #342\n\n## Summary\n\n- Adds an `args` list parameter to the `launch_app` tool, allowing callers to forward arbitrary extra flags to `flutter run` (e.g. `--flavor dev`, `--dart-define-from-file env.json`, `--release`).\n- Managed flags (`--print-dtd`, `--machine`, `--device-id`, `--target`, `-d`, `-t`) are explicitly blocked with a clear error message — both in exact form and equals-syntax (e.g. `--target\u003dlib/main.dart`).\n- Updated CHANGELOG and GEMINI.md.\n\n## Test plan\n\n- [ ] `launch_app forwards additional args to flutter run` — verifies args are appended to the command\n- [ ] `launch_app works when args is an empty list` — verifies no regression on omitted/empty args\n- [ ] `launch_app forwards flavor args` — verifies `--flavor` works end-to-end\n- [ ] `launch_app rejects managed args in args list` — verifies `--device-id` in `args` returns `isError: true`\n- [ ] `launch_app rejects managed args with equals syntax` — verifies `--target\u003dlib/alt_main.dart` is also caught\n\nAll 14 tests in `flutter_launcher_test.dart` pass. Run with:\n```\ncd pkgs/dart_mcp_server \u0026\u0026 dart test test/tools/flutter_launcher_test.dart\n```"
    },
    {
      "commit": "ae7b97f73f5e7c8adaa451ad5a2b4454487b10d6",
      "tree": "9a6444bfa0c2b664074ea5f5e7489dbf2fe63b6e",
      "parents": [
        "4e05df1bb7aefbb9d1b465d1d516e81115cc249e"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Feb 18 09:41:18 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 18 09:41:18 2026 -0800"
      },
      "message": "Enable rip_grep_packages and read_package_uris to read files outside `lib/` (#349)\n\nCloses https://github.com/dart-lang/ai/issues/347\n\nAdds a new concept of a `package-root:` URI scheme which works like package URIs except it is anchored at the package root.\n\n- Adds support for these URIs to `read_package_uris`.\n- Adds a `searchDir` parameter to the `rip_grep_packages` tool, which defaults to `lib`, but can be set to anything.\n- Updates `rip_grep_packages` to use `package-root:` URIs for returned results for files outside of the package URI root of packages. These URIs can be forwarded directly to `read_package_uris`.\n- Updates the `read_package_uris` tool to stop using resource links and embedded resources since the client support for these is limited (seems to confuse antigravity specifically). Regular content results are more reliable even if potentially less efficient.  \n- Adds a skill to this repo for creating new MCP features. This skill was used and refined during development of this feature."
    },
    {
      "commit": "4e05df1bb7aefbb9d1b465d1d516e81115cc249e",
      "tree": "07f065baec642d633aaa72ac13a7aeabdfe71820",
      "parents": [
        "cbfab0f1e7c0e1fe57fba3c5fcea7f71b93b0447"
      ],
      "author": {
        "name": "Igor Liška",
        "email": "1747133+Igi4@users.noreply.github.com",
        "time": "Tue Feb 17 07:44:58 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 16 22:44:58 2026 -0800"
      },
      "message": "Fix nested finder JSON serialization for flutter_driver (#350)\n\nFixes https://github.com/dart-lang/ai/issues/345.\n  \nThe `flutter_driver` tool passes `of` and `matching` parameters as raw Maps to `callServiceExtension`, which calls `.toString()` on them, producing Dart map notation instead of valid JSON. This causes a `FormatException` in the flutter_driver extension\u0027s `jsonDecode()`.\n\nAdds `jsonEncode` for `of`/`matching` before `callServiceExtension`, matching how `Descendant.serialize()`/`Ancestor.serialize()` work in `package:flutter_driver`."
    },
    {
      "commit": "cbfab0f1e7c0e1fe57fba3c5fcea7f71b93b0447",
      "tree": "93701614d076fe4c77f27743b2c973f9653d30d3",
      "parents": [
        "0821f9ce691d7f171486b54d9980b55c1ed597f8"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Feb 09 14:37:23 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 09 14:37:23 2026 -0800"
      },
      "message": "Add categories to all tools and prompts (#346)\n\n**Note**: Most of the changed lines here are just reformatted tool descriptions and added categories. The use of cascades caused a lot of formatting churn. It isn\u0027t as scary as it appears I promise :D\n\nThis is intended to align with future support for MCP [groups](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/1567), if that does end up landing.\n\nThe high level design is as follows:\n\n- Categories are nested but can only have a single parent category.\n- Features (tools, prompts) can have multiple categories.\n- Two new multi-options have been added, `--enable` and `--disable`. These replace the old `--tools` and `--exclude-tool` flags, but you can still use those they are just deprecated.\n  - You can pass either a tool/prompt name or category name.\n  - When conflicting configurations arise, we use the following precedence rules:\n    - Explicit feature names have the highest precedence.\n    - Disabling has higher precedence than enabling.\n    - More specific categories have higher precedence, measured by their depth (# of parent categories).\n    - As a tie breaker, we use the index of the category as it was assigned on the feature itself (earlier in the list is higher precedence). \n- There is a single top level category \"all\" which is always enabled by default. You can disable this if you want to use an allow-list model for features. \n\nThis allows you to for instance disable a higher level category like \"flutter\", but enable specific categories under that like \"flutterDriver\".\n\ncc @DanTup as I believe that DartCode uses `--tools`. This won\u0027t break any time soon though (or possibly ever)."
    },
    {
      "commit": "0821f9ce691d7f171486b54d9980b55c1ed597f8",
      "tree": "5fd72ac173f34d27599b1d554b31b56f6973a818",
      "parents": [
        "55fad05a1275b540e312cc77e38622db7a78449b"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Feb 02 12:27:32 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 02 20:27:32 2026 +0000"
      },
      "message": "fix new lints (#344)\n\n"
    },
    {
      "commit": "55fad05a1275b540e312cc77e38622db7a78449b",
      "tree": "451f2ed53f0b93bb78986273f1c950e220f5dc10",
      "parents": [
        "b1d172a29928160a07baee5547e1472b00ce1af3"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Feb 02 07:54:54 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 02 07:54:54 2026 -0800"
      },
      "message": "Bump the github-actions group with 2 updates (#343)\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "b1d172a29928160a07baee5547e1472b00ce1af3",
      "tree": "24646bd1a492fbfbfee433a7d7c59a7ef073a1c6",
      "parents": [
        "3dcae0e7bc92b03a900500e8f04a81fa7708164a"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Jan 29 08:17:32 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 08:17:32 2026 -0800"
      },
      "message": "Add more reasons to tool call failures (#341)\n\nMost of our tools call failures today have no reason associated with them, this is an effort to fix that:\n\n- Did an audit of all tool call failures and attached reasons to each.\n- Added a reason for failed argument validation against the schema.\n- [cleanup] Moved a bunch of analytics tests into their own test file and out of the server test (this should have happened earlier when that mixin was created).\n  - Moved `initialize` event to this mixin as well.\n- [cleanup] removed duplicate argument validation in the pub_dev_search tool"
    },
    {
      "commit": "3dcae0e7bc92b03a900500e8f04a81fa7708164a",
      "tree": "452c9fa34a92091296fa19141eadb345fb4367ad",
      "parents": [
        "74d957875942225f5620743a56367ad2c08ee484"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Jan 28 13:33:39 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 28 13:33:39 2026 -0800"
      },
      "message": "add reason to launch_app failures, refactor tests (#340)\n\nWe are seeing a large number of failures for `launch_app`, but we don\u0027t log a reason for them. This is in an effort to help diagnose those issues.\n\n- Creates two specialized cases that we track-  timeout exceptions and process exceptions, which are likely causes of these failures.\n- Adds a timeout parameter to the method, agents can select a longer timeout if they want to try again.\n- Heavily refactors tests to use the shared test harness, remove duplication, and remove usages of fake_async."
    },
    {
      "commit": "74d957875942225f5620743a56367ad2c08ee484",
      "tree": "a32fdf724b4be219095b7ea7ec1f574ae08961c1",
      "parents": [
        "25a627892f5f398dabf78b91d20ac151f7be2b05"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Tue Jan 27 13:29:26 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 27 13:29:26 2026 -0800"
      },
      "message": "make some ResourceLink properties nullable (description/mimeType) (#337)\n\nThis brings us in line with the spec, these always should have been nullable.\n\nIt is breaking due to the getters becoming nullable. "
    },
    {
      "commit": "25a627892f5f398dabf78b91d20ac151f7be2b05",
      "tree": "800444ee22a0268fa0e144997c6bf45f2c888a30",
      "parents": [
        "372fba1a313628e3d8d4fa646e3385aa86b1626c"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Jan 21 13:35:48 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 21 13:35:48 2026 -0800"
      },
      "message": "Add tool for running ripgrep on package dependencies. (#338)\n\n[RipGrep](https://github.com/BurntSushi/ripgrep) is very fast and commonly used tool, used by Gemini CLI and VsCode for example to power their workspace search  functionality. Note that we could just use `grep` on Linux, but there isn\u0027t an obvious windows replacement, it is slower, and it would likely confuse the agent if we use platform specific tools as well as make it harder for us to handle the output of different tools (we want to replace output paths with package uris).\n\nThe approach here is to expose a pretty raw tool allowing for any arguments to be passed to ripgrep, the only ones we supply are two trailing arguments, the path separator to use for output (\"/\") and the path to search (the lib root of the package). This allows agents a lot of flexibility in how they use ripgrep (how many context lines to include etc).\n\nIf ripgrep is not available, we will use elicitation to ask for permission to install it, and download our own copy from Microsoft\u0027s repo (where Gemini CLI gets it from, a bit more trusted) if the install is approved. Otherwise, we will return an error asking the user to install ripgrep. Today, elicitation support is somewhat lacking, especially in Google products, but we hope to improve this in the future. This can also serve as a good use case for those products as to why we want elicitation support. Currently it is supported by Cursor, Codex, and Copilot among others.\n\nIn the output, we replace all occurrences of the package uri root with `package:\u003cpackage-name\u003e` as well."
    },
    {
      "commit": "372fba1a313628e3d8d4fa646e3385aa86b1626c",
      "tree": "bcd27441755aba6430c7ae7bedad9af549798b3d",
      "parents": [
        "a3a196bf4773c7a7a9f93b6798232fb0d8220bc3"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Tue Jan 13 10:14:02 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 13 10:14:02 2026 -0800"
      },
      "message": "Add analytics events for initialization and list* method calls (#332)\n\nInitially this started as a desire to get metrics for how many clients ever even do the initialization handshake with the MCP server, but I did end up also adding metrics for all the `list*` methods, which will help us understand better if clients support features like prompts and resources (which we can infer from their usage of these methods).\n\nOverall here the goal is to try and understand how many users are setting up the MCP server but never interacting with it - as well as get a better idea of real support for various features from various real world clients.\n\n**dart_mcp changes:**\n\nExposes various private methods as public methods so that calls can be intercepted, but adds `@mustCallSuper` to these as they are not intended to be completely overridden, it just provides a hook to do additional logic.\n\nAlso prepares to publish dart_mcp version 0.4.1 with those changes."
    },
    {
      "commit": "a3a196bf4773c7a7a9f93b6798232fb0d8220bc3",
      "tree": "d553b1ba9a2f3dc1dcf55b9e7a593268de8924d9",
      "parents": [
        "12beb9abb17fa163ad01b10382cd74ea03724bbe"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Fri Jan 02 13:28:23 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 02 21:28:23 2026 +0000"
      },
      "message": "fix the timeout parameter for flutter_driver to be of type String (#331)\n\nFixes https://github.com/dart-lang/ai/issues/330"
    },
    {
      "commit": "12beb9abb17fa163ad01b10382cd74ea03724bbe",
      "tree": "67ccb71c29c9593e87e05919c429b88a93cba694",
      "parents": [
        "8488dea7eaed68bc425105418528bd71b391757b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jan 02 09:08:01 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 02 09:08:01 2026 -0800"
      },
      "message": "Bump the github-actions group with 2 updates (#329)\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "8488dea7eaed68bc425105418528bd71b391757b",
      "tree": "06b1f513a35825cad1f3d345fd9730a3b6325921",
      "parents": [
        "c5ee303660a1e14d31a2dfd523df2cb59d939290"
      ],
      "author": {
        "name": "Elliott Brooks",
        "email": "21270878+elliette@users.noreply.github.com",
        "time": "Wed Dec 10 09:10:28 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 10 09:10:28 2025 -0800"
      },
      "message": "Register `samplingRequest` with a unique service name (#328)\n\n"
    },
    {
      "commit": "c5ee303660a1e14d31a2dfd523df2cb59d939290",
      "tree": "ddf4f1f63c0ae7275c6279237944b071a0611db5",
      "parents": [
        "4e5f447e296767386fce4189a2a2b17dbe5851d5"
      ],
      "author": {
        "name": "Elliott Brooks",
        "email": "21270878+elliette@users.noreply.github.com",
        "time": "Fri Dec 05 16:57:26 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 05 16:57:26 2025 -0800"
      },
      "message": "Add service extension for sending a sampling request to the MCP server (#325)\n\n"
    },
    {
      "commit": "4e5f447e296767386fce4189a2a2b17dbe5851d5",
      "tree": "bd661200cf03ff203cf34541d560a705d51c8191",
      "parents": [
        "4eb2446144a8af374e08da8d3c743dcce129f87f"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Dec 01 09:36:22 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 01 17:36:22 2025 +0000"
      },
      "message": "make invalid roots test less flaky (#324)\n\nThis test is currently red on head and I saw some flakes on a recent dependabot PR as well on windows.\r\n\r\nAdds some extra retry logic to allow for the new root notification to propagate more slowly."
    },
    {
      "commit": "4eb2446144a8af374e08da8d3c743dcce129f87f",
      "tree": "f848f8e9abe91b71fa478b97bf795865fbcfe7f1",
      "parents": [
        "1f08fe969b1b584eed9a42b864689772eaef4ec1"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Dec 01 08:48:44 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 01 08:48:44 2025 -0800"
      },
      "message": "Bump actions/checkout from 5.0.0 to 6.0.0 in the github-actions group (#323)\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "1f08fe969b1b584eed9a42b864689772eaef4ec1",
      "tree": "6f7e4de273762888cea0bbaa5bc5f22f132fe8f6",
      "parents": [
        "058f8f571b0ab74784d218d43de23d95803e2877"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Fri Nov 21 12:45:08 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 21 12:45:08 2025 -0800"
      },
      "message": "add \u0027additionalProperties: false\u0027 to most schemas (#321)\n\n"
    },
    {
      "commit": "058f8f571b0ab74784d218d43de23d95803e2877",
      "tree": "3c35961c328b328f51ecfcc1b0576e64598eb9c2",
      "parents": [
        "c1f1656c436c69b10c63e929d68938fbd22c0342"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Nov 13 14:54:18 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 13 22:54:18 2025 +0000"
      },
      "message": "Adds a tool for reading package uris (#318)\n\nCloses https://github.com/dart-lang/sdk/issues/61080\r\n\r\nThis allows reading directories or files all with the same tool, which I think is generally fine and fewer tools is better.\r\n\r\nResults are returned as resource links or embedded resources.\r\n\r\nI also ended up fixing a few bugs with embedded resources.\r\n\r\ncc @gaaclarke"
    },
    {
      "commit": "c1f1656c436c69b10c63e929d68938fbd22c0342",
      "tree": "66ca111baa3f3c20778ccdde87f1907f5693011d",
      "parents": [
        "71a0b0075c7ba36926d0ab59e160917eef135cfc"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Nov 12 11:01:18 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 12 11:01:18 2025 -0800"
      },
      "message": "fix analyze command roots validation (#315)\n\nFixes https://github.com/dart-lang/ai/issues/282\n\nPreviously we were doing a non-null assertion on the wrong variable 🤦‍♂️ . This is now tested as well."
    },
    {
      "commit": "71a0b0075c7ba36926d0ab59e160917eef135cfc",
      "tree": "99e7089c42bb3e275e17b492a970220fb4cc827e",
      "parents": [
        "2c1b3523b8e688453a63356ed2fea2505dcf6add"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Nov 12 10:37:40 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 12 10:37:40 2025 -0800"
      },
      "message": "detect VM service connections and return a nicer error (#316)\n\nCloses https://github.com/dart-lang/ai/issues/256\n\nDetect VM Service connections by calling `getVM` - if that _succeeds_ then we return a better error instead of the misleading error about needing a newer SDK.\n\nIf it failes with a method not found exception, we continue."
    },
    {
      "commit": "2c1b3523b8e688453a63356ed2fea2505dcf6add",
      "tree": "8297ed62370b53efd959a5c9010fc2d9a55fd819",
      "parents": [
        "e8c89a4dcaca439f8ba09b455f02271bb041842b"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Nov 12 10:07:04 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 12 18:07:04 2025 +0000"
      },
      "message": "add retry logic to the analyze test (#313)\n\nI have been noticing a bunch of flakes on this test due to a race condition of the analyzer picking up the new files and us asking for errors.\r\n\r\nThis allows us to retry with a back off until we see the error show up, allowing the test to pass quickly after the error does appear."
    },
    {
      "commit": "e8c89a4dcaca439f8ba09b455f02271bb041842b",
      "tree": "e83b8841a78ed08c6858e2d72194764c64b7c0c3",
      "parents": [
        "f870fecf651de39e32df4d2c94ac438f02bf8fc4"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Nov 12 09:51:22 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 12 17:51:22 2025 +0000"
      },
      "message": "release version 0.4.0 of dart_mcp (#312)\n\n"
    },
    {
      "commit": "f870fecf651de39e32df4d2c94ac438f02bf8fc4",
      "tree": "1effbdb239a2def8a891fd34e5feffa7c8223f72",
      "parents": [
        "9c49326da9d60c54aa89227d396075481c9251be"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Tue Nov 11 13:39:02 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 11 13:39:02 2025 -0800"
      },
      "message": "remove local.properties file from the checkout (#314)\n\n"
    },
    {
      "commit": "9c49326da9d60c54aa89227d396075481c9251be",
      "tree": "1e496351fa06c15030fe9be07018de138ff664e6",
      "parents": [
        "2c2e2c5b14ba27c938a5b34210ef66efae3e98d9"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Tue Nov 11 11:29:46 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 11 11:29:46 2025 -0800"
      },
      "message": "Make parameters nullable, if nullable in the spec. (#311)\n\nFixes https://github.com/dart-lang/ai/issues/310.\n\nThese were actually causing runtime cast failures, as the `null` params object would be cast to a `Map\u003cString, Object?\u003e`.\n\nThis includes generally supporting notifications with no parameters, of which there are several."
    },
    {
      "commit": "2c2e2c5b14ba27c938a5b34210ef66efae3e98d9",
      "tree": "eded26740298735cced625b30626591a7edb589b",
      "parents": [
        "af7881dbb116a6b7e4fe8053f417c2c454a59250"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Nov 10 13:38:30 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 10 13:38:30 2025 -0800"
      },
      "message": "Include name, ID, and target platform in list devices output (#309)\n\nFixes #305"
    },
    {
      "commit": "af7881dbb116a6b7e4fe8053f417c2c454a59250",
      "tree": "2dd955119ab87a4e3dfb7cf0733732fca948abbf",
      "parents": [
        "0a85ddf4f75cee6e3abe07cecdffae69bbdbc793"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Nov 10 13:13:18 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 10 13:13:18 2025 -0800"
      },
      "message": "Add a `--tools\u003ddart|all` flag (#308)\n\nCloses https://github.com/dart-lang/ai/issues/307\n\nThis allows the list of tools to be trimmed for vanilla Dart projects.\n\nWe likely also want to later add an `auto` option based on project discovery but this is a good stopgap."
    },
    {
      "commit": "0a85ddf4f75cee6e3abe07cecdffae69bbdbc793",
      "tree": "a6193201b16698ab821f97d442763861af9a43b7",
      "parents": [
        "a29274bb2f8a48434f6d9b44d29ee3bbabf669ba"
      ],
      "author": {
        "name": "Greg Spencer",
        "email": "gspencergoog@users.noreply.github.com",
        "time": "Tue Oct 21 13:10:39 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 21 13:10:39 2025 -0700"
      },
      "message": "Parse output from flutter run with --machine (#301)\n\n"
    },
    {
      "commit": "a29274bb2f8a48434f6d9b44d29ee3bbabf669ba",
      "tree": "fd29d26ddce17737de33e3b890fb26e638694726",
      "parents": [
        "d33ed02f88df376bab1ab8e406cbe0c86c60941f"
      ],
      "author": {
        "name": "Greg Spencer",
        "email": "gspencergoog@users.noreply.github.com",
        "time": "Thu Oct 09 14:57:34 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 09 14:57:34 2025 -0700"
      },
      "message": "Provide output logs when the process launch fails. (#293)\n\n"
    },
    {
      "commit": "d33ed02f88df376bab1ab8e406cbe0c86c60941f",
      "tree": "0f04feabe036bae00d9982824fd4a8df83e22c16",
      "parents": [
        "59db320ee39a1ae5f6e2830be851e52bb7263ce1"
      ],
      "author": {
        "name": "Greg Spencer",
        "email": "gspencergoog@users.noreply.github.com",
        "time": "Tue Oct 07 16:03:04 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 07 16:03:04 2025 -0700"
      },
      "message": "[Feat] Add hot restart tool (#297)\n\n"
    },
    {
      "commit": "59db320ee39a1ae5f6e2830be851e52bb7263ce1",
      "tree": "1a95341653cac808b276bb0e1ec51bce4ba58e02",
      "parents": [
        "e285b26436267571068106d6026535c4d93202f5"
      ],
      "author": {
        "name": "Greg Spencer",
        "email": "gspencergoog@users.noreply.github.com",
        "time": "Mon Oct 06 14:50:04 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 06 14:50:04 2025 -0700"
      },
      "message": "Add the Flutter launcher tools (#292)\n\n"
    },
    {
      "commit": "e285b26436267571068106d6026535c4d93202f5",
      "tree": "be6f01993e74ae59f364dff1c32527376dfa63d9",
      "parents": [
        "ec5d6aa38c8a6a9e687cc5223e2592ac91f2d5fe"
      ],
      "author": {
        "name": "Greg Spencer",
        "email": "gspencergoog@users.noreply.github.com",
        "time": "Mon Oct 06 13:31:14 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 06 13:31:14 2025 -0700"
      },
      "message": "Fix hot reload subscription problem (#291)\n\n"
    },
    {
      "commit": "ec5d6aa38c8a6a9e687cc5223e2592ac91f2d5fe",
      "tree": "9d17f6be32768241a06a2c04161c1254ef187051",
      "parents": [
        "901e2cea44bde868061cae58269cf8cc583a8a78"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Oct 01 15:48:20 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 01 15:48:20 2025 +0000"
      },
      "message": "Bump the github-actions group with 2 updates (#288)\n\nBumps the github-actions group with 2 updates: [actions/cache](https://github.com/actions/cache) and [actions/labeler](https://github.com/actions/labeler).\n\nUpdates `actions/cache` from 4.2.4 to 4.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/cache/releases\"\u003eactions/cache\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd note on runner versions by \u003ca href\u003d\"https://github.com/GhadimiR\"\u003e\u003ccode\u003e@​GhadimiR\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/cache/pull/1642\"\u003eactions/cache#1642\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare \u003ccode\u003ev4.3.0\u003c/code\u003e release by \u003ca href\u003d\"https://github.com/Link\"\u003e\u003ccode\u003e@​Link\u003c/code\u003e\u003c/a\u003e- in \u003ca href\u003d\"https://redirect.github.com/actions/cache/pull/1655\"\u003eactions/cache#1655\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/GhadimiR\"\u003e\u003ccode\u003e@​GhadimiR\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/actions/cache/pull/1642\"\u003eactions/cache#1642\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/actions/cache/compare/v4...v4.3.0\"\u003ehttps://github.com/actions/cache/compare/v4...v4.3.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/cache/blob/main/RELEASES.md\"\u003eactions/cache\u0027s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eReleases\u003c/h1\u003e\n\u003ch3\u003e4.3.0\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to \u003ca href\u003d\"https://redirect.github.com/actions/toolkit/pull/2132\"\u003ev4.1.0\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e4.2.4\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v4.0.5\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e4.2.3\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v4.0.3 (obfuscates SAS token in debug logs for cache entries)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e4.2.2\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v4.0.2\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e4.2.1\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v4.0.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e4.2.0\u003c/h3\u003e\n\u003cp\u003eTLDR; The cache backend service has been rewritten from the ground up for improved performance and reliability. \u003ca href\u003d\"https://github.com/actions/cache\"\u003eactions/cache\u003c/a\u003e now integrates with the new cache service (v2) APIs.\u003c/p\u003e\n\u003cp\u003eThe new service will gradually roll out as of \u003cstrong\u003eFebruary 1st, 2025\u003c/strong\u003e. The legacy service will also be sunset on the same date. Changes in these release are \u003cstrong\u003efully backward compatible\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eWe are deprecating some versions of this action\u003c/strong\u003e. We recommend upgrading to version \u003ccode\u003ev4\u003c/code\u003e or \u003ccode\u003ev3\u003c/code\u003e as soon as possible before \u003cstrong\u003eFebruary 1st, 2025.\u003c/strong\u003e (Upgrade instructions below).\u003c/p\u003e\n\u003cp\u003eIf you are using pinned SHAs, please use the SHAs of versions \u003ccode\u003ev4.2.0\u003c/code\u003e or \u003ccode\u003ev3.4.0\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eIf you do not upgrade, all workflow runs using any of the deprecated \u003ca href\u003d\"https://github.com/actions/cache\"\u003eactions/cache\u003c/a\u003e will fail.\u003c/p\u003e\n\u003cp\u003eUpgrading to the recommended versions will not break your workflows.\u003c/p\u003e\n\u003ch3\u003e4.1.2\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd GitHub Enterprise Cloud instances hostname filters to inform API endpoint choices - \u003ca href\u003d\"https://redirect.github.com/actions/cache/pull/1474\"\u003e#1474\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSecurity fix: Bump braces from 3.0.2 to 3.0.3 - \u003ca href\u003d\"https://redirect.github.com/actions/cache/pull/1475\"\u003e#1475\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e4.1.1\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestore original behavior of \u003ccode\u003ecache-hit\u003c/code\u003e output - \u003ca href\u003d\"https://redirect.github.com/actions/cache/pull/1467\"\u003e#1467\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e4.1.0\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnsure \u003ccode\u003ecache-hit\u003c/code\u003e output is set when a cache is missed - \u003ca href\u003d\"https://redirect.github.com/actions/cache/pull/1404\"\u003e#1404\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecate \u003ccode\u003esave-always\u003c/code\u003e input - \u003ca href\u003d\"https://redirect.github.com/actions/cache/pull/1452\"\u003e#1452\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/cache/commit/0057852bfaa89a56745cba8c7296529d2fc39830\"\u003e\u003ccode\u003e0057852\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href\u003d\"https://redirect.github.com/actions/cache/issues/1655\"\u003e#1655\u003c/a\u003e from actions/Link-/prepare-4.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/cache/commit/4f5ea67f1cc87b2d4239690fa12a12fc32096d68\"\u003e\u003ccode\u003e4f5ea67\u003c/code\u003e\u003c/a\u003e Update licensed cache\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/cache/commit/9fcad95d03062fb8399cdbd79ae6041c7692b6c8\"\u003e\u003ccode\u003e9fcad95\u003c/code\u003e\u003c/a\u003e Upgrade actions/cache to 4.1.0 and prepare 4.3.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/cache/commit/638ed79f9dc94c1de1baef91bcab5edaa19451f4\"\u003e\u003ccode\u003e638ed79\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href\u003d\"https://redirect.github.com/actions/cache/issues/1642\"\u003e#1642\u003c/a\u003e from actions/GhadimiR-patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/cache/commit/3862dccb1765f1ff6e623be1f4fd3a5b47a30d27\"\u003e\u003ccode\u003e3862dcc\u003c/code\u003e\u003c/a\u003e Add note on runner versions\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href\u003d\"https://github.com/actions/cache/compare/0400d5f644dc74513175e3cd8d07132dd4860809...0057852bfaa89a56745cba8c7296529d2fc39830\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `actions/labeler` from 5.0.0 to 6.0.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href\u003d\"https://github.com/actions/labeler/releases\"\u003eactions/labeler\u0027s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade publish-action from 0.2.2 to 0.4.0 by \u003ca href\u003d\"https://github.com/aparnajyothi-y\"\u003e\u003ccode\u003e@​aparnajyothi-y\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/901\"\u003eactions/labeler#901\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/aparnajyothi-y\"\u003e\u003ccode\u003e@​aparnajyothi-y\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/901\"\u003eactions/labeler#901\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href\u003d\"https://github.com/actions/labeler/compare/v6.0.0...v6.0.1\"\u003ehttps://github.com/actions/labeler/compare/v6.0.0...v6.0.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd workflow file for publishing releases to immutable action package by \u003ca href\u003d\"https://github.com/jcambass\"\u003e\u003ccode\u003e@​jcambass\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/802\"\u003eactions/labeler#802\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade Node.js version to 24 in action and dependencies \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/891\"\u003eactions/labeler#891\u003c/a\u003e\nMake sure your runner is on version v2.327.1 or later to ensure compatibility with this release. \u003ca href\u003d\"https://github.com/actions/runner/releases/tag/v2.327.1\"\u003eRelease Notes\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependency Upgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade eslint-config-prettier from 9.0.0 to 9.1.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/711\"\u003eactions/labeler#711\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade eslint from 8.52.0 to 8.55.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/720\"\u003eactions/labeler#720\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​types/jest\u003c/code\u003e from 29.5.6 to 29.5.11 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/719\"\u003eactions/labeler#719\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​types/js-yaml\u003c/code\u003e from 4.0.8 to 4.0.9 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/718\"\u003eactions/labeler#718\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​typescript-eslint/parser\u003c/code\u003e from 6.9.0 to 6.14.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/717\"\u003eactions/labeler#717\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade prettier from 3.0.3 to 3.1.1 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/726\"\u003eactions/labeler#726\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade eslint from 8.55.0 to 8.56.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/725\"\u003eactions/labeler#725\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​typescript-eslint/parser\u003c/code\u003e from 6.14.0 to 6.19.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/745\"\u003eactions/labeler#745\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade eslint-plugin-jest from 27.4.3 to 27.6.3 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/744\"\u003eactions/labeler#744\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​typescript-eslint/eslint-plugin\u003c/code\u003e from 6.9.0 to 6.20.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/750\"\u003eactions/labeler#750\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade prettier from 3.1.1 to 3.2.5 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/752\"\u003eactions/labeler#752\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade undici from 5.26.5 to 5.28.3 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/757\"\u003eactions/labeler#757\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade braces from 3.0.2 to 3.0.3 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/789\"\u003eactions/labeler#789\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade minimatch from 9.0.3 to 10.0.1 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/805\"\u003eactions/labeler#805\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​actions/core\u003c/code\u003e from 1.10.1 to 1.11.1 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/811\"\u003eactions/labeler#811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade typescript from 5.4.3 to 5.7.2 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/819\"\u003eactions/labeler#819\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​typescript-eslint/parser\u003c/code\u003e from 7.3.1 to 8.17.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/824\"\u003eactions/labeler#824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade prettier from 3.2.5 to 3.4.2 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/825\"\u003eactions/labeler#825\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​types/jest\u003c/code\u003e from 29.5.12 to 29.5.14 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/827\"\u003eactions/labeler#827\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade eslint-plugin-jest from 27.9.0 to 28.9.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/832\"\u003eactions/labeler#832\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade ts-jest from 29.1.2 to 29.2.5 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/831\"\u003eactions/labeler#831\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​vercel/ncc\u003c/code\u003e from 0.38.1 to 0.38.3 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/830\"\u003eactions/labeler#830\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade typescript from 5.7.2 to 5.7.3 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/835\"\u003eactions/labeler#835\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade eslint-plugin-jest from 28.9.0 to 28.11.0 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/839\"\u003eactions/labeler#839\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade undici from 5.28.4 to 5.28.5 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/842\"\u003eactions/labeler#842\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​octokit/request-error\u003c/code\u003e from 5.0.1 to 5.1.1 by \u003ca href\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/846\"\u003eactions/labeler#846\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd note regarding \u003ccode\u003epull_request_target\u003c/code\u003e to README.md by \u003ca href\u003d\"https://github.com/silverwind\"\u003e\u003ccode\u003e@​silverwind\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/669\"\u003eactions/labeler#669\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate readme with additional examples and important note about \u003ccode\u003epull_request_target\u003c/code\u003e event by \u003ca href\u003d\"https://github.com/IvanZosimov\"\u003e\u003ccode\u003e@​IvanZosimov\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/721\"\u003eactions/labeler#721\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument update - permission section  by \u003ca href\u003d\"https://github.com/harithavattikuti\"\u003e\u003ccode\u003e@​harithavattikuti\u003c/code\u003e\u003c/a\u003e in \u003ca href\u003d\"https://redirect.github.com/actions/labeler/pull/840\"\u003eactions/labeler#840\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/labeler/commit/634933edcd8ababfe52f92936142cc22ac488b1b\"\u003e\u003ccode\u003e634933e\u003c/code\u003e\u003c/a\u003e publish-action upgrade to 0.4.0 from 0.2.2 (\u003ca href\u003d\"https://redirect.github.com/actions/labeler/issues/901\"\u003e#901\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/labeler/commit/f1a63e87db0c6baf19c5713083f8d00d789ca184\"\u003e\u003ccode\u003ef1a63e8\u003c/code\u003e\u003c/a\u003e Update Node.js version to 24 in action and dependencies (\u003ca href\u003d\"https://redirect.github.com/actions/labeler/issues/891\"\u003e#891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/labeler/commit/b0a1180683c9f17424de4d71c044bea4c7b9bc7c\"\u003e\u003ccode\u003eb0a1180\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003e@​octokit/request-error\u003c/code\u003e from 5.0.1 to 5.1.1 (\u003ca href\u003d\"https://redirect.github.com/actions/labeler/issues/846\"\u003e#846\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/labeler/commit/110d44140c9195b853f2f24044bbfed8f4968efb\"\u003e\u003ccode\u003e110d441\u003c/code\u003e\u003c/a\u003e Update README.md (\u003ca href\u003d\"https://redirect.github.com/actions/labeler/issues/871\"\u003e#871\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/labeler/commit/bee50fefe18762fad67754b2f3bfff2c8082ebb8\"\u003e\u003ccode\u003ebee50fe\u003c/code\u003e\u003c/a\u003e Bump undici from 5.28.4 to 5.28.5 (\u003ca href\u003d\"https://redirect.github.com/actions/labeler/issues/842\"\u003e#842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/labeler/commit/6463cdb00ee92c05bec55dffc4e1fce250301945\"\u003e\u003ccode\u003e6463cdb\u003c/code\u003e\u003c/a\u003e Bump eslint-plugin-jest from 28.9.0 to 28.11.0 (\u003ca href\u003d\"https://redirect.github.com/actions/labeler/issues/839\"\u003e#839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/labeler/commit/c209686724ee12fcc5e6294d1d569b91f86fa691\"\u003e\u003ccode\u003ec209686\u003c/code\u003e\u003c/a\u003e Bump typescript from 5.7.2 to 5.7.3 (\u003ca href\u003d\"https://redirect.github.com/actions/labeler/issues/835\"\u003e#835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/labeler/commit/5184940b544b0096088a7b42d1b8a551003d9eb1\"\u003e\u003ccode\u003e5184940\u003c/code\u003e\u003c/a\u003e Bump \u003ccode\u003e@​vercel/ncc\u003c/code\u003e from 0.38.1 to 0.38.3 (\u003ca href\u003d\"https://redirect.github.com/actions/labeler/issues/830\"\u003e#830\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/labeler/commit/3629d5568b59204f18786372f6d740d649719488\"\u003e\u003ccode\u003e3629d55\u003c/code\u003e\u003c/a\u003e Document update - permission section  (\u003ca href\u003d\"https://redirect.github.com/actions/labeler/issues/840\"\u003e#840\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/actions/labeler/commit/d24f7f3731b2a06433c0bccc364d560c5329c48f\"\u003e\u003ccode\u003ed24f7f3\u003c/code\u003e\u003c/a\u003e Bump ts-jest from 29.1.2 to 29.2.5 (\u003ca href\u003d\"https://redirect.github.com/actions/labeler/issues/831\"\u003e#831\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href\u003d\"https://github.com/actions/labeler/compare/8558fd74291d67161a8a78ce36a881fa63b766a9...634933edcd8ababfe52f92936142cc22ac488b1b\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s major version (unless you unignore this specific dependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency\u0027s minor version (unless you unignore this specific dependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\u003c/details\u003e"
    },
    {
      "commit": "901e2cea44bde868061cae58269cf8cc583a8a78",
      "tree": "35c194c4f253622da74db2d180e3fdb6aaa8f12e",
      "parents": [
        "078abd245d8e438ff053f0d123889d56586e25da"
      ],
      "author": {
        "name": "Greg Spencer",
        "email": "gspencergoog@users.noreply.github.com",
        "time": "Mon Sep 22 17:22:26 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 22 17:22:26 2025 -0700"
      },
      "message": "Mark \"root\" as required. (#285)\n\nThis marks the \"root\" parameter for the create_project command as required, which it is, but wasn\u0027t previously marked as such."
    },
    {
      "commit": "078abd245d8e438ff053f0d123889d56586e25da",
      "tree": "fba4b49ca2a8e7a8a564063da427e1bfb5d7bb10",
      "parents": [
        "bc90433664d502b69cc85f05ae2bc51df51a27a2"
      ],
      "author": {
        "name": "Greg Spencer",
        "email": "gspencergoog@users.noreply.github.com",
        "time": "Tue Sep 16 10:14:02 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 16 10:14:02 2025 -0700"
      },
      "message": "Remove a reference to screenshots for generic error (#280)\n\n"
    },
    {
      "commit": "bc90433664d502b69cc85f05ae2bc51df51a27a2",
      "tree": "9f231649323d3892e56c8a0f99a3412eb14fb5d6",
      "parents": [
        "845c1266102939bd212ab8223a450eaafc684efe"
      ],
      "author": {
        "name": "Greg Spencer",
        "email": "gspencergoog@users.noreply.github.com",
        "time": "Thu Sep 04 13:47:24 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 04 13:47:24 2025 -0700"
      },
      "message": "Add pub add format guidance (#278)\n\n"
    },
    {
      "commit": "845c1266102939bd212ab8223a450eaafc684efe",
      "tree": "72a5fa2b14c69d3fe01242cc368f4772451b1908",
      "parents": [
        "556895820aeb062c5ebe24c2e18a21219cd7d088"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 04 11:26:34 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 04 11:26:34 2025 -0700"
      },
      "message": "Bump the github-actions group with 2 updates (#277)\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "556895820aeb062c5ebe24c2e18a21219cd7d088",
      "tree": "0c92ca0e6a891b8b739dffea2e7b57643492d8fe",
      "parents": [
        "1547a834d8a3bb021f2e6c49c41d5aaad11a5b7f"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Sep 04 10:47:25 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 04 10:47:25 2025 -0700"
      },
      "message": "add a GEMINI.md file (#279)\n\nCreated using the `/init` command from Gemini CLI and then asking it to elaborate on a few things"
    },
    {
      "commit": "1547a834d8a3bb021f2e6c49c41d5aaad11a5b7f",
      "tree": "08b201bbed9ac2dc917440c07e22fdfd45fa30a9",
      "parents": [
        "a9eb685c1819b1cf45f0896280449cd6a1dd7171"
      ],
      "author": {
        "name": "Jaime Wren",
        "email": "jwren@google.com",
        "time": "Fri Aug 29 13:14:05 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 29 13:14:05 2025 -0700"
      },
      "message": "Fix the capitalization of the Cursor editor in the flag description (#276)\n\n"
    },
    {
      "commit": "a9eb685c1819b1cf45f0896280449cd6a1dd7171",
      "tree": "76f316e155ccf80e76bfad9ee2861bfacabd0e5a",
      "parents": [
        "f167ace69b55966d6207b7efd74dff64b9907c1d"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Fri Aug 22 14:22:35 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 22 21:22:35 2025 +0000"
      },
      "message": "add an example of using progress tokens to the tools example (#270)\n\nInitially created this just for testing Gemini CLI support for progress tokens, but it makes sense to land."
    },
    {
      "commit": "f167ace69b55966d6207b7efd74dff64b9907c1d",
      "tree": "85c1520f26bc1d7e8a6efd7a245e9010c4296576",
      "parents": [
        "4c523d548654943e54c233bcab6da8f7abb8d841"
      ],
      "author": {
        "name": "Juan Campuzano",
        "email": "diegocampuzano62@gmail.com",
        "time": "Thu Aug 21 08:08:34 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 21 06:08:34 2025 -0700"
      },
      "message": "fix: Update README.md (#268)\n\nCo-authored-by: Jacob MacDonald \u003cjakemac@google.com\u003e"
    },
    {
      "commit": "4c523d548654943e54c233bcab6da8f7abb8d841",
      "tree": "c07ae3048c5791fc64caaf112c52d0d8a08b2ef7",
      "parents": [
        "ee5b2b25a013322307a60e445b480bc57ec34217"
      ],
      "author": {
        "name": "Parker Lougheed",
        "email": "parlough@gmail.com",
        "time": "Tue Aug 19 22:37:09 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 19 07:37:09 2025 -0700"
      },
      "message": "[dart_mcp_server] Update link of \"Add to Cursor\" button (#265)\n\n"
    },
    {
      "commit": "ee5b2b25a013322307a60e445b480bc57ec34217",
      "tree": "d3d1a0d8bd20d078140d8ffd850d2fb184a273e5",
      "parents": [
        "6b4b2bce4ee9204f35ba9f7109ba92a24f7049e0"
      ],
      "author": {
        "name": "Greg Spencer",
        "email": "gspencergoog@users.noreply.github.com",
        "time": "Wed Aug 13 11:08:18 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 13 11:08:18 2025 -0700"
      },
      "message": "Stop reporting errors for non-zero exits (#262)\n\nThis stops reporting command line tools that return non-zero exit codes as \"isError\" failures of the tool, so that the LLM won\u0027t interpret failed tests or formatting of files as a failure to run the tool."
    },
    {
      "commit": "6b4b2bce4ee9204f35ba9f7109ba92a24f7049e0",
      "tree": "56e0a9ba842047ce352da712f964d0a0e9b0e441",
      "parents": [
        "72a9283b421e5ee85c089822ddf6735aade849da"
      ],
      "author": {
        "name": "Greg Spencer",
        "email": "gspencergoog@users.noreply.github.com",
        "time": "Mon Aug 11 11:50:01 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 11 11:50:01 2025 -0700"
      },
      "message": "Add ability to filter analyzer results on a set of paths (#260)\n\nThis adds the ability to filter the results of analyze_files with a set of paths."
    },
    {
      "commit": "72a9283b421e5ee85c089822ddf6735aade849da",
      "tree": "6c2583742622a0de2932b22ec9513033a140dc07",
      "parents": [
        "0dbbd8b41b881780e7962f523bf08c9745723107"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Jul 31 12:52:14 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 31 12:52:14 2025 -0700"
      },
      "message": "add --exclude-tool option to exclude tools by name (#253)\n\nCloses https://github.com/dart-lang/ai/issues/251\n\ncc @DanTup"
    },
    {
      "commit": "0dbbd8b41b881780e7962f523bf08c9745723107",
      "tree": "46246a30539b3b1b22af6930ee0b130d8741c7c5",
      "parents": [
        "0858b0b901d28482a029609574be55b7d7947c11"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Jul 30 14:09:36 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 30 14:09:36 2025 -0700"
      },
      "message": "only run in shell when on windows and running a .bat file (#252)\n\nBased on this suggestion from @DanTup https://github.com/dart-lang/tools/pull/2138#issuecomment-3133627598"
    },
    {
      "commit": "0858b0b901d28482a029609574be55b7d7947c11",
      "tree": "935eef41fbd465de1b0665c9c2b22ff2142053cb",
      "parents": [
        "912c1f32d94f3c9d91ee84aa8e32908e936cca2e"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Jul 28 13:45:49 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 28 13:45:49 2025 -0700"
      },
      "message": "further prompt refinement, discourage use of temp ids and encourage getting the widget tree often (#249)\n\n"
    },
    {
      "commit": "912c1f32d94f3c9d91ee84aa8e32908e936cca2e",
      "tree": "08ad5a7cf50f1c97638c024d03d190765e9934eb",
      "parents": [
        "0f7cba8aa4f73256f4283658eff60d2ac9a90c21"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Jul 28 11:17:57 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 28 11:17:57 2025 -0700"
      },
      "message": "release dart_mcp v0.3.3 (#247)\n\n"
    },
    {
      "commit": "0f7cba8aa4f73256f4283658eff60d2ac9a90c21",
      "tree": "6fe179e63b9598da8071b546682ea9549d8806cc",
      "parents": [
        "7fbe88a5d05fa4debcc3fb9bcd6c29dddafee745"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Jul 28 11:17:08 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 28 18:17:08 2025 +0000"
      },
      "message": "add analytics tracking for prompts (#246)\n\nIntercepts all prompts added with `addPrompt` and adds analytics tracking if an analytics instance is configured.\r\n\r\nDoes not capture any specific arguments, but does track whether any arguments were supplied at all."
    },
    {
      "commit": "7fbe88a5d05fa4debcc3fb9bcd6c29dddafee745",
      "tree": "4b743d7edd3cb5889419ac954a5960319e510285",
      "parents": [
        "8d2384b9140c4a964a517cd30496e5077e3385fa"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Fri Jul 25 09:49:29 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 25 16:49:29 2025 +0000"
      },
      "message": "refine the prompt and fix the extension listener (#244)\n\nFixes an issue where we would think flutter_driver wasn\u0027t registered sometimes, because those events come on a different stream.\r\n\r\nRefine the prompt to have it also run the actual test.\r\n\r\nAlso added an optional user_journey argument to the prompt to avoid an extra back and forth with the agent."
    },
    {
      "commit": "8d2384b9140c4a964a517cd30496e5077e3385fa",
      "tree": "9b0bdeef2842337cb6cd8b80fab48422f935833a",
      "parents": [
        "e09e4698991ebf8fee78c7c5eac3eeaddd1a4f6c"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Fri Jul 25 07:50:47 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 25 14:50:47 2025 +0000"
      },
      "message": "add some intellij files to gitignore (#245)\n\n"
    },
    {
      "commit": "e09e4698991ebf8fee78c7c5eac3eeaddd1a4f6c",
      "tree": "c6b284477fa3f09f0b69c1c491ddffc26e8c5430",
      "parents": [
        "88d7a4d4387bcd24cf8e905a455b3d4d5de4e6fd"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Jul 24 13:00:05 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 24 13:00:05 2025 -0700"
      },
      "message": "add prompt for using flutter driver to write a test for a user journey (#243)\n\nFor clients that have prompts support, this prompt allows a user to provide a user journey and it will instruct the LLM to:\n\n- Try to accomplish the user journey in the live app using flutter driver\n- If successful, write a flutter driver test with the same instructions used to accomplish the journey.\n\nTODO: Add support for running flutter driver tests in the MCP server and add that to the prompt."
    },
    {
      "commit": "88d7a4d4387bcd24cf8e905a455b3d4d5de4e6fd",
      "tree": "52a3ba32b5c7e4e626678f74311e6684c8880ba5",
      "parents": [
        "40607dca1b7b72d13483db3dc6f30f31d42584ef"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Jul 23 10:36:05 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 23 10:36:05 2025 -0700"
      },
      "message": "Flutter driver updates, add screenshot support back (#241)\n\n- All the flutter driver arguments are actually supposed to be string values so this fixes those schemas\n- Change the widget tree to not be the summary by default - summary trees hide nested text widgets which makes it hard for the LLM to find things. This can be explicitly toggled on though.\n- Added support for the flutter driver screenshot command, which works on simulators 🥳 \n- Rework tests a bit so there is a helper for normal tool calls without retries\n- Removed the `get_layer_tree` and `get_render_tree` flutter driver commands for now - I don\u0027t see these ever being used."
    },
    {
      "commit": "40607dca1b7b72d13483db3dc6f30f31d42584ef",
      "tree": "0fbd8efae0ab3cb4e234b39f5d2f43ff062d2f21",
      "parents": [
        "ec6efa4c5e715e0f553d65c422edc4d78384c1c8"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Mon Jul 21 10:20:04 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 21 17:20:04 2025 +0000"
      },
      "message": "rename ElicitationHandler.reject to ElicitationHandler.decline (#240)\n\nThere was initially a discrepancy between the Typescript and JSON schemas - looks like they reconciled that by going with the typescript version, so this aligns to that.\r\n\r\nI kept a deprecated constant called `reject` which is just the new `decline` one, which should be fully backwards compatible."
    },
    {
      "commit": "ec6efa4c5e715e0f553d65c422edc4d78384c1c8",
      "tree": "a667a4d015ba4299a7af1d2a891cd94abf2deeb8",
      "parents": [
        "00889b4479c77211e4d36dd4eb280f53744d8949"
      ],
      "author": {
        "name": "Kostia Sokolovskyi",
        "email": "sokolovskyi.konstantin@gmail.com",
        "time": "Mon Jul 21 18:00:53 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 21 09:00:53 2025 -0700"
      },
      "message": "Fix ping request handling from non-dart clients. (#239)\n\nFixes https://github.com/dart-lang/ai/issues/238\n\n- Updates `PingRequest` to wrap `Map\u003cString, Object?\u003e` instead of `Null` to allow empty parameters handling from non-Dart clients."
    },
    {
      "commit": "00889b4479c77211e4d36dd4eb280f53744d8949",
      "tree": "dda8c49cca1990776b2e4b38acd708f9437ee0fd",
      "parents": [
        "5e93ef46f189aecda42e9c2b2f1e92480db99a01"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Jul 17 13:50:38 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 17 13:50:38 2025 -0700"
      },
      "message": "release dart_mcp version 0.3.2 (#237)\n\n"
    },
    {
      "commit": "5e93ef46f189aecda42e9c2b2f1e92480db99a01",
      "tree": "21b34189fbea2a712d6b97ed56bc96138b6a1500",
      "parents": [
        "66af21b2190a5850dbe86d3e5121571698c3419c"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Jul 17 13:34:35 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 17 13:34:35 2025 -0700"
      },
      "message": "Deprecate EnumSchema and JsonType.enumeration (#236)\n\nEnums are supposed to be represented as the \"string\" type with an \"enum\" entry. This was breaking Gemini CLI with the recent addition of some enum types for the flutter driver tool."
    },
    {
      "commit": "66af21b2190a5850dbe86d3e5121571698c3419c",
      "tree": "55ed627992c7716017bbdf85d897ba0f0ff106f1",
      "parents": [
        "141fbe1b88dec43346bd70c06bb72322ff67002d"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Jul 17 10:53:11 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 17 10:53:11 2025 -0700"
      },
      "message": "fix the firstMatchOnly and matchRoot schemas to be booleans (#235)\n\nThese are supposed to be just booleans, but represented as strings (who knows why...)"
    },
    {
      "commit": "141fbe1b88dec43346bd70c06bb72322ff67002d",
      "tree": "355a1ddd947e2de6cbe1f715d2099758e7e7f5f7",
      "parents": [
        "ce519e89318ecb92efb5b749d8e7e9e08dd4384b"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Jul 17 07:59:49 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 17 07:59:49 2025 -0700"
      },
      "message": "release dart_mcp 0.3.1 (#234)\n\nBug fixes, improved examples, and some deprecated APIs and minor cleanup."
    },
    {
      "commit": "ce519e89318ecb92efb5b749d8e7e9e08dd4384b",
      "tree": "c85cc6e04aa99e07c5da8959a4131ccc9bad5daf",
      "parents": [
        "3bf650ec27eee62e3cd348ee0284e40e213136aa"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Thu Jul 17 07:21:23 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 17 14:21:23 2025 +0000"
      },
      "message": "Add flutter driver tool (#223)\n\nTowards https://github.com/dart-lang/ai/issues/222 (could close it, but probably we should do some more work to validate it works well).\r\n\r\nAdds the flutter driver tool, with a curated set of available commands. I decided to expose this as just a single tool, which mirrors exactly the flutter driver extension method.\r\n\r\nThe schema for this is pretty weird and complex - but in general Gemini seems to do OK with it.\r\n\r\nNote that I only tested the tap/get_text commands, I think that is likely sufficient (really we just need to test we are forwarding commands through, we aren\u0027t doing anything special).\r\n\r\nAlso updates the workflow client to handle enums and use updated model names."
    },
    {
      "commit": "3bf650ec27eee62e3cd348ee0284e40e213136aa",
      "tree": "22e47a6ade7a2e0c9a206f88953cc876ec4cbfd2",
      "parents": [
        "aed93b4513ef200877284bb46ee011bb9c932f2c"
      ],
      "author": {
        "name": "Jacob MacDonald",
        "email": "jakemac@google.com",
        "time": "Wed Jul 16 14:12:21 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 16 21:12:21 2025 +0000"
      },
      "message": "add completions support to the prompts example (#233)\n\nCloses https://github.com/dart-lang/ai/issues/220\r\n\r\nAfter this, all major features have at least a basic example."
    }
  ],
  "next": "aed93b4513ef200877284bb46ee011bb9c932f2c"
}
