Skip to content

Commit aba3ff4

Browse files
committed
fix(agentic-ai): address PR review comments for AgentCore Harness
- Rename template to 'Amazon Bedrock AgentCore Managed Agent (Alpha)' - Add [Alpha] prefix to description and 'Amazon' keyword - Update engine version to ^8.10 - Revert log level from INFO to DEBUG - Rename AgentCoreHarnessJobWorker to AgentCoreHarnessSubProcess - Add session timeout documentation comment - Remove unused toToolCall method from HarnessMessageConverter
1 parent 882d64d commit aba3ff4

7 files changed

Lines changed: 28 additions & 57 deletions

File tree

connectors/agentic-ai/element-templates/agenticai-agentcore-harness.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"$schema": "https://unpkg.com/@camunda/zeebe-element-templates-json-schema/resources/schema.json",
3-
"name": "AgentCore Managed Agent",
3+
"name": "Amazon Bedrock AgentCore Managed Agent (Alpha)",
44
"id": "io.camunda.connectors.agenticai.agentcore.harness.v1",
5-
"description": "Drive an AWS Bedrock AgentCore Harness through a re-entrant tool-call loop, exposing the AHSP inner elements as inline_function tools.",
6-
"keywords": ["AI", "AI Agent", "AWS", "AgentCore", "Harness", "Bedrock"],
5+
"description": "[Alpha] Drive an Amazon Bedrock AgentCore Harness through a re-entrant tool-call loop, exposing the AHSP inner elements as inline_function tools.",
6+
"keywords": ["AI", "AI Agent", "Amazon", "AWS", "AgentCore", "Harness", "Bedrock"],
77
"version": 1,
88
"category": {
99
"id": "connectors",
@@ -14,7 +14,7 @@
1414
"value": "bpmn:AdHocSubProcess"
1515
},
1616
"engines": {
17-
"camunda": "^8.9"
17+
"camunda": "^8.10"
1818
},
1919
"groups": [
2020
{

connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/agent/JobWorkerAgentRequestHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ private List<ElementActivation> buildElementActivations(AgentResponse agentRespo
170170
if (LOGGER.isTraceEnabled()) {
171171
LOGGER.trace("Activating tool {}: {}", toolCall.metadata().name(), toolCall);
172172
} else {
173-
LOGGER.info("Activating tool {}", toolCall.metadata().name());
173+
LOGGER.debug("Activating tool {}", toolCall.metadata().name());
174174
}
175175

176176
return (ElementActivation)

connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/agentcoreharness/AgentCoreHarnessJobWorker.java renamed to connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/agentcoreharness/AgentCoreHarnessSubProcess.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,21 @@
3535
* inner elements as inline_function tools.
3636
*/
3737
@OutboundConnector(
38-
name = AgentCoreHarnessJobWorker.JOB_WORKER_NAME,
39-
type = AgentCoreHarnessJobWorker.JOB_WORKER_TYPE,
38+
name = AgentCoreHarnessSubProcess.CONNECTOR_NAME,
39+
type = AgentCoreHarnessSubProcess.CONNECTOR_TYPE,
4040
inputVariables = {
41-
AgentCoreHarnessJobWorker.AD_HOC_SUB_PROCESS_ELEMENT_VARIABLE,
42-
AgentCoreHarnessJobWorker.AGENT_CONTEXT_VARIABLE,
43-
AgentCoreHarnessJobWorker.TOOL_CALL_RESULTS_VARIABLE,
44-
AgentCoreHarnessJobWorker.HARNESS_VARIABLE,
45-
AgentCoreHarnessJobWorker.AUTHENTICATION_VARIABLE,
46-
AgentCoreHarnessJobWorker.USER_PROMPT_VARIABLE,
47-
AgentCoreHarnessJobWorker.MAX_ITERATIONS_VARIABLE
41+
AgentCoreHarnessSubProcess.AD_HOC_SUB_PROCESS_ELEMENT_VARIABLE,
42+
AgentCoreHarnessSubProcess.AGENT_CONTEXT_VARIABLE,
43+
AgentCoreHarnessSubProcess.TOOL_CALL_RESULTS_VARIABLE,
44+
AgentCoreHarnessSubProcess.HARNESS_VARIABLE,
45+
AgentCoreHarnessSubProcess.AUTHENTICATION_VARIABLE,
46+
AgentCoreHarnessSubProcess.USER_PROMPT_VARIABLE,
47+
AgentCoreHarnessSubProcess.MAX_ITERATIONS_VARIABLE
4848
})
49-
public class AgentCoreHarnessJobWorker implements AgentConnectorFunction {
49+
public class AgentCoreHarnessSubProcess implements AgentConnectorFunction {
5050

51-
public static final String JOB_WORKER_NAME = "AgentCore Harness Job Worker";
52-
public static final String JOB_WORKER_TYPE = "io.camunda.agenticai:agentcore-harness:1";
51+
public static final String CONNECTOR_NAME = "Amazon Bedrock AgentCore Harness";
52+
public static final String CONNECTOR_TYPE = "io.camunda.agenticai:agentcore-harness:1";
5353

5454
public static final String AD_HOC_SUB_PROCESS_ELEMENT_VARIABLE = "adHocSubProcessElements";
5555
public static final String AGENT_CONTEXT_VARIABLE = "agentContext";
@@ -66,7 +66,7 @@ public class AgentCoreHarnessJobWorker implements AgentConnectorFunction {
6666
private final GatewayToolHandlerRegistry gatewayToolHandlers;
6767
private final AgentResponseHandler responseHandler;
6868

69-
public AgentCoreHarnessJobWorker(
69+
public AgentCoreHarnessSubProcess(
7070
AgentInitializer agentInitializer,
7171
ConversationStoreRegistry conversationStoreRegistry,
7272
AgentLimitsValidator limitsValidator,

connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/agentcoreharness/AgentCoreHarnessAdapter.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,13 @@ public AgentCoreHarnessAiFrameworkChatResponse executeChatRequest(
139139
updatedAgentContext, assistantMessage, sessionId);
140140
}
141141

142+
/**
143+
* Gets existing session ID from agent context or creates a new one.
144+
*
145+
* <p>The runtimeSessionId is used by Harness for conversation continuity across multiple
146+
* InvokeHarness calls. The session is managed by Harness and persists until the Harness
147+
* configuration's idle timeout is reached. Session timeouts are configured in AWS, not here.
148+
*/
142149
private String getOrCreateSessionId(AgentContext agentContext) {
143150
return Optional.ofNullable(agentContext.properties())
144151
.map(props -> props.get(SESSION_ID_PROPERTY))

connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/agentcoreharness/HarnessMessageConverter.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -70,20 +70,6 @@ public List<HarnessMessage> toHarnessMessages(List<Message> messages) {
7070
return result;
7171
}
7272

73-
/**
74-
* Converts a Harness tool use block to a Camunda ToolCall.
75-
*
76-
* @param toolUseBlock the Harness tool use block
77-
* @return Camunda ToolCall
78-
*/
79-
public ToolCall toToolCall(HarnessToolUseBlock toolUseBlock) {
80-
return ToolCall.builder()
81-
.id(toolUseBlock.toolUseId())
82-
.name(toolUseBlock.name())
83-
.arguments(documentToMap(toolUseBlock.input()))
84-
.build();
85-
}
86-
8773
private List<HarnessSystemContentBlock> toSystemContentBlocks(SystemMessage systemMessage) {
8874
return extractTextContent(systemMessage).stream()
8975
.map(text -> HarnessSystemContentBlock.fromText(text))

connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/autoconfigure/AgenticAiConnectorsAutoConfiguration.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import io.camunda.connector.agenticai.aiagent.agent.AgentToolsResolverImpl;
3939
import io.camunda.connector.agenticai.aiagent.agent.JobWorkerAgentRequestHandler;
4040
import io.camunda.connector.agenticai.aiagent.agent.OutboundConnectorAgentRequestHandler;
41-
import io.camunda.connector.agenticai.aiagent.agentcoreharness.AgentCoreHarnessJobWorker;
41+
import io.camunda.connector.agenticai.aiagent.agentcoreharness.AgentCoreHarnessSubProcess;
4242
import io.camunda.connector.agenticai.aiagent.framework.AiFrameworkAdapter;
4343
import io.camunda.connector.agenticai.aiagent.framework.langchain4j.ChatModelHttpProxySupport;
4444
import io.camunda.connector.agenticai.aiagent.framework.langchain4j.configuration.AgenticAiLangchain4JFrameworkConfiguration;
@@ -316,14 +316,14 @@ public AiAgentJobWorker aiAgentJobWorker(JobWorkerAgentRequestHandler agentReque
316316
@ConditionalOnBooleanProperty(
317317
value = "camunda.connector.agenticai.agentcore-harness.enabled",
318318
matchIfMissing = true)
319-
public AgentCoreHarnessJobWorker agentCoreHarnessJobWorker(
319+
public AgentCoreHarnessSubProcess agentCoreHarnessSubProcess(
320320
AgentInitializer agentInitializer,
321321
ConversationStoreRegistry conversationStoreRegistry,
322322
AgentLimitsValidator limitsValidator,
323323
AgentMessagesHandler messagesHandler,
324324
GatewayToolHandlerRegistry gatewayToolHandlers,
325325
AgentResponseHandler responseHandler) {
326-
return new AgentCoreHarnessJobWorker(
326+
return new AgentCoreHarnessSubProcess(
327327
agentInitializer,
328328
conversationStoreRegistry,
329329
limitsValidator,

connectors/agentic-ai/src/test/java/io/camunda/connector/agenticai/aiagent/framework/agentcoreharness/HarnessMessageConverterTest.java

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@
2121
import org.junit.jupiter.api.Test;
2222
import org.junit.jupiter.params.ParameterizedTest;
2323
import org.junit.jupiter.params.provider.NullAndEmptySource;
24-
import software.amazon.awssdk.core.document.Document;
2524
import software.amazon.awssdk.services.bedrockagentcore.model.HarnessConversationRole;
26-
import software.amazon.awssdk.services.bedrockagentcore.model.HarnessToolUseBlock;
2725
import software.amazon.awssdk.services.bedrockagentcore.model.HarnessToolUseStatus;
2826

2927
class HarnessMessageConverterTest {
@@ -156,26 +154,6 @@ void toHarnessMessagesConvertsErrorToolCallResult() {
156154
assertThat(toolResultBlock.status()).isEqualTo(HarnessToolUseStatus.ERROR);
157155
}
158156

159-
@Test
160-
void toToolCallConvertsHarnessToolUseBlock() {
161-
var toolUseBlock =
162-
HarnessToolUseBlock.builder()
163-
.toolUseId("tool_use_abc")
164-
.name("search_database")
165-
.input(
166-
Document.fromMap(
167-
Map.of(
168-
"query", Document.fromString("test query"),
169-
"limit", Document.fromNumber("10"))))
170-
.build();
171-
172-
var result = converter.toToolCall(toolUseBlock);
173-
174-
assertThat(result.id()).isEqualTo("tool_use_abc");
175-
assertThat(result.name()).isEqualTo("search_database");
176-
assertThat(result.arguments()).containsEntry("query", "test query");
177-
}
178-
179157
@Test
180158
void toHarnessMessagesHandlesConversationFlow() {
181159
var messages =

0 commit comments

Comments
 (0)