)]}'
{
  "log": [
    {
      "commit": "43e0aadc734358431b604c4ebf62269ef266c415",
      "tree": "f2a3219bbf171789c68f454acd07ad8b2040961a",
      "parents": [
        "e10ba16719d9b55295e9b950cfd647b536e3b735"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Aug 01 16:17:27 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Aug 02 08:46:26 2025 +0000"
      },
      "message": "Canvas: Add VM/PROXY dev modes support\n\n- Update ServiceSchema to discriminate between VM and PROXY dev modes\n- Add DevDisabled, DevVM, DevProxy TypeScript types\n- Update ServiceData type in graph.ts for new dev structure\n- Update generateDodoConfig to handle both VM and PROXY modes\n- Update configToGraph to properly convert dev configurations\n- Maintain backward compatibility with existing dev configurations\n- Update UI and introduce two new DevVM and DevProxy components\n- Fetch user machine list from headscale API\n\nChange-Id: I8f9df4ab9bd34c049fffadb748115335e8260a54\n"
    },
    {
      "commit": "56e9f471ee3ab18ea51317b023d3b0c96f8553ce",
      "tree": "92a714d575f2663b38df905400d03b98c289ee0b",
      "parents": [
        "52441604dd0cc8296a354ba55d8033848cfbf4ad"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 03:33:38 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jul 07 03:33:38 2025 +0000"
      },
      "message": "Canvas: Add option to deploy latest draft\n\nChange-Id: Ia74c64354e1f80ec794140ce406fb21c16feb0da\n"
    },
    {
      "commit": "52441604dd0cc8296a354ba55d8033848cfbf4ad",
      "tree": "2e2241b810473114e8e4a39ee36c58358ec7b41f",
      "parents": [
        "efc9a4a8fb4b648249c836cc14bba9dfe235f154"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jul 06 18:22:56 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jul 06 18:22:56 2025 +0000"
      },
      "message": "Canvas: Auto-assign position to nodes if missing\n\nChange-Id: Ica80878e0cb280c9a44f58637c11b53d78e07892\n"
    },
    {
      "commit": "10ff134f60a350c2d2aa8742a941f48af0baa77c",
      "tree": "00e217692c5bf20d0e97ee6c3e51048b6dd75417",
      "parents": [
        "8edf6c7753525fb9680c90ef09a6fdd16bfb818b"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Jul 05 10:22:15 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sun Jul 06 05:21:45 2025 +0000"
      },
      "message": "Canvas: Use GraphSchema to validate state\n\nChange-Id: I342c8959c97f3486c4a7cb2aff92fb930a2b3146\n"
    },
    {
      "commit": "74c6f75a5fc197356660339149b7a84990f85ea8",
      "tree": "ecc337e1e5de656cb2ed6035abfd88c20fbd6682",
      "parents": [
        "2e7d217e445377789bf8c57de57a314e1c736f4e"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Jul 05 04:10:58 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Jul 05 04:18:34 2025 +0000"
      },
      "message": "Canvas: Implement agent sidebar on the overview tab\n\nChange-Id: I1f2fb874cb98247c73bebf364f4669ad5170c4a0\n"
    },
    {
      "commit": "1dacf1ca5feef1a9965d41ce3018429dd02aee44",
      "tree": "8d46b9847f0ec0181026592b96fafab4a170be46",
      "parents": [
        "641799b4b4dff496dc5b07a10a61f84abe8f790f"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 16:39:04 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Jul 04 08:03:07 2025 +0000"
      },
      "message": "Canvas: Let user define name/value env var\n\nChange-Id: I9beffcc6f0dcbb674ef82b37b93b5f5ef7d189bc\n"
    },
    {
      "commit": "69ff759f4e5bafc74f80cb2b72e4e417ec2edbbb",
      "tree": "9d40d639f30a9b053513b7082e4a52bf0d9c0730",
      "parents": [
        "4745b3fec208c81e4e694a11cb41d827239b8872"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 06:27:21 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 03 08:15:36 2025 +0000"
      },
      "message": "Canvas: Support Anthropic Claude based AI agents\n\nChange-Id: Ib74c9672da9a80a4f20d63741a471c728a435b8e\n"
    },
    {
      "commit": "a70535a1e77cb10c7e83c8129f7b150a3b522c1f",
      "tree": "2d74005cac054b4ae58876cb2f55bf735ed3fbd0",
      "parents": [
        "67d6d5ffdaf277c2ce4696a4c3a978280e914488"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 15:50:25 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 15:51:42 2025 +0000"
      },
      "message": "Canvas: Fix worker registration request schema\n\nMake commit information optional and nullable\n\nChange-Id: I181a7ac53f6b1618c11443b168af27e356922ace\n"
    },
    {
      "commit": "cc5ce58b57b3faa66cc784cb3f248420602befcb",
      "tree": "a3012ae4df037604f79beeb94852d3703947d57c",
      "parents": [
        "85ddcdf7453f8f222654136116e856a64b4eae7c"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jun 25 07:45:21 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 26 07:02:46 2025 +0000"
      },
      "message": "Canvas: Render AI agents in tabs\n\nImplements AI Agent chat bubble, but is disabled for now.\n\nChange-Id: If915691a22f376f347b76a5d24333dbe76492ca9\n"
    },
    {
      "commit": "691483264b84abdbee3d889fd3c0ae2754b99fa5",
      "tree": "6d44a701921ae9e140ce85f299f7359ce96cdf81",
      "parents": [
        "b33b2a93a0a2e51d94ebc844b81686e8ab2e3c64"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jun 19 23:16:12 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jun 24 08:32:04 2025 +0000"
      },
      "message": "Canvas: Implement Agent Sketch node, update dodo-app.jsonschema\n\n- Add Gemini API key to the project\n- Update dodo schema to support Gemini API key\n- Update dodo schema to support Agent Sketch node\n\nChange-Id: I6a96186f86ad169152ca0021b38130e485ebbf14\n"
    },
    {
      "commit": "c31bf14971e228b03f738dde4cbfc8ae34f88f9d",
      "tree": "13345409e55a4628c1228e7606c20158eef2239f",
      "parents": [
        "4b08eb7dd536c9c66263b3eea08bfeb43f035f74"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Mon Jun 16 07:48:20 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jun 18 09:13:19 2025 +0000"
      },
      "message": "Canvas: Generate graph state out of dodo-app config\n\nRestructure code, create shared config lib.\n\nChange-Id: I2cf06d35c486d4557484daf8618a2c215316fa7e\n"
    }
  ]
}
