UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

91 lines (90 loc) • 2.27 kB
import { describeRejectedValue } from "./tool-search-setting.js"; export function isErrorLike(value) { try { if (value instanceof Error) return true; return Object.prototype.toString.call(value) === "[object Error]"; } catch { return false; } } export function thrownIs(value, ctor) { try { return value instanceof ctor; } catch { return false; } } export function thrownName(err) { const name = isErrorLike(err) ? readMember(err, "name") : undefined; return typeof name === "string" ? name : undefined; } export function thrownText(err) { try { if (typeof err === "string") return err; if (isErrorLike(err)) { const message = err.message; if (typeof message === "string") return message; } } catch { } return describeRejectedValue(err); } export function thrownLabel(err) { try { if (isErrorLike(err)) { const label = String(err); if (label !== "") return label; } } catch { } return thrownText(err); } export function asThrownError(err) { try { if (err instanceof Error) return err; } catch { } return new Error(thrownLabel(err)); } export function readMember(value, key) { try { if (value === null || value === undefined) return undefined; return value[key]; } catch { return undefined; } } export function readOwnMembers(value) { let keys; try { if (value === null || typeof value !== "object" || Array.isArray(value)) return undefined; keys = Object.keys(value); } catch { return undefined; } const out = {}; for (const key of keys) Object.defineProperty(out, key, { value: readMember(value, key), enumerable: true, writable: true, configurable: true }); return out; } export function thrownMarksOf(err) { const details = readOwnMembers(readMember(err, "details")); const errorKind = readMember(err, "errorKind"); if (typeof errorKind !== "string") return details; return { ...(details ?? {}), errorKind }; }