/* Copyright 2026 Marimo. All rights reserved. */ import { isEmpty } from "lodash-es"; import { InfoIcon } from "lucide-react"; import React from "react"; import { z } from "zod"; // A value worth rendering: drop null/undefined and empty containers // (`{}`, `[]`), but keep meaningful primitives (`0`, `false`, `""`). function isUninformative(value: unknown): boolean { if (value == null) { return true; } if (typeof value === "object") { return isEmpty(value); } return false; } // Zod schema matching the Python SuccessResult dataclass const SuccessResultSchema = z.looseObject({ status: z.string().default("success"), auth_required: z.boolean().default(false), action_url: z.any(), next_steps: z.any(), meta: z.any(), message: z.string().nullish(), }); type SuccessResult = z.infer; const PrettySuccessResult: React.FC<{ data: SuccessResult }> = ({ data }) => { const { status, auth_required, action_url: _action_url, meta: _meta, next_steps: _next_steps, message, ...rest } = data; return (

Tool Result

{status} {auth_required && ( Auth Required )}
{message && (
{message}
)} {rest && (
{Object.entries(rest).map(([key, value]) => { if (isUninformative(value)) { return null; } return (
{key}
                  {JSON.stringify(value, null, 2)}
                
); })}
)}
); }; export const ResultRenderer: React.FC<{ result: unknown }> = ({ result }) => { const parseResult = SuccessResultSchema.safeParse(result); if (parseResult.success) { return ; } return (
{typeof result === "string" ? result : JSON.stringify(result, null, 2)}
); };