Canvas: Add VM/PROXY dev modes support

- Update ServiceSchema to discriminate between VM and PROXY dev modes
- Add DevDisabled, DevVM, DevProxy TypeScript types
- Update ServiceData type in graph.ts for new dev structure
- Update generateDodoConfig to handle both VM and PROXY modes
- Update configToGraph to properly convert dev configurations
- Maintain backward compatibility with existing dev configurations
- Update UI and introduce two new DevVM and DevProxy components
- Fetch user machine list from headscale API

Change-Id: I8f9df4ab9bd34c049fffadb748115335e8260a54
diff --git a/core/headscale/client.go b/core/headscale/client.go
index f4d0f51..766ae52 100644
--- a/core/headscale/client.go
+++ b/core/headscale/client.go
@@ -96,14 +96,22 @@
 	IPAddresses []net.IP `json:"ip_addresses"`
 }
 
-func (c *client) getNodeId(user, node string) (string, error) {
+func (c *client) getUserNodes(user string) ([]nodeInfo, error) {
 	cmd := exec.Command("headscale", c.config, "--user", user, "node", "list", "-o", "json")
 	out, err := cmd.Output()
 	if err != nil {
-		return "", err
+		return nil, err
 	}
 	var nodes []nodeInfo
 	if err := json.NewDecoder(bytes.NewReader(out)).Decode(&nodes); err != nil {
+		return nil, err
+	}
+	return nodes, nil
+}
+
+func (c *client) getNodeId(user, node string) (string, error) {
+	nodes, err := c.getUserNodes(user)
+	if err != nil {
 		return "", err
 	}
 	for _, n := range nodes {