UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

139 lines (138 loc) 4.9 kB
import "./src-vebZIeLe.js"; import { c as isRecord } from "./record-coerce-DItp3I4t.js"; import { t as stableStringify } from "./stable-stringify-C8X7niaI.js"; import { r as isToolResultError } from "./tool-result-error-CbDLJzG-.js"; //#region src/agents/tool-search-json.ts /** Convert bridge and transcript values into detached JSON-compatible data. */ function toToolSearchJsonSafe(value) { if (value === void 0) return null; try { const serialized = JSON.stringify(value); return serialized === void 0 ? null : JSON.parse(serialized); } catch { if (value instanceof Error) return value.message; if (value === null) return null; switch (typeof value) { case "string": return value; case "number": case "boolean": case "bigint": case "symbol": case "function": return String(value); default: return Object.prototype.toString.call(value); } } } //#endregion //#region src/agents/mcp-content.ts const mcpCodeModeGuestResults = /* @__PURE__ */ new WeakMap(); function setMcpCodeModeGuestResult(result, value) { mcpCodeModeGuestResults.set(result, value); return result; } function setMcpCodeModeGuestResultFromAgentResult(result) { return setMcpCodeModeGuestResult(result, { content: result.content, isError: isToolResultError(result) }); } function transferMcpCodeModeGuestResult(source, target) { if (mcpCodeModeGuestResults.has(source)) { mcpCodeModeGuestResults.set(target, mcpCodeModeGuestResults.get(source)); mcpCodeModeGuestResults.delete(source); } return target; } function consumeMcpCodeModeGuestResult(result) { const value = mcpCodeModeGuestResults.get(result); if (!mcpCodeModeGuestResults.delete(result)) return; const safe = toToolSearchJsonSafe(value); if (isRecord(safe)) delete safe._meta; return safe; } function stringifyMcpContent(value) { try { return JSON.stringify(value) ?? String(value); } catch { return String(value); } } /** Converts untrusted MCP content into the agent text/image contract. */ function mcpContentBlockToAgentContent(block) { if (!isRecord(block)) return { type: "text", text: stringifyMcpContent(block) }; switch (block.type) { case "text": if (typeof block.text === "string") return { type: "text", text: block.text }; break; case "image": if (typeof block.data === "string" && typeof block.mimeType === "string") return { type: "image", data: block.data, mimeType: block.mimeType }; break; case "audio": if (typeof block.mimeType === "string") return { type: "text", text: `[audio ${block.mimeType}]` }; break; case "resource_link": { if (typeof block.uri !== "string") break; const label = typeof block.title === "string" ? block.title : typeof block.name === "string" ? block.name : void 0; return { type: "text", text: label ? `[${label}] ${block.uri}` : block.uri }; } case "resource": if (!isRecord(block.resource) || typeof block.resource.uri !== "string") break; return { type: "text", text: (typeof block.resource.text === "string" ? block.resource.text : void 0) ?? block.resource.uri }; } return { type: "text", text: stringifyMcpContent(block) }; } function projectMcpCallToolResultContent(result) { const sourceContent = Array.isArray(result.content) ? result.content : []; if (isRecord(result.structuredContent)) { const mirroredText = JSON.stringify(result.structuredContent, null, 2); return [{ type: "text", text: `structuredContent:\n${JSON.stringify(JSON.parse(stableStringify(result.structuredContent)), null, 2)}` }, ...sourceContent.filter((block) => !isRecord(block) || block.type !== "text" || block.text !== mirroredText).map(mcpContentBlockToAgentContent)]; } return sourceContent.map(mcpContentBlockToAgentContent); } /** Projects a raw MCP CallToolResult exactly once at the model boundary. */ function projectMcpCallToolResult(result, details = {}) { const isError = result.isError === true; const content = projectMcpCallToolResultContent(result); return setMcpCodeModeGuestResult({ content: content.length > 0 ? content : [{ type: "text", text: isError ? "MCP tool failed without returning content." : "MCP tool completed without returning content." }], details: { ...details, ...result.structuredContent !== void 0 ? { structuredContent: result.structuredContent } : {}, ...isError ? { status: "error" } : {} } }, { content: Array.isArray(result.content) ? result.content : [], ...result.structuredContent !== void 0 ? { structuredContent: result.structuredContent } : {}, ...typeof result.isError === "boolean" ? { isError: result.isError } : {} }); } //#endregion export { transferMcpCodeModeGuestResult as a, setMcpCodeModeGuestResultFromAgentResult as i, projectMcpCallToolResult as n, toToolSearchJsonSafe as o, setMcpCodeModeGuestResult as r, consumeMcpCodeModeGuestResult as t };