Skip to content

Commit 032a5a4

Browse files
authored
Merge pull request #111 from fjuma/spec
Add support for extensions
2 parents 0f09faf + 5c72453 commit 032a5a4

File tree

6 files changed

+100
-5
lines changed

6 files changed

+100
-5
lines changed

examples/src/main/java/io/a2a/examples/helloworld/server/AgentCardProducer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ public AgentCard agentCard() {
2323
.url("http://localhost:9999")
2424
.version("1.0.0")
2525
.documentationUrl("http://example.com/docs")
26-
.capabilities(new AgentCapabilities(true, true, true))
26+
.capabilities(new AgentCapabilities.Builder()
27+
.streaming(true)
28+
.pushNotifications(true)
29+
.stateTransitionHistory(true)
30+
.build())
2731
.defaultInputModes(Collections.singletonList("text"))
2832
.defaultOutputModes(Collections.singletonList("text"))
2933
.skills(Collections.singletonList(new AgentSkill.Builder()
Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,42 @@
11
package io.a2a.spec;
22

3+
import java.util.List;
4+
35
/**
46
* An agent's capabilities.
57
*/
6-
public record AgentCapabilities(boolean streaming, boolean pushNotifications, boolean stateTransitionHistory) {
8+
public record AgentCapabilities(boolean streaming, boolean pushNotifications, boolean stateTransitionHistory,
9+
List<AgentExtension> extensions) {
10+
11+
public static class Builder {
12+
13+
private boolean streaming;
14+
private boolean pushNotifications;
15+
private boolean stateTransitionHistory;
16+
private List<AgentExtension> extensions;
17+
18+
public Builder streaming(boolean streaming) {
19+
this.streaming = streaming;
20+
return this;
21+
}
22+
23+
public Builder pushNotifications(boolean pushNotifications) {
24+
this.pushNotifications = pushNotifications;
25+
return this;
26+
}
27+
28+
public Builder stateTransitionHistory(boolean stateTransitionHistory) {
29+
this.stateTransitionHistory = stateTransitionHistory;
30+
return this;
31+
}
32+
33+
public Builder extensions(List<AgentExtension> extensions) {
34+
this.extensions = extensions;
35+
return this;
36+
}
37+
38+
public AgentCapabilities build() {
39+
return new AgentCapabilities(streaming, pushNotifications, stateTransitionHistory, extensions);
40+
}
41+
}
742
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package io.a2a.spec;
2+
3+
import java.util.Map;
4+
5+
import io.a2a.util.Assert;
6+
7+
public record AgentExtension (String description, Map<String, Object> params, boolean required, String uri) {
8+
9+
public AgentExtension {
10+
Assert.checkNotNullParam("uri", uri);
11+
}
12+
13+
public static class Builder {
14+
String description;
15+
Map<String, Object> params;
16+
boolean required;
17+
String uri;
18+
19+
public Builder description(String description) {
20+
this.description = description;
21+
return this;
22+
}
23+
24+
public Builder params(Map<String, Object> params) {
25+
this.params = params;
26+
return this;
27+
}
28+
29+
public Builder required(boolean required) {
30+
this.required = required;
31+
return this;
32+
}
33+
34+
public Builder uri(String uri) {
35+
this.uri = uri;
36+
return this;
37+
}
38+
39+
public AgentExtension build() {
40+
return new AgentExtension(description, params, required, uri);
41+
}
42+
}
43+
44+
}

src/test/java/io/a2a/server/apps/AgentCardProducer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ public AgentCard agentCard() {
2222
.url("http://localhost:8081")
2323
.version("1.0")
2424
.documentationUrl("http://example.com/docs")
25-
.capabilities(new AgentCapabilities(true, true, true))
25+
.capabilities(new AgentCapabilities.Builder()
26+
.streaming(true)
27+
.pushNotifications(true)
28+
.stateTransitionHistory(true)
29+
.build())
2630
.defaultInputModes(Collections.singletonList("text"))
2731
.defaultOutputModes(Collections.singletonList("text"))
2832
.skills(new ArrayList<>())

src/test/java/io/a2a/server/requesthandlers/JSONRPCHandlerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1251,7 +1251,11 @@ private static AgentCard createAgentCard(boolean streaming, boolean pushNotifica
12511251
.url("http://example.com")
12521252
.version("1.0")
12531253
.documentationUrl("http://example.com/docs")
1254-
.capabilities(new AgentCapabilities(streaming, pushNotifications, stateTransitionHistory))
1254+
.capabilities(new AgentCapabilities.Builder()
1255+
.streaming(streaming)
1256+
.pushNotifications(pushNotifications)
1257+
.stateTransitionHistory(stateTransitionHistory)
1258+
.build())
12551259
.defaultInputModes(new ArrayList<>())
12561260
.defaultOutputModes(new ArrayList<>())
12571261
.skills(new ArrayList<>())

tck/src/main/java/io/a2a/tck/server/AgentCardProducer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ public AgentCard agentCard() {
2323
.url("http://localhost:9999")
2424
.version("1.0.0")
2525
.documentationUrl("http://example.com/docs")
26-
.capabilities(new AgentCapabilities(true, true, true))
26+
.capabilities(new AgentCapabilities.Builder()
27+
.streaming(true)
28+
.pushNotifications(true)
29+
.stateTransitionHistory(true)
30+
.build())
2731
.defaultInputModes(Collections.singletonList("text"))
2832
.defaultOutputModes(Collections.singletonList("text"))
2933
.skills(Collections.singletonList(new AgentSkill.Builder()

0 commit comments

Comments
 (0)