Skip to content

Commit 37b32d6

Browse files
fix: set preferred transport on agent cards (#1689)
## Summary - set `PreferredTransport` to `JSONRPC` when the controller builds A2A agent cards - add regression coverage for `GetA2AAgentCard` so controller-generated cards keep that field populated - keep the change limited to the translator path described in #1684 ## Testing - `/opt/homebrew/bin/go test ./core/internal/controller/translator/agent -run TestGetA2AAgentCard` Fixes #1684 --------- Signed-off-by: Gnani Rahul <gnutakki@radiantlogic.com> Co-authored-by: Eitan Yarmush <eitan.yarmush@solo.io>
1 parent 512e903 commit 37b32d6

35 files changed

Lines changed: 109 additions & 69 deletions

go/core/internal/controller/translator/agent/testdata/outputs/agent_with_allowed_headers.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
],
1414
"description": "",
1515
"name": "agent",
16+
"preferredTransport": "JSONRPC",
1617
"skills": null,
1718
"url": "http://agent.test:8080",
1819
"version": ""
@@ -69,7 +70,7 @@
6970
]
7071
},
7172
"stringData": {
72-
"agent-card.json": "{\"name\":\"agent\",\"description\":\"\",\"url\":\"http://agent.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
73+
"agent-card.json": "{\"name\":\"agent\",\"description\":\"\",\"url\":\"http://agent.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[],\"preferredTransport\":\"JSONRPC\"}",
7374
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4o\",\"base_url\":\"\"},\"description\":\"\",\"instruction\":\"You are a helpful assistant.\",\"http_tools\":[{\"params\":{\"url\":\"http://mcp-server.test:8080/mcp\",\"headers\":{}},\"tools\":[\"tool1\",\"tool2\"],\"allowed_headers\":[\"x-user-email\",\"x-tenant-id\"]}],\"stream\":false}"
7475
}
7576
},
@@ -139,7 +140,7 @@
139140
"template": {
140141
"metadata": {
141142
"annotations": {
142-
"kagent.dev/config-hash": "3163633853400579791"
143+
"kagent.dev/config-hash": "5387783918115122395"
143144
},
144145
"labels": {
145146
"app": "kagent",

go/core/internal/controller/translator/agent/testdata/outputs/agent_with_code.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
],
1414
"description": "",
1515
"name": "agent_with_code",
16+
"preferredTransport": "JSONRPC",
1617
"skills": null,
1718
"url": "http://agent-with-code.test:8080",
1819
"version": ""
@@ -61,7 +62,7 @@
6162
]
6263
},
6364
"stringData": {
64-
"agent-card.json": "{\"name\":\"agent_with_code\",\"description\":\"\",\"url\":\"http://agent-with-code.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
65+
"agent-card.json": "{\"name\":\"agent_with_code\",\"description\":\"\",\"url\":\"http://agent-with-code.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[],\"preferredTransport\":\"JSONRPC\"}",
6566
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4o\",\"headers\":{\"User-Agent\":\"kagent/1.0\"},\"base_url\":\"\",\"max_tokens\":1024,\"reasoning_effort\":\"low\",\"temperature\":0.7,\"top_p\":0.95},\"description\":\"\",\"instruction\":\"You are a helpful assistant.\",\"execute_code\":true,\"stream\":false}",
6667
"srt-settings.json": "{\"filesystem\":{\"allowWrite\":[\".\",\"/tmp\"],\"denyRead\":[],\"denyWrite\":[]},\"network\":{\"allowedDomains\":[],\"deniedDomains\":[]}}"
6768
}
@@ -132,7 +133,7 @@
132133
"template": {
133134
"metadata": {
134135
"annotations": {
135-
"kagent.dev/config-hash": "3112549247443018156"
136+
"kagent.dev/config-hash": "17724008177186270332"
136137
},
137138
"labels": {
138139
"app": "kagent",

go/core/internal/controller/translator/agent/testdata/outputs/agent_with_context_config.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
],
1414
"description": "Agent with context management",
1515
"name": "agent_with_context",
16+
"preferredTransport": "JSONRPC",
1617
"skills": null,
1718
"url": "http://agent-with-context.test:8080",
1819
"version": ""
@@ -71,7 +72,7 @@
7172
]
7273
},
7374
"stringData": {
74-
"agent-card.json": "{\"name\":\"agent_with_context\",\"description\":\"Agent with context management\",\"url\":\"http://agent-with-context.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
75+
"agent-card.json": "{\"name\":\"agent_with_context\",\"description\":\"Agent with context management\",\"url\":\"http://agent-with-context.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[],\"preferredTransport\":\"JSONRPC\"}",
7576
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4o\",\"headers\":{\"User-Agent\":\"kagent/1.0\"},\"base_url\":\"\",\"max_tokens\":1024,\"temperature\":0.7},\"description\":\"Agent with context management\",\"instruction\":\"You are a helpful assistant with context management enabled.\",\"stream\":false,\"context_config\":{\"compaction\":{\"compaction_interval\":5,\"overlap_size\":2,\"summarizer_model\":{\"type\":\"anthropic\",\"model\":\"claude-3-haiku\"},\"prompt_template\":\"Summarize the following conversation events concisely.\",\"token_threshold\":50000,\"event_retention_size\":10}}}"
7677
}
7778
},
@@ -141,7 +142,7 @@
141142
"template": {
142143
"metadata": {
143144
"annotations": {
144-
"kagent.dev/config-hash": "542503096430191840"
145+
"kagent.dev/config-hash": "16891892632874106599"
145146
},
146147
"labels": {
147148
"app": "kagent",

go/core/internal/controller/translator/agent/testdata/outputs/agent_with_cross_namespace_tools.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
],
1414
"description": "An agent that uses cross-namespace tools",
1515
"name": "source_agent",
16+
"preferredTransport": "JSONRPC",
1617
"skills": null,
1718
"url": "http://source-agent.source-ns:8080",
1819
"version": ""
@@ -75,7 +76,7 @@
7576
]
7677
},
7778
"stringData": {
78-
"agent-card.json": "{\"name\":\"source_agent\",\"description\":\"An agent that uses cross-namespace tools\",\"url\":\"http://source-agent.source-ns:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
79+
"agent-card.json": "{\"name\":\"source_agent\",\"description\":\"An agent that uses cross-namespace tools\",\"url\":\"http://source-agent.source-ns:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[],\"preferredTransport\":\"JSONRPC\"}",
7980
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4o\",\"base_url\":\"\"},\"description\":\"An agent that uses cross-namespace tools\",\"instruction\":\"You are an assistant with access to shared tools.\",\"http_tools\":[{\"params\":{\"url\":\"http://tools.tools-ns.svc:8080/mcp\",\"headers\":{\"Authorization\":\"tool-secret-token\"},\"timeout\":30},\"tools\":[\"list_resources\",\"get_resource\"]}],\"remote_agents\":[{\"name\":\"tools_ns__NS__tools_agent\",\"url\":\"http://tools-agent.tools-ns:8080\",\"description\":\"An agent that can be used as a cross-namespace tool\"}],\"stream\":false}"
8081
}
8182
},
@@ -145,7 +146,7 @@
145146
"template": {
146147
"metadata": {
147148
"annotations": {
148-
"kagent.dev/config-hash": "4884557913361845254"
149+
"kagent.dev/config-hash": "6527476808794662414"
149150
},
150151
"labels": {
151152
"app": "kagent",

go/core/internal/controller/translator/agent/testdata/outputs/agent_with_custom_sa.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
],
1414
"description": "",
1515
"name": "agent_with_custom_sa",
16+
"preferredTransport": "JSONRPC",
1617
"skills": null,
1718
"url": "http://agent-with-custom-sa.test:8080",
1819
"version": ""
@@ -53,7 +54,7 @@
5354
]
5455
},
5556
"stringData": {
56-
"agent-card.json": "{\"name\":\"agent_with_custom_sa\",\"description\":\"\",\"url\":\"http://agent-with-custom-sa.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
57+
"agent-card.json": "{\"name\":\"agent_with_custom_sa\",\"description\":\"\",\"url\":\"http://agent-with-custom-sa.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[],\"preferredTransport\":\"JSONRPC\"}",
5758
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4\",\"base_url\":\"\"},\"description\":\"\",\"instruction\":\"You are a helpful assistant.\",\"stream\":false}"
5859
}
5960
},
@@ -98,7 +99,7 @@
9899
"template": {
99100
"metadata": {
100101
"annotations": {
101-
"kagent.dev/config-hash": "10888184615299925090"
102+
"kagent.dev/config-hash": "13887560842969010876"
102103
},
103104
"labels": {
104105
"app": "kagent",

go/core/internal/controller/translator/agent/testdata/outputs/agent_with_default_sa.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
],
1414
"description": "",
1515
"name": "agent_with_default_sa",
16+
"preferredTransport": "JSONRPC",
1617
"skills": null,
1718
"url": "http://agent-with-default-sa.test:8080",
1819
"version": ""
@@ -53,7 +54,7 @@
5354
]
5455
},
5556
"stringData": {
56-
"agent-card.json": "{\"name\":\"agent_with_default_sa\",\"description\":\"\",\"url\":\"http://agent-with-default-sa.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
57+
"agent-card.json": "{\"name\":\"agent_with_default_sa\",\"description\":\"\",\"url\":\"http://agent-with-default-sa.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[],\"preferredTransport\":\"JSONRPC\"}",
5758
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4\",\"base_url\":\"\"},\"description\":\"\",\"instruction\":\"You are a helpful assistant.\",\"stream\":false}"
5859
}
5960
},
@@ -98,7 +99,7 @@
9899
"template": {
99100
"metadata": {
100101
"annotations": {
101-
"kagent.dev/config-hash": "9686053632527538314"
102+
"kagent.dev/config-hash": "8931708887213057908"
102103
},
103104
"labels": {
104105
"app": "kagent",

go/core/internal/controller/translator/agent/testdata/outputs/agent_with_embedding_provider.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
],
1414
"description": "",
1515
"name": "agent_cross_provider_memory",
16+
"preferredTransport": "JSONRPC",
1617
"skills": null,
1718
"url": "http://agent-cross-provider-memory.test:8080",
1819
"version": ""
@@ -59,7 +60,7 @@
5960
]
6061
},
6162
"stringData": {
62-
"agent-card.json": "{\"name\":\"agent_cross_provider_memory\",\"description\":\"\",\"url\":\"http://agent-cross-provider-memory.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
63+
"agent-card.json": "{\"name\":\"agent_cross_provider_memory\",\"description\":\"\",\"url\":\"http://agent-cross-provider-memory.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[],\"preferredTransport\":\"JSONRPC\"}",
6364
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4o\",\"base_url\":\"\"},\"description\":\"\",\"instruction\":\"You are an assistant.\",\"stream\":false,\"memory\":{\"embedding\":{\"provider\":\"gemini_vertex_ai\",\"model\":\"text-embedding-005\"}}}"
6465
}
6566
},
@@ -129,7 +130,7 @@
129130
"template": {
130131
"metadata": {
131132
"annotations": {
132-
"kagent.dev/config-hash": "13646724703108583778"
133+
"kagent.dev/config-hash": "10448813021284432574"
133134
},
134135
"labels": {
135136
"app": "kagent",

go/core/internal/controller/translator/agent/testdata/outputs/agent_with_git_skills.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
],
1414
"description": "",
1515
"name": "git_skills_agent",
16+
"preferredTransport": "JSONRPC",
1617
"skills": null,
1718
"url": "http://git-skills-agent.test:8080",
1819
"version": ""
@@ -60,7 +61,7 @@
6061
]
6162
},
6263
"stringData": {
63-
"agent-card.json": "{\"name\":\"git_skills_agent\",\"description\":\"\",\"url\":\"http://git-skills-agent.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
64+
"agent-card.json": "{\"name\":\"git_skills_agent\",\"description\":\"\",\"url\":\"http://git-skills-agent.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[],\"preferredTransport\":\"JSONRPC\"}",
6465
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4o\",\"headers\":{\"User-Agent\":\"kagent/1.0\"},\"base_url\":\"\",\"max_tokens\":1024,\"reasoning_effort\":\"low\",\"temperature\":0.7,\"top_p\":0.95},\"description\":\"\",\"instruction\":\"You are a helpful assistant with skills from git.\",\"stream\":false}",
6566
"srt-settings.json": "{\"filesystem\":{\"allowWrite\":[\".\",\"/tmp\"],\"denyRead\":[],\"denyWrite\":[]},\"network\":{\"allowedDomains\":[],\"deniedDomains\":[]}}"
6667
}
@@ -131,7 +132,7 @@
131132
"template": {
132133
"metadata": {
133134
"annotations": {
134-
"kagent.dev/config-hash": "10549266842660390977"
135+
"kagent.dev/config-hash": "9443054578640766875"
135136
},
136137
"labels": {
137138
"app": "kagent",

go/core/internal/controller/translator/agent/testdata/outputs/agent_with_http_toolserver.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
],
1414
"description": "",
1515
"name": "agent",
16+
"preferredTransport": "JSONRPC",
1617
"skills": null,
1718
"url": "http://agent.test:8080",
1819
"version": ""
@@ -68,7 +69,7 @@
6869
]
6970
},
7071
"stringData": {
71-
"agent-card.json": "{\"name\":\"agent\",\"description\":\"\",\"url\":\"http://agent.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
72+
"agent-card.json": "{\"name\":\"agent\",\"description\":\"\",\"url\":\"http://agent.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[],\"preferredTransport\":\"JSONRPC\"}",
7273
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4o\",\"base_url\":\"\"},\"description\":\"\",\"instruction\":\"You are a math toolserver. Focus on solving mathematical problems step by step.\",\"http_tools\":[{\"params\":{\"url\":\"http://localhost:8084/mcp\",\"headers\":{\"MATH\":\"sk-test-api-key\"},\"timeout\":30,\"sse_read_timeout\":300},\"tools\":[\"k8s_get_resources\"]}],\"stream\":false}"
7374
}
7475
},
@@ -138,7 +139,7 @@
138139
"template": {
139140
"metadata": {
140141
"annotations": {
141-
"kagent.dev/config-hash": "5747732709328998873"
142+
"kagent.dev/config-hash": "4534869863837852487"
142143
},
143144
"labels": {
144145
"app": "kagent",

go/core/internal/controller/translator/agent/testdata/outputs/agent_with_mcp_service.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
],
1414
"description": "",
1515
"name": "agent",
16+
"preferredTransport": "JSONRPC",
1617
"skills": null,
1718
"url": "http://agent.test:8080",
1819
"version": ""
@@ -64,7 +65,7 @@
6465
]
6566
},
6667
"stringData": {
67-
"agent-card.json": "{\"name\":\"agent\",\"description\":\"\",\"url\":\"http://agent.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[]}",
68+
"agent-card.json": "{\"name\":\"agent\",\"description\":\"\",\"url\":\"http://agent.test:8080\",\"version\":\"\",\"capabilities\":{\"streaming\":true,\"pushNotifications\":false,\"stateTransitionHistory\":true},\"defaultInputModes\":[\"text\"],\"defaultOutputModes\":[\"text\"],\"skills\":[],\"preferredTransport\":\"JSONRPC\"}",
6869
"config.json": "{\"model\":{\"type\":\"openai\",\"model\":\"gpt-4o\",\"base_url\":\"\"},\"description\":\"\",\"instruction\":\"You are a math toolserver. Focus on solving mathematical problems step by step.\",\"http_tools\":[{\"params\":{\"url\":\"http://toolserver.test:8084/mcp\",\"headers\":{}},\"tools\":[\"k8s_get_resources\"]}],\"stream\":false}"
6970
}
7071
},
@@ -134,7 +135,7 @@
134135
"template": {
135136
"metadata": {
136137
"annotations": {
137-
"kagent.dev/config-hash": "16446945615890817909"
138+
"kagent.dev/config-hash": "12595169530626754046"
138139
},
139140
"labels": {
140141
"app": "kagent",

0 commit comments

Comments
 (0)