Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions spec/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

</project>
5 changes: 5 additions & 0 deletions spec/src/main/java/io/a2a/spec/APIKeySecurityScheme.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,17 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.annotation.JsonValue;

import io.a2a.util.Assert;

import static io.a2a.spec.APIKeySecurityScheme.API_KEY;

/**
* Defines a security scheme using an API key.
*/
@JsonTypeName(API_KEY)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public final class APIKeySecurityScheme implements SecurityScheme {
Expand Down Expand Up @@ -64,6 +68,7 @@ public APIKeySecurityScheme(@JsonProperty("in") String in, @JsonProperty("name")
@JsonProperty("description") String description, @JsonProperty("type") String type) {
Assert.checkNotNullParam("in", in);
Assert.checkNotNullParam("name", name);
Assert.checkNotNullParam("type", type);
if (! type.equals(API_KEY)) {
throw new IllegalArgumentException("Invalid type for APIKeySecurityScheme");
}
Expand Down
5 changes: 5 additions & 0 deletions spec/src/main/java/io/a2a/spec/DataPart.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,20 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.a2a.util.Assert;

import static io.a2a.spec.DataPart.DATA;

/**
* Represents a structured data segment (e.g., JSON) within a message or artifact.
*/
@JsonTypeName(DATA)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public class DataPart extends Part<Map<String, Object>> {

public static final String DATA = "data";
private final Map<String, Object> data;
private final Map<String, Object> metadata;
private final Kind kind;
Expand Down
2 changes: 1 addition & 1 deletion spec/src/main/java/io/a2a/spec/EventKind.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "kind",
visible = true
)
Expand Down
5 changes: 5 additions & 0 deletions spec/src/main/java/io/a2a/spec/FilePart.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,21 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.a2a.util.Assert;

import static io.a2a.spec.FilePart.FILE;

/**
* Represents a file segment within a message or artifact. The file content can be
* provided either directly as bytes or as a URI.
*/
@JsonTypeName(FILE)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public class FilePart extends Part<FileContent> {

public static final String FILE = "file";
private final FileContent file;
private final Map<String, Object> metadata;
private final Kind kind;
Expand Down
5 changes: 5 additions & 0 deletions spec/src/main/java/io/a2a/spec/HTTPAuthSecurityScheme.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,15 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import com.fasterxml.jackson.annotation.JsonTypeName;
import io.a2a.util.Assert;

import static io.a2a.spec.HTTPAuthSecurityScheme.HTTP;

/**
* Defines a security scheme using HTTP authentication.
*/
@JsonTypeName(HTTP)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public final class HTTPAuthSecurityScheme implements SecurityScheme {
Expand All @@ -28,6 +32,7 @@ public HTTPAuthSecurityScheme(String bearerFormat, String scheme, String descrip
public HTTPAuthSecurityScheme(@JsonProperty("bearerFormat") String bearerFormat, @JsonProperty("scheme") String scheme,
@JsonProperty("description") String description, @JsonProperty("type") String type) {
Assert.checkNotNullParam("scheme", scheme);
Assert.checkNotNullParam("type", type);
if (! type.equals(HTTP)) {
throw new IllegalArgumentException("Invalid type for HTTPAuthSecurityScheme");
}
Expand Down
4 changes: 4 additions & 0 deletions spec/src/main/java/io/a2a/spec/Message.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,17 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.core.type.TypeReference;
import io.a2a.util.Assert;

import static io.a2a.spec.Message.MESSAGE;

/**
* Represents a single message in the conversation between a user and an agent.
*/
@JsonTypeName(MESSAGE)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public final class Message implements EventKind, StreamingEventKind {
Expand Down
6 changes: 6 additions & 0 deletions spec/src/main/java/io/a2a/spec/MutualTLSSecurityScheme.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.a2a.util.Assert;

import static io.a2a.spec.MutualTLSSecurityScheme.MUTUAL_TLS;

/**
* Defines a security scheme using mTLS authentication.
*/
@JsonTypeName(MUTUAL_TLS)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public final class MutualTLSSecurityScheme implements SecurityScheme {
Expand All @@ -27,6 +32,7 @@ public MutualTLSSecurityScheme() {
@JsonCreator
public MutualTLSSecurityScheme(@JsonProperty("description") String description,
@JsonProperty("type") String type) {
Assert.checkNotNullParam("type", type);
if (!type.equals(MUTUAL_TLS)) {
throw new IllegalArgumentException("Invalid type for MutualTLSSecurityScheme");
}
Expand Down
5 changes: 5 additions & 0 deletions spec/src/main/java/io/a2a/spec/OAuth2SecurityScheme.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,15 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import com.fasterxml.jackson.annotation.JsonTypeName;
import io.a2a.util.Assert;

import static io.a2a.spec.OAuth2SecurityScheme.OAUTH2;

/**
* Defines a security scheme using OAuth 2.0.
*/
@JsonTypeName(OAUTH2)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public final class OAuth2SecurityScheme implements SecurityScheme {
Expand All @@ -28,6 +32,7 @@ public OAuth2SecurityScheme(OAuthFlows flows, String description, String oauth2M
public OAuth2SecurityScheme(@JsonProperty("flows") OAuthFlows flows, @JsonProperty("description") String description,
@JsonProperty("oauth2MetadataUrl") String oauth2MetadataUrl, @JsonProperty("type") String type) {
Assert.checkNotNullParam("flows", flows);
Assert.checkNotNullParam("type", type);
if (!type.equals(OAUTH2)) {
throw new IllegalArgumentException("Invalid type for OAuth2SecurityScheme");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.a2a.util.Assert;

import static io.a2a.spec.OpenIdConnectSecurityScheme.OPENID_CONNECT;

/**
* Defines a security scheme using OpenID Connect.
*/
@JsonTypeName(OPENID_CONNECT)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public final class OpenIdConnectSecurityScheme implements SecurityScheme {
Expand All @@ -24,6 +29,8 @@ public OpenIdConnectSecurityScheme(String openIdConnectUrl, String description)
@JsonCreator
public OpenIdConnectSecurityScheme(@JsonProperty("openIdConnectUrl") String openIdConnectUrl,
@JsonProperty("description") String description, @JsonProperty("type") String type) {
Assert.checkNotNullParam("type", type);
Assert.checkNotNullParam("openIdConnectUrl", openIdConnectUrl);
if (!type.equals(OPENID_CONNECT)) {
throw new IllegalArgumentException("Invalid type for OpenIdConnectSecurityScheme");
}
Expand Down
8 changes: 4 additions & 4 deletions spec/src/main/java/io/a2a/spec/Part.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@
*/
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "kind",
visible = true
)
@JsonSubTypes({
@JsonSubTypes.Type(value = TextPart.class, name = "text"),
@JsonSubTypes.Type(value = FilePart.class, name = "file"),
@JsonSubTypes.Type(value = DataPart.class, name = "data")
@JsonSubTypes.Type(value = TextPart.class, name = TextPart.TEXT),
@JsonSubTypes.Type(value = FilePart.class, name = FilePart.FILE),
@JsonSubTypes.Type(value = DataPart.class, name = DataPart.DATA)
})
public abstract class Part<T> {
public enum Kind {
Expand Down
2 changes: 1 addition & 1 deletion spec/src/main/java/io/a2a/spec/SecurityScheme.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "type",
visible = true
)
Expand Down
2 changes: 1 addition & 1 deletion spec/src/main/java/io/a2a/spec/StreamingEventKind.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "kind",
visible = true
)
Expand Down
4 changes: 4 additions & 0 deletions spec/src/main/java/io/a2a/spec/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.core.type.TypeReference;
import io.a2a.util.Assert;

import static io.a2a.spec.Task.TASK;

/**
* Represents a single, stateful operation or conversation between a client and an agent.
*/
@JsonTypeName(TASK)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public final class Task implements EventKind, StreamingEventKind {
Expand Down
4 changes: 4 additions & 0 deletions spec/src/main/java/io/a2a/spec/TaskArtifactUpdateEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,16 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.a2a.util.Assert;

import static io.a2a.spec.TaskArtifactUpdateEvent.ARTIFACT_UPDATE;

/**
* An event sent by the agent to notify the client that an artifact has been
* generated or updated. This is typically used in streaming models.
*/
@JsonTypeName(ARTIFACT_UPDATE)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public final class TaskArtifactUpdateEvent implements EventKind, StreamingEventKind, UpdateEvent {
Expand Down
4 changes: 4 additions & 0 deletions spec/src/main/java/io/a2a/spec/TaskStatusUpdateEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,16 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.a2a.util.Assert;

import static io.a2a.spec.TaskStatusUpdateEvent.STATUS_UPDATE;

/**
* An event sent by the agent to notify the client of a change in a task's status.
* This is typically used in streaming or subscription models.
*/
@JsonTypeName(STATUS_UPDATE)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public final class TaskStatusUpdateEvent implements EventKind, StreamingEventKind, UpdateEvent {
Expand Down
6 changes: 6 additions & 0 deletions spec/src/main/java/io/a2a/spec/TextPart.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,20 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.a2a.util.Assert;

import static io.a2a.spec.TextPart.TEXT;

/**
* Represents a text segment within a message or artifact.
*/
@JsonTypeName(TEXT)
@JsonInclude(JsonInclude.Include.NON_ABSENT)
@JsonIgnoreProperties(ignoreUnknown = true)
public class TextPart extends Part<String> {

public static final String TEXT = "text";
private final String text;
private final Map<String, Object> metadata;
private final Kind kind;
Expand Down
Loading