dodo: Support Sketch agent

Change-Id: I4dcd6aab7d7a2c2e86aaf1ad8d36d30a649ab31d
diff --git a/core/installer/dodo_app_test.go b/core/installer/dodo_app_test.go
index 22835b6..f81f2f9 100644
--- a/core/installer/dodo_app_test.go
+++ b/core/installer/dodo_app_test.go
@@ -642,3 +642,78 @@
 	}
 	t.Log(string(access))
 }
+
+const sketch = `
+{
+    "agent": [
+        {
+            "type": "sketch:latest",
+            "name": "dev",
+            "geminiApiKey": "foo",
+        }
+    ],
+}
+`
+
+func TestSketch(t *testing.T) {
+	app, err := NewDodoApp([]byte(sketch))
+	if err != nil {
+		for _, e := range errors.Errors(err) {
+			t.Log(e)
+		}
+		t.Fatal(err)
+	}
+	release := Release{
+		Namespace:     "foo",
+		AppInstanceId: "foo-bar",
+		RepoAddr:      "ssh://192.168.100.210:22/config",
+		AppDir:        "/foo/bar",
+	}
+	keyGen := testKeyGen{}
+	r, err := app.Render(release, env, networks, nil, map[string]any{
+		"managerAddr":  "",
+		"appId":        "",
+		"geminiApiKey": "dev",
+	}, nil, keyGen)
+	if err != nil {
+		t.Fatal(err)
+	}
+	t.Log(string(r.Raw))
+}
+
+const sketchGlobalGeminiApiKey = `
+{
+    "agent": [
+        {
+            "type": "sketch:latest",
+            "name": "dev",
+        }
+    ],
+}
+`
+
+func TestSketchGlobalGeminiApiKey(t *testing.T) {
+	app, err := NewDodoApp([]byte(sketchGlobalGeminiApiKey))
+	if err != nil {
+		for _, e := range errors.Errors(err) {
+			t.Log(e)
+		}
+		t.Fatal(err)
+	}
+	release := Release{
+		Namespace:     "foo",
+		AppInstanceId: "foo-bar",
+		RepoAddr:      "ssh://192.168.100.210:22/config",
+		AppDir:        "/foo/bar",
+	}
+	keyGen := testKeyGen{}
+	r, err := app.Render(release, env, networks, nil, map[string]any{
+		"managerAddr":  "",
+		"appId":        "",
+		"geminiApiKey": "dev",
+	}, nil, keyGen)
+	if err != nil {
+		t.Fatal(err)
+	}
+	t.Log(string(r.Raw))
+}