)]}'
{
  "commit": "1af73bc03d3588243971602320aa25b1ff3bb0b8",
  "tree": "f666e7236467fb5483d87d076604d80f8d687024",
  "parents": [
    "0b22b675f1ca3ace8ad44c69ca3e2141333aafb9"
  ],
  "author": {
    "name": "Jacob MacDonald",
    "email": "jakemac@google.com",
    "time": "Thu Jun 26 18:59:47 2025 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Jun 26 18:59:47 2025 -0700"
  },
  "message": "auto validate tool arguments, improve validation messages (#200)\n\nMarking this as closing https://github.com/dart-lang/ai/issues/197 - it should significantly help the LLM figure out what it did wrong. The error would now be something like \"Value `\u003croot\u003e` is not of type `List\u003cdynamic\u003e` at path #root[\"roots\"]\".\n\nI made a fair number of changes to the validation errors here, namely only emitting errors for the leaf node where the error actually happened and not the entire path up. I don\u0027t think that extra info was helpful.\n\ncc @kenzieschmoll ",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "700381a2629412f9f91daeb56450419e023f6540",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp/CHANGELOG.md",
      "new_id": "008ac99719a271008413100316e3c35d07f006c9",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp/CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "8ea339b5be19f57ed9089848c9302d5f02ddd4e4",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp/lib/src/api/tools.dart",
      "new_id": "85a2c09344e51f3c26a96462223093a4641b3064",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp/lib/src/api/tools.dart"
    },
    {
      "type": "modify",
      "old_id": "e255019a5abb6e6a7531a40255ea3bd975611d4b",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp/lib/src/server/tools_support.dart",
      "new_id": "6521b86f85cb22508b13d4ad5dae73030607cae9",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp/lib/src/server/tools_support.dart"
    },
    {
      "type": "modify",
      "old_id": "3a98683f830dabcc8d1f719366d87a01dec7f699",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp/pubspec.yaml",
      "new_id": "0e48b2a96e8fee01e3a75442d713b74da5b28fdb",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp/pubspec.yaml"
    },
    {
      "type": "modify",
      "old_id": "20f9a0d3dee3e407083be4d94380e58c05ec3b3f",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp/test/api/tools_test.dart",
      "new_id": "d3ba8130738ec065f47fd35513d77bc20210d861",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp/test/api/tools_test.dart"
    },
    {
      "type": "modify",
      "old_id": "75721eb218ee6908fccdf799868450693000a823",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp/test/server/tools_support_test.dart",
      "new_id": "337082a7dc5be8649dcbb603b2bd5771a4842b74",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp/test/server/tools_support_test.dart"
    },
    {
      "type": "modify",
      "old_id": "70fc5a6baef95cbbfa96cb2c5c9f72a2b8380213",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp_server/lib/src/mixins/dash_cli.dart",
      "new_id": "ef4bb55430ecc736d5a74da0ca0d1f1642435819",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp_server/lib/src/mixins/dash_cli.dart"
    },
    {
      "type": "modify",
      "old_id": "c390004c4bec34f52b69c85f96a230d5d567c45b",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp_server/lib/src/mixins/dtd.dart",
      "new_id": "8fe2f8e0ad835cffbdc24cefcbf718e170327ba8",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp_server/lib/src/mixins/dtd.dart"
    },
    {
      "type": "modify",
      "old_id": "ab4850014e46db22f22b96f26376e82b05acfb71",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp_server/lib/src/mixins/pub.dart",
      "new_id": "9059a108bd28a75dbba980deb2b5c120817b4dbd",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp_server/lib/src/mixins/pub.dart"
    },
    {
      "type": "modify",
      "old_id": "f90a80f21b4647145dec9077a4c8343a1f07e67a",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp_server/lib/src/server.dart",
      "new_id": "04af79d48ff529a3c0b316c15b733e512e3f780a",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp_server/lib/src/server.dart"
    },
    {
      "type": "modify",
      "old_id": "4df5932e3557d7fb894595fa413aeca8e0dc0287",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp_server/pubspec.yaml",
      "new_id": "0f37a2bd9355b4961c0e5887c72fcce2c37ac46d",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp_server/pubspec.yaml"
    },
    {
      "type": "modify",
      "old_id": "713fd1a2e87ac115a37a79787386644f55f50902",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp_server/test/tools/dtd_test.dart",
      "new_id": "bf92e23f1a7d9fed47fc70e371acab0993df9d9d",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp_server/test/tools/dtd_test.dart"
    },
    {
      "type": "modify",
      "old_id": "841a60d68ce10a36f603b6a4060e3357b2be520c",
      "old_mode": 33188,
      "old_path": "pkgs/dart_mcp_server/test/tools/pub_test.dart",
      "new_id": "e349db1db2992f3c713ebccc4840c5b85ea58ab9",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp_server/test/tools/pub_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "539ab022f2119642b2f43980e37176e6e4ab05ff",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp_server/test_fixtures/counter_app/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "be68df01ba7e6f54365844cda75a5d83cde014b2",
      "new_mode": 33188,
      "new_path": "pkgs/dart_mcp_server/test_fixtures/counter_app/android/local.properties"
    }
  ]
}
