diff --git a/backend/src/app/binfile/v1.clj b/backend/src/app/binfile/v1.clj index d5716f1920..cb786db487 100644 --- a/backend/src/app/binfile/v1.clj +++ b/backend/src/app/binfile/v1.clj @@ -305,8 +305,9 @@ (defn write-export! [{:keys [::bfc/include-libraries ::bfc/embed-assets] :as cfg}] (when (and include-libraries embed-assets) - (throw (IllegalArgumentException. - "the `include-libraries` and `embed-assets` are mutally excluding options"))) + (ex/raise :type :validation + :code :incompatible-options + :hint "the `include-libraries` and `embed-assets` are mutually exclusive options")) (write-export cfg)) diff --git a/mcp/packages/server/src/ToolResponse.ts b/mcp/packages/server/src/ToolResponse.ts index 40bfc9e512..3e51592693 100644 --- a/mcp/packages/server/src/ToolResponse.ts +++ b/mcp/packages/server/src/ToolResponse.ts @@ -10,12 +10,19 @@ export class TextContent implements TextItem { constructor(public text: string) {} /** - * @param data - Text data as string or as object (from JSON representation where indices are mapped to character codes) + * @param data - Text data as string or as object (wrapped base64 data or JSON representation of array where + * indices are mapped to character codes) */ public static textData(data: string | object): string { if (typeof data === "object") { - // convert object containing character codes (as obtained from JSON conversion of string) back to string - return String.fromCharCode(...(Object.values(data) as number[])); + // check for wrapped base64 data + if ("__type" in data && data["__type"] === "base64" && "data" in data && typeof data["data"] === "string") { + return Buffer.from(data["data"], "base64").toString("utf-8"); + } + // legacy fallback: assume object containing character codes (as obtained from direct JSON conversion) + else { + return String.fromCharCode(...(Object.values(data) as number[])); + } } else { return data; } @@ -84,8 +91,8 @@ export class TextResponse extends ToolResponse { } /** - * Creates a TextResponse from text data given as string or as object (from JSON representation where indices are mapped to - * character codes). + * Creates a TextResponse from text data given as string or as object (wrapped base64 data or JSON representation + * of array where indices are mapped to character codes). * * @param data - Text data as string or as object (from JSON representation where indices are mapped to character codes) */