diff --git a/dap-gateway/src/main/resources/static/catalog.html b/dap-gateway/src/main/resources/static/catalog.html
index a8a6de37..6e89d177 100644
--- a/dap-gateway/src/main/resources/static/catalog.html
+++ b/dap-gateway/src/main/resources/static/catalog.html
@@ -215,9 +215,10 @@
const badgeBorder = isDirect ? 'rgba(59,130,246,0.3)' : 'rgba(249,115,22,0.3)';
let paramHtml = '';
- if (tool.parametersSchema && tool.parametersSchema.properties) {
- const props = tool.parametersSchema.properties;
- const required = tool.parametersSchema.required || [];
+ const schema = tool.inputSchema || tool.parametersSchema;
+ if (schema && schema.properties) {
+ const props = schema.properties;
+ const required = schema.required || [];
if (Object.keys(props).length > 0) {
paramHtml = `
diff --git a/dap-gateway/src/main/resources/static/playground.html b/dap-gateway/src/main/resources/static/playground.html
index 95b97f95..154d93ce 100644
--- a/dap-gateway/src/main/resources/static/playground.html
+++ b/dap-gateway/src/main/resources/static/playground.html
@@ -217,7 +217,7 @@
const option = document.createElement('option');
option.value = tool.name;
option.textContent = tool.name;
- option.dataset.schema = JSON.stringify(tool.parametersSchema);
+ option.dataset.schema = JSON.stringify(tool.inputSchema || tool.parametersSchema);
option.dataset.prompts = JSON.stringify(tool.actionPrompts || {});
option.dataset.integrationType = tool.integrationType || 'HTTP';
optgroup.appendChild(option);
diff --git a/dap-gateway/src/main/resources/static/static/index.html b/dap-gateway/src/main/resources/static/static/index.html
index d76cf5cb..bfea6b77 100644
--- a/dap-gateway/src/main/resources/static/static/index.html
+++ b/dap-gateway/src/main/resources/static/static/index.html
@@ -351,12 +351,13 @@
option.value = tool.toolName;
const commType = tool.integrationType ? tool.integrationType : 'HTTP';
option.textContent = tool.description ? `[${commType}] ${tool.description} (${tool.toolName})` : `[${commType}] ${tool.toolName}`;
- option.dataset.schema = JSON.stringify(tool.parametersSchema);
+ option.dataset.schema = JSON.stringify(tool.inputSchema || tool.parametersSchema);
option.dataset.prompts = JSON.stringify(tool.actionPrompts || {});
optgroup.appendChild(option);
- const enums = tool.parametersSchema?.properties?.action?.enum || [];
- const descStr = tool.parametersSchema?.properties?.action?.description || "";
+ const schema = tool.inputSchema || tool.parametersSchema;
+ const enums = schema?.properties?.action?.enum || [];
+ const descStr = schema?.properties?.action?.description || "";
let descMap = {};
if(descStr.includes(":")) {
diff --git a/dap-gateway/src/main/resources/static/tester.html b/dap-gateway/src/main/resources/static/tester.html
index 137af8f4..c589a361 100644
--- a/dap-gateway/src/main/resources/static/tester.html
+++ b/dap-gateway/src/main/resources/static/tester.html
@@ -331,7 +331,7 @@
function generateDummyPayload(tool) {
if (tool._customPayload) return tool._customPayload;
- const schema = tool.parametersSchema;
+ const schema = tool.inputSchema || tool.parametersSchema;
if (!schema || !schema.properties) return {};
const payload = {};
for (const [key, value] of Object.entries(schema.properties)) {
@@ -705,7 +705,7 @@
}
function renderSmartForm(tool, payloadToUse = null) {
- const schema = tool.parametersSchema;
+ const schema = tool.inputSchema || tool.parametersSchema;
const form = document.getElementById('payloadFormContainer');
form.innerHTML = '';
@@ -739,7 +739,7 @@
inputHtml = `
`;
}
- let reqStar = (schema.required && schema.required.includes(key)) ? '
*' : '';
+ let reqStar = ((tool.inputSchema || tool.parametersSchema)?.required?.includes(key)) ? '
*' : '';
html += `
${inputHtml}
diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/dto/ToolMetadata.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/dto/ToolMetadata.java
index d329d77b..909cd3dc 100644
--- a/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/dto/ToolMetadata.java
+++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/mcc/dto/ToolMetadata.java
@@ -12,7 +12,9 @@ import java.util.Map;
import java.util.Set;
import java.util.List;
import java.util.HashSet;
+import java.util.HashMap;
import io.shinhanlife.dap.lib.dto.OperationType;
+import com.fasterxml.jackson.annotation.JsonProperty;
/**
* Tool(Agent)의 명세 및 라우팅 정보를 담고 있는 메타데이터 클래스
* Redis 레지스트리에 저장되며, Planner와 Router 간의 통신 객체(Plan)로 사용됩니다.
@@ -55,6 +57,7 @@ public class ToolMetadata {
private List requiredEnvKeys;
// 2. 파라미터 스키마 (JSON Schema 형태의 Map)
+ @JsonProperty("inputSchema")
private Map parametersSchema;
private Map outputSchema;
@@ -143,4 +146,31 @@ public class ToolMetadata {
if (parametersSchema == null || !parametersSchema.containsKey("required")) return Set.of();
return new HashSet<>((List) parametersSchema.get("required"));
}
+
+ @JsonProperty("_meta")
+ public Map get_meta() {
+ Map meta = new HashMap<>();
+ meta.put("uid", this.uid);
+ meta.put("semver", this.semver);
+ meta.put("moduleName", this.moduleName);
+ meta.put("categoryKey", this.categoryKey);
+ meta.put("endpoint", this.endpoint);
+ meta.put("podUrl", this.podUrl);
+ meta.put("visible", this.visible);
+ meta.put("enabled", this.enabled);
+ meta.put("isRegistered", this.isRegistered);
+ meta.put("requiresApproval", this.requiresApproval);
+ meta.put("readOnlyHint", this.readOnlyHint);
+ meta.put("destructiveHint", this.destructiveHint);
+ meta.put("idempotentHint", this.idempotentHint);
+ meta.put("openWorldHint", this.openWorldHint);
+ meta.put("integrationType", this.integrationType);
+ meta.put("mciServiceId", this.mciServiceId);
+ meta.put("operationType", this.operationType);
+ meta.put("retryEnabled", this.retryEnabled);
+ meta.put("circuitBreakerFailureThreshold", this.circuitBreakerFailureThreshold);
+ meta.put("circuitBreakerOpenMillis", this.circuitBreakerOpenMillis);
+ meta.put("timeoutMillis", this.timeoutMillis);
+ return meta;
+ }
}