)]}'
{
  "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": "e10ba16719d9b55295e9b950cfd647b536e3b735",
      "tree": "6e45d4d55a1ba0105bd23fe153e2097b285f0687",
      "parents": [
        "2835615e4cd72a46289f2e14c9afb0ccc43e0ceb"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Thu Jul 31 19:52:29 2025 +0400"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Fri Aug 01 14:50:16 2025 +0400"
      },
      "message": "DodoApp: Implement dev proxy mode\n\nWith dev proxy user can substitute any service with their own local\nmachine. In which case dodo will run proxy server on the platform\nwhich will forward all requests to the configured address.\n\nWhen VPN is enabled, dodo will run tailscale sidecar in the proxy pod.\n\nChange-Id: I12592ae77d2e88e0582c8fe1e0f82e5fd24e02cb\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": "8a5f12fc0a4a44ba221305eb6a58fcb3a7f40db7",
      "tree": "6b0b27dfe37d253c457dbc6fbab4c71dd4c3dab3",
      "parents": [
        "74c6f75a5fc197356660339149b7a84990f85ea8"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Jul 05 07:02:31 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Sat Jul 05 08:38:05 2025 +0000"
      },
      "message": "Canvas: Implement streaming state updates\n\nChange-Id: I2bc5a51b5792839bde93f927f5ffea22b3250fe2\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": "67d6d5ffdaf277c2ce4696a4c3a978280e914488",
      "tree": "3574e31c8d5ff5d079e9d83cac00a5842436e42c",
      "parents": [
        "3aba30926494639c5617e5a25822f8802d1b6876"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 15:49:54 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jul 02 15:51:42 2025 +0000"
      },
      "message": "Canvas: Use lowercased port names when generating dodo-app config\n\nChange-Id: Ic33584b94955848e0510f6a8acc755036748604e\n"
    },
    {
      "commit": "2f393c12fe97a6794a8bd6a5969320bbf184fe3f",
      "tree": "f2e7fc7fdf27af6132afcf80a7eda637805d499c",
      "parents": [
        "8f8b086c368c7c2c7fe24c3c11fb1393f6f1b83f"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 01 08:02:48 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Tue Jul 01 12:58:51 2025 +0000"
      },
      "message": "Canvas: Makefile\n\nChange-Id: I448a36bf60ee33fb4691d5312ac69b32ec38ec14\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": "9b7421ac7ad75ad949e32d1606afcd685443ef8c",
      "tree": "97464a6c474781bd521c96e034733cec0c7b6ab5",
      "parents": [
        "dbabb10be6f6211d630e526d45aa54eae59756c9"
      ],
      "author": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jun 18 12:31:13 2025 +0000"
      },
      "committer": {
        "name": "gio",
        "email": "gio@v1.dodo.cloud",
        "time": "Wed Jun 18 15:19:21 2025 +0000"
      },
      "message": "Canvas: Generate Github nodes out of the dodo-app config\n\nChange-Id: Ifc5b09deb39352a3025f7ea66ce39b421daac94d\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"
    }
  ]
}
