| 387 | } |
| 388 | |
| 389 | function ToolGeneric(props: { data: any }): React.ReactElement { |
| 390 | const d = props.data; |
| 391 | if (Array.isArray(d)) return codeBlock(JSON.stringify(d, null, 2)); |
| 392 | return ( |
| 393 | <div className="hermes-lcm-kv"> |
| 394 | {Object.keys(d).map(function (k, i) { |
| 395 | const v = d[k]; |
| 396 | let vn: React.ReactNode; |
| 397 | if (v == null) vn = <span className="hermes-lcm-dim">null</span>; |
| 398 | else if (typeof v === "object") { |
| 399 | vn = ( |
| 400 | <pre className="hermes-lcm-md-pre"> |
| 401 | <code>{clampText(JSON.stringify(v, null, 2), 1500)}</code> |
| 402 | </pre> |
| 403 | ); |
| 404 | } else vn = <span>{String(v)}</span>; |
| 405 | return ( |
| 406 | <div key={k + i} className="hermes-lcm-kv-row"> |
| 407 | <span className="hermes-lcm-kv-k">{k}</span> |
| 408 | <span className="hermes-lcm-kv-v">{vn}</span> |
| 409 | </div> |
| 410 | ); |
| 411 | })} |
| 412 | </div> |
| 413 | ); |
| 414 | } |
| 415 | |
| 416 | export function ToolResult(props: { name: any; content: any }): React.ReactElement { |
| 417 | const name = String(props.name || ""); |