diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
index 549bbb1..a984c0a 100644
--- a/.github/workflows/build-and-test.yml
+++ b/.github/workflows/build-and-test.yml
@@ -7,6 +7,8 @@ on:
pull_request:
branches:
- main
+ workflow_dispatch:
+
# Only run the latest job
concurrency:
diff --git a/.github/workflows/run-tck.yml b/.github/workflows/run-tck.yml
index b60a8ad..807970f 100644
--- a/.github/workflows/run-tck.yml
+++ b/.github/workflows/run-tck.yml
@@ -2,12 +2,8 @@ name: Build and Run TCK
on:
push:
- branches:
-# - main
pull_request:
- branches:
-# - main
-
+ workflow_dispatch:
env:
# Tag of the TCK
diff --git a/pom.xml b/pom.xml
index 239762c..3cb8ea8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -117,6 +117,11 @@
a2a-java-sdk-spec
${version.sdk}
+
+ io.github.a2asdk
+ a2a-tck-server
+ ${version.sdk}
+
io.github.a2asdk
a2a-java-sdk-tests-server-common
diff --git a/tck/pom.xml b/tck/pom.xml
index 69b3aec..8e2af7b 100644
--- a/tck/pom.xml
+++ b/tck/pom.xml
@@ -34,6 +34,16 @@
a2a-java-sdk-spec
provided
+
+ io.github.a2asdk
+ a2a-tck-server
+
+
+ *
+ *
+
+
+
jakarta.annotation
jakarta.annotation-api
diff --git a/tck/src/main/java/org/wildfly/extras/a2a/server/jakarta/tck/AgentCardProducer.java b/tck/src/main/java/org/wildfly/extras/a2a/server/jakarta/tck/AgentCardProducer.java
deleted file mode 100644
index 0b4a752..0000000
--- a/tck/src/main/java/org/wildfly/extras/a2a/server/jakarta/tck/AgentCardProducer.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.wildfly.extras.a2a.server.jakarta.tck;
-
-import java.util.Collections;
-import java.util.List;
-
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.enterprise.inject.Produces;
-
-import io.a2a.server.PublicAgentCard;
-import io.a2a.spec.AgentCapabilities;
-import io.a2a.spec.AgentCard;
-import io.a2a.spec.AgentSkill;
-
-/**
- * This is a copy of the AgentCardProducer from the a2a-java SDK's tck/ module
- */
-@ApplicationScoped
-public class AgentCardProducer {
-
- @Produces
- @PublicAgentCard
- public AgentCard agentCard() {
- return new AgentCard.Builder()
- .name("Hello World Agent")
- .description("Just a hello world agent")
- .url("http://localhost:9999")
- .version("1.0.0")
- .documentationUrl("http://example.com/docs")
- .capabilities(new AgentCapabilities.Builder()
- .streaming(true)
- .pushNotifications(true)
- .stateTransitionHistory(true)
- .build())
- .defaultInputModes(Collections.singletonList("text"))
- .defaultOutputModes(Collections.singletonList("text"))
- .skills(Collections.singletonList(new AgentSkill.Builder()
- .id("hello_world")
- .name("Returns hello world")
- .description("just returns hello world")
- .tags(Collections.singletonList("hello world"))
- .examples(List.of("hi", "hello world"))
- .build()))
- .protocolVersion("0.2.5")
- .build();
- }
-}
-
diff --git a/tck/src/main/java/org/wildfly/extras/a2a/server/jakarta/tck/AgentExecutorProducer.java b/tck/src/main/java/org/wildfly/extras/a2a/server/jakarta/tck/AgentExecutorProducer.java
deleted file mode 100644
index 4a2df0c..0000000
--- a/tck/src/main/java/org/wildfly/extras/a2a/server/jakarta/tck/AgentExecutorProducer.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.wildfly.extras.a2a.server.jakarta.tck;
-
-import jakarta.annotation.PreDestroy;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.enterprise.inject.Produces;
-
-import io.a2a.server.agentexecution.AgentExecutor;
-import io.a2a.server.agentexecution.RequestContext;
-import io.a2a.server.events.EventQueue;
-import io.a2a.server.tasks.TaskUpdater;
-import io.a2a.spec.JSONRPCError;
-import io.a2a.spec.Task;
-import io.a2a.spec.TaskNotCancelableError;
-import io.a2a.spec.TaskNotFoundError;
-import io.a2a.spec.TaskState;
-import io.a2a.spec.TaskStatus;
-import io.a2a.spec.TaskStatusUpdateEvent;
-
-/**
- * This is a copy of the AgentExecutorProducer from the a2a-java SDK's tck/ module
- */
-@ApplicationScoped
-public class AgentExecutorProducer {
-
- @Produces
- public AgentExecutor agentExecutor() {
- return new FireAndForgetAgentExecutor();
- }
-
- private static class FireAndForgetAgentExecutor implements AgentExecutor {
- @Override
- public void execute(RequestContext context, EventQueue eventQueue) throws JSONRPCError {
- Task task = context.getTask();
-
- if (context.getMessage().getTaskId() != null && task == null && context.getMessage().getTaskId().startsWith("non-existent")) {
- throw new TaskNotFoundError();
- }
-
- if (task == null) {
- task = new Task.Builder()
- .id(context.getTaskId())
- .contextId(context.getContextId())
- .status(new TaskStatus(TaskState.SUBMITTED))
- .history(context.getMessage())
- .build();
- eventQueue.enqueueEvent(task);
- }
-
- TaskUpdater updater = new TaskUpdater(context, eventQueue);
-
- // Immediately set to WORKING state
- updater.startWork();
- System.out.println("====> task set to WORKING, starting background execution");
-
- // Method returns immediately - task continues in background
- System.out.println("====> execute() method returning immediately, task running in background");
- }
-
- @Override
- public void cancel(RequestContext context, EventQueue eventQueue) throws JSONRPCError {
- System.out.println("====> task cancel request received");
- Task task = context.getTask();
-
- if (task.getStatus().state() == TaskState.CANCELED) {
- System.out.println("====> task already canceled");
- throw new TaskNotCancelableError();
- }
-
- if (task.getStatus().state() == TaskState.COMPLETED) {
- System.out.println("====> task already completed");
- throw new TaskNotCancelableError();
- }
-
- TaskUpdater updater = new TaskUpdater(context, eventQueue);
- updater.cancel();
- eventQueue.enqueueEvent(new TaskStatusUpdateEvent.Builder()
- .taskId(task.getId())
- .contextId(task.getContextId())
- .status(new TaskStatus(TaskState.CANCELED))
- .isFinal(true)
- .build());
-
- System.out.println("====> task canceled");
- }
-
- /**
- * Cleanup method for proper resource management
- */
- @PreDestroy
- public void cleanup() {
- System.out.println("====> shutting down task executor");
- }
- }
-}
\ No newline at end of file