From 383ab92e98bd410db3c39e370bbfaccafe65f913 Mon Sep 17 00:00:00 2001 From: jade Date: Sat, 11 Jul 2026 02:07:35 +0900 Subject: [PATCH] fix: correctly place template downloadUrl inside contracts and calculate original_size --- .../presentation/BusinessToolController.java | 27 ++++++++++++++++--- .../tool/service/TemplateUtilityService.java | 11 +++++--- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/presentation/BusinessToolController.java b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/presentation/BusinessToolController.java index 1011405..971f436 100644 --- a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/presentation/BusinessToolController.java +++ b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/presentation/BusinessToolController.java @@ -204,15 +204,20 @@ public class BusinessToolController { // 5. 결과 조립 (JSON-RPC 응답 - Agent Builder 규격 적용) Map innerResult = new HashMap<>(); - if (methodResult instanceof Map) { + if (methodResult instanceof Map && ((Map) methodResult).containsKey("contracts")) { innerResult.putAll((Map) methodResult); - } - if (!innerResult.containsKey("contracts")) { + } else { List contracts = new ArrayList<>(); if (methodResult != null) { contracts.add(methodResult); } innerResult.put("contracts", contracts); + + if (methodResult instanceof Map && ((Map) methodResult).containsKey("status")) { + innerResult.put("status", ((Map) methodResult).get("status")); + } else { + innerResult.put("status", "SUCCESS"); + } } Map resultPayload = new HashMap<>(); @@ -222,7 +227,21 @@ public class BusinessToolController { resultPayload.put("error_message", null); resultPayload.put("elapsed_ms", elapsed); resultPayload.put("truncated", false); - resultPayload.put("original_size", 0); + int originalSize = 0; + try { + if (methodResult instanceof Map && ((Map) methodResult).containsKey("legacy_response")) { + Object legacyResp = ((Map) methodResult).get("legacy_response"); + if (legacyResp instanceof String) { + originalSize = ((String) legacyResp).getBytes(java.nio.charset.StandardCharsets.UTF_8).length; + } + } else { + String jsonStr = objectMapper.writeValueAsString(innerResult); + originalSize = jsonStr.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; + } + } catch (Exception e) { + log.warn("Failed to calculate original_size", e); + } + resultPayload.put("original_size", originalSize); Map rpcResponse = new java.util.LinkedHashMap<>(); // 순서 보장을 위해 LinkedHashMap 사용 rpcResponse.put("jsonrpc", "2.0"); diff --git a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java index 49c45b8..4122a2c 100644 --- a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java +++ b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java @@ -44,9 +44,14 @@ public class TemplateUtilityService extends AbstractMcpToolService { Map result = new java.util.HashMap<>(); result.put("status", "success"); - result.put("fileName", fileName); - result.put("downloadUrl", downloadUrl); - result.put("message", "다운로드 링크가 성공적으로 생성되었습니다. AI는 이 링크를 마크다운 형식으로 사용자에게 전달해야 합니다."); + + Map contract = new java.util.HashMap<>(); + contract.put("fileName", fileName); + contract.put("downloadUrl", downloadUrl); + contract.put("message", "다운로드 링크가 성공적으로 생성되었습니다. AI는 이 링크를 마크다운 형식으로 사용자에게 전달해야 합니다."); + contract.put("status", "success"); + + result.put("contracts", java.util.Collections.singletonList(contract)); return result; } catch (Exception e) {