@morsehq-dev/sdk 0.4.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +294 -0
  3. package/dist/anthropic/index.cjs +39 -0
  4. package/dist/anthropic/index.cjs.map +1 -0
  5. package/dist/anthropic/index.d.cts +213 -0
  6. package/dist/anthropic/index.d.ts +213 -0
  7. package/dist/anthropic/index.js +6 -0
  8. package/dist/anthropic/index.js.map +1 -0
  9. package/dist/anthropic-agent-sdk/index.cjs +744 -0
  10. package/dist/anthropic-agent-sdk/index.cjs.map +1 -0
  11. package/dist/anthropic-agent-sdk/index.d.cts +371 -0
  12. package/dist/anthropic-agent-sdk/index.d.ts +371 -0
  13. package/dist/anthropic-agent-sdk/index.js +735 -0
  14. package/dist/anthropic-agent-sdk/index.js.map +1 -0
  15. package/dist/browser/anthropic/index.cjs +39 -0
  16. package/dist/browser/anthropic/index.cjs.map +1 -0
  17. package/dist/browser/anthropic/index.js +6 -0
  18. package/dist/browser/anthropic/index.js.map +1 -0
  19. package/dist/browser/anthropic-agent-sdk/index.cjs +744 -0
  20. package/dist/browser/anthropic-agent-sdk/index.cjs.map +1 -0
  21. package/dist/browser/anthropic-agent-sdk/index.js +735 -0
  22. package/dist/browser/anthropic-agent-sdk/index.js.map +1 -0
  23. package/dist/browser/chunk-3643DC7K.cjs +365 -0
  24. package/dist/browser/chunk-3643DC7K.cjs.map +1 -0
  25. package/dist/browser/chunk-4FALQMOZ.js +232 -0
  26. package/dist/browser/chunk-4FALQMOZ.js.map +1 -0
  27. package/dist/browser/chunk-5J2QBK75.js +884 -0
  28. package/dist/browser/chunk-5J2QBK75.js.map +1 -0
  29. package/dist/browser/chunk-7MSXWGAH.js +53 -0
  30. package/dist/browser/chunk-7MSXWGAH.js.map +1 -0
  31. package/dist/browser/chunk-A24L5N5N.js +596 -0
  32. package/dist/browser/chunk-A24L5N5N.js.map +1 -0
  33. package/dist/browser/chunk-B7DEUDP6.cjs +177 -0
  34. package/dist/browser/chunk-B7DEUDP6.cjs.map +1 -0
  35. package/dist/browser/chunk-F6CJACNH.cjs +604 -0
  36. package/dist/browser/chunk-F6CJACNH.cjs.map +1 -0
  37. package/dist/browser/chunk-JBOYFQSB.js +412 -0
  38. package/dist/browser/chunk-JBOYFQSB.js.map +1 -0
  39. package/dist/browser/chunk-KRBADE6R.cjs +183 -0
  40. package/dist/browser/chunk-KRBADE6R.cjs.map +1 -0
  41. package/dist/browser/chunk-MCJYZH6W.cjs +415 -0
  42. package/dist/browser/chunk-MCJYZH6W.cjs.map +1 -0
  43. package/dist/browser/chunk-NQG2IAQS.js +178 -0
  44. package/dist/browser/chunk-NQG2IAQS.js.map +1 -0
  45. package/dist/browser/chunk-O4HG3OSK.cjs +929 -0
  46. package/dist/browser/chunk-O4HG3OSK.cjs.map +1 -0
  47. package/dist/browser/chunk-QWRQJO57.js +363 -0
  48. package/dist/browser/chunk-QWRQJO57.js.map +1 -0
  49. package/dist/browser/chunk-SWQOPFE4.cjs +234 -0
  50. package/dist/browser/chunk-SWQOPFE4.cjs.map +1 -0
  51. package/dist/browser/chunk-TYDG747E.js +171 -0
  52. package/dist/browser/chunk-TYDG747E.js.map +1 -0
  53. package/dist/browser/chunk-TZRSDDFP.cjs +56 -0
  54. package/dist/browser/chunk-TZRSDDFP.cjs.map +1 -0
  55. package/dist/browser/index.cjs +587 -0
  56. package/dist/browser/index.cjs.map +1 -0
  57. package/dist/browser/index.js +522 -0
  58. package/dist/browser/index.js.map +1 -0
  59. package/dist/browser/integrations/pino.cjs +89 -0
  60. package/dist/browser/integrations/pino.cjs.map +1 -0
  61. package/dist/browser/integrations/pino.js +86 -0
  62. package/dist/browser/integrations/pino.js.map +1 -0
  63. package/dist/browser/langchain/index.cjs +535 -0
  64. package/dist/browser/langchain/index.cjs.map +1 -0
  65. package/dist/browser/langchain/index.js +528 -0
  66. package/dist/browser/langchain/index.js.map +1 -0
  67. package/dist/browser/langgraph/index.cjs +377 -0
  68. package/dist/browser/langgraph/index.cjs.map +1 -0
  69. package/dist/browser/langgraph/index.js +371 -0
  70. package/dist/browser/langgraph/index.js.map +1 -0
  71. package/dist/browser/openai/index.cjs +125 -0
  72. package/dist/browser/openai/index.cjs.map +1 -0
  73. package/dist/browser/openai/index.js +122 -0
  74. package/dist/browser/openai/index.js.map +1 -0
  75. package/dist/browser/openai-agents/index.cjs +689 -0
  76. package/dist/browser/openai-agents/index.cjs.map +1 -0
  77. package/dist/browser/openai-agents/index.js +678 -0
  78. package/dist/browser/openai-agents/index.js.map +1 -0
  79. package/dist/browser/vercel-ai/index.cjs +233 -0
  80. package/dist/browser/vercel-ai/index.cjs.map +1 -0
  81. package/dist/browser/vercel-ai/index.js +231 -0
  82. package/dist/browser/vercel-ai/index.js.map +1 -0
  83. package/dist/chunk-4R4SHGOK.js +363 -0
  84. package/dist/chunk-4R4SHGOK.js.map +1 -0
  85. package/dist/chunk-7EO7MQBA.cjs +183 -0
  86. package/dist/chunk-7EO7MQBA.cjs.map +1 -0
  87. package/dist/chunk-7YCENA54.cjs +604 -0
  88. package/dist/chunk-7YCENA54.cjs.map +1 -0
  89. package/dist/chunk-CKFOGDUF.js +596 -0
  90. package/dist/chunk-CKFOGDUF.js.map +1 -0
  91. package/dist/chunk-FJUNILZT.cjs +1324 -0
  92. package/dist/chunk-FJUNILZT.cjs.map +1 -0
  93. package/dist/chunk-HDAFUKQ3.js +171 -0
  94. package/dist/chunk-HDAFUKQ3.js.map +1 -0
  95. package/dist/chunk-KBWPNIH4.cjs +234 -0
  96. package/dist/chunk-KBWPNIH4.cjs.map +1 -0
  97. package/dist/chunk-KJEO52QS.cjs +365 -0
  98. package/dist/chunk-KJEO52QS.cjs.map +1 -0
  99. package/dist/chunk-KZBCOZIQ.cjs +177 -0
  100. package/dist/chunk-KZBCOZIQ.cjs.map +1 -0
  101. package/dist/chunk-ME5JALGT.js +53 -0
  102. package/dist/chunk-ME5JALGT.js.map +1 -0
  103. package/dist/chunk-PVHDEPRE.cjs +56 -0
  104. package/dist/chunk-PVHDEPRE.cjs.map +1 -0
  105. package/dist/chunk-RTL23YOQ.js +178 -0
  106. package/dist/chunk-RTL23YOQ.js.map +1 -0
  107. package/dist/chunk-TQWI4UYO.js +1277 -0
  108. package/dist/chunk-TQWI4UYO.js.map +1 -0
  109. package/dist/chunk-VXDBDPDR.cjs +415 -0
  110. package/dist/chunk-VXDBDPDR.cjs.map +1 -0
  111. package/dist/chunk-XTKMUJWI.js +232 -0
  112. package/dist/chunk-XTKMUJWI.js.map +1 -0
  113. package/dist/chunk-ZKUGOWER.js +412 -0
  114. package/dist/chunk-ZKUGOWER.js.map +1 -0
  115. package/dist/index.cjs +843 -0
  116. package/dist/index.cjs.map +1 -0
  117. package/dist/index.d.cts +464 -0
  118. package/dist/index.d.ts +464 -0
  119. package/dist/index.js +778 -0
  120. package/dist/index.js.map +1 -0
  121. package/dist/integrations/pino.cjs +89 -0
  122. package/dist/integrations/pino.cjs.map +1 -0
  123. package/dist/integrations/pino.d.cts +65 -0
  124. package/dist/integrations/pino.d.ts +65 -0
  125. package/dist/integrations/pino.js +86 -0
  126. package/dist/integrations/pino.js.map +1 -0
  127. package/dist/langchain/index.cjs +535 -0
  128. package/dist/langchain/index.cjs.map +1 -0
  129. package/dist/langchain/index.d.cts +265 -0
  130. package/dist/langchain/index.d.ts +265 -0
  131. package/dist/langchain/index.js +528 -0
  132. package/dist/langchain/index.js.map +1 -0
  133. package/dist/langgraph/index.cjs +377 -0
  134. package/dist/langgraph/index.cjs.map +1 -0
  135. package/dist/langgraph/index.d.cts +324 -0
  136. package/dist/langgraph/index.d.ts +324 -0
  137. package/dist/langgraph/index.js +371 -0
  138. package/dist/langgraph/index.js.map +1 -0
  139. package/dist/openai/index.cjs +125 -0
  140. package/dist/openai/index.cjs.map +1 -0
  141. package/dist/openai/index.d.cts +136 -0
  142. package/dist/openai/index.d.ts +136 -0
  143. package/dist/openai/index.js +122 -0
  144. package/dist/openai/index.js.map +1 -0
  145. package/dist/openai-agents/index.cjs +689 -0
  146. package/dist/openai-agents/index.cjs.map +1 -0
  147. package/dist/openai-agents/index.d.cts +502 -0
  148. package/dist/openai-agents/index.d.ts +502 -0
  149. package/dist/openai-agents/index.js +678 -0
  150. package/dist/openai-agents/index.js.map +1 -0
  151. package/dist/spans-DZtMuBvc.d.cts +73 -0
  152. package/dist/spans-DZtMuBvc.d.ts +73 -0
  153. package/dist/tracing-BYAqjT5Q.d.cts +114 -0
  154. package/dist/tracing-rz9cWQ8d.d.ts +114 -0
  155. package/dist/vercel-ai/index.cjs +233 -0
  156. package/dist/vercel-ai/index.cjs.map +1 -0
  157. package/dist/vercel-ai/index.d.cts +93 -0
  158. package/dist/vercel-ai/index.d.ts +93 -0
  159. package/dist/vercel-ai/index.js +231 -0
  160. package/dist/vercel-ai/index.js.map +1 -0
  161. package/package.json +182 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/_agent-sdk-common/context-decomposer.ts"],"names":["text"],"mappings":"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","file":"chunk-4R4SHGOK.js","sourcesContent":["/**\n * `_agent-sdk-common/context-decomposer.ts` — shared OpenAI-chat-format\n * context segment decomposer (MHQ-750).\n *\n * TS port of `apps/sdk/python/src/morse_ai/context/decomposer.py`'s\n * `decompose_openai_messages`. Pure functions — no I/O, no dependency on\n * `_internal/tracing.ts` or any adapter. Classifies an OpenAI chat\n * completions-shaped `messages` array (+ optional `tools` array) into\n * `ContextSegment`s so the Context & Memory dashboard can show context\n * composition without any extra customer config.\n *\n * The Anthropic adapter (`src/anthropic/index.ts`) has its own\n * `extractAnthropicSegments` because Anthropic's message format has extra\n * structure (block lists, tool_result blocks, cache_control markers). For\n * OpenAI-chat-format messages — which covers plain OpenAI chat completions,\n * LangChain, and LangGraph after message flattening — this module is the\n * canonical decomposer, mirroring the Python side's module boundary\n * (`morse_ai.context.decomposer` is called from both `adapters/openai.py`\n * and `adapters/langgraph.py`).\n *\n * Source tag mapping (mirrors the backend `SegmentSource` enum and the\n * Python decomposer's docstring):\n *\n * role=system → system_prompt\n * tools=[...] (the definitions array) → tool_descriptions\n * role=tool (OpenAI tool result) → tool_observation\n * role=user / role=assistant (prior turns) → chat_history\n * role=user (last user turn, not a tool result) → current_input\n *\n * Position is 0-indexed in emission order:\n * tool_descriptions → system_prompt → chat_history/tool_observation → current_input\n *\n * Message duck-typing: accepts plain `{role, content}` dicts (OpenAI wire\n * format) AND LangChain-style message objects — either a `_getType()`\n * method (LangChain JS `BaseMessage`) or a `.type` string property. This\n * lets `decomposeOpenAiMessages` be called directly with LangGraph JS's\n * flattened `BaseMessage[]` without a translation layer, mirroring how the\n * Python decomposer duck-types LangChain's `.type` attribute.\n *\n * Never throws — malformed input returns `[]`, matching the Python\n * decomposer's `except Exception: return []` guarantee.\n */\n\nimport type { ContextSegment } from \"../_internal/spans\";\n\n/* ------------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Per-segment content cap (bytes). Matches the Python decomposer's\n * `_CONTENT_BYTE_CAP` and the Anthropic TS adapter's\n * `MAX_SEGMENT_CONTENT_BYTES` so the server-side payload guard (AI-SEC-08,\n * 256 KB on `ContextSegmentIn.content`) is approached at the same rate\n * across every adapter/language.\n */\nexport const CONTEXT_SEGMENT_CONTENT_BYTE_CAP = 4096;\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Structural shape of an OpenAI chat-completions-format message. Also\n * accepts LangChain-style message objects via `_getType()`/`.type`\n * duck-typing — see file header.\n */\nexport interface OpenAiMessageLike {\n role?: string;\n content?: unknown;\n tool_call_id?: string;\n _getType?: () => unknown;\n type?: unknown;\n [key: string]: unknown;\n}\n\n/** Structural shape of an OpenAI `tools` definition entry. */\nexport interface OpenAiToolLike {\n type?: string;\n function?: { name?: string; [key: string]: unknown };\n name?: string;\n [key: string]: unknown;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Decompose an OpenAI chat-completions-shaped request into context\n * segments.\n *\n * @param messages - The `messages` array. Each element should be a\n * `{role, content}` object, or a LangChain-style message object (see\n * file header). Non-array input is tolerated (treated as absent).\n * @param tools - The `tools` array (list of tool definition objects).\n * Non-array input is tolerated (treated as absent).\n * @returns `ContextSegment[]` ready for `SpanData.context_segments`.\n * Returns `[]` (never throws) on malformed input.\n */\nexport function decomposeOpenAiMessages(messages?: unknown, tools?: unknown): ContextSegment[] {\n const messagesArr = Array.isArray(messages) ? (messages as OpenAiMessageLike[]) : undefined;\n const toolsArr = Array.isArray(tools) ? (tools as OpenAiToolLike[]) : undefined;\n\n if ((!messagesArr || messagesArr.length === 0) && (!toolsArr || toolsArr.length === 0)) {\n return [];\n }\n\n try {\n const segments: ContextSegment[] = [];\n let position = 0;\n\n // 1. tool_descriptions — one segment for the entire tools array.\n if (toolsArr && toolsArr.length > 0) {\n const toolNames: string[] = [];\n for (const t of toolsArr) {\n if (t && typeof t === \"object\") {\n const name = t.function?.name ?? t.name;\n if (typeof name === \"string\" && name.length > 0) toolNames.push(name);\n }\n }\n const toolsJson = canonicalJsonStringify(toolsArr);\n segments.push(\n makeSegment(position, \"tool_descriptions\", toolsJson, {\n tool_count: toolsArr.length,\n tool_names: toolNames,\n }),\n );\n position += 1;\n }\n\n if (!messagesArr) return segments;\n\n // 2. system_prompt — every system message, joined.\n const systemParts: string[] = [];\n for (const msg of messagesArr) {\n if (getRole(msg) === \"system\") {\n const text = contentToText(getContent(msg));\n if (text) systemParts.push(text);\n }\n }\n if (systemParts.length > 0) {\n segments.push(makeSegment(position, \"system_prompt\", systemParts.join(\"\\n\")));\n position += 1;\n }\n\n // 3. Walk non-system messages. Find the last user message that is NOT\n // purely a tool_result (role=tool).\n const nonSystem = messagesArr.filter((m) => getRole(m) !== \"system\");\n\n let lastUserInputIdx = -1;\n for (let i = nonSystem.length - 1; i >= 0; i--) {\n if (getRole(nonSystem[i]) === \"user\") {\n lastUserInputIdx = i;\n break;\n }\n }\n\n for (let i = 0; i < nonSystem.length; i++) {\n const msg = nonSystem[i];\n const role = getRole(msg);\n const content = getContent(msg);\n\n // OpenAI tool role → tool_observation segment.\n if (role === \"tool\") {\n const text = contentToText(content);\n if (text) {\n const toolCallId = getAttr(msg, \"tool_call_id\");\n const prefix =\n typeof toolCallId === \"string\" && toolCallId.length > 0\n ? `[tool_result id=${toolCallId}]\\n`\n : \"\";\n segments.push(makeSegment(position, \"tool_observation\", prefix + text, { role }));\n position += 1;\n }\n continue;\n }\n\n // Skip system (already handled).\n if (role === \"system\") continue;\n\n const text = contentToText(content);\n if (!text) continue;\n\n const source = role === \"user\" && i === lastUserInputIdx ? \"current_input\" : \"chat_history\";\n segments.push(makeSegment(position, source, text, role ? { role } : undefined));\n position += 1;\n }\n\n return segments;\n } catch {\n return [];\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Message duck-typing helpers */\n/* ------------------------------------------------------------------------ */\n\nconst LC_TYPE_TO_ROLE: Record<string, string> = {\n human: \"user\",\n ai: \"assistant\",\n system: \"system\",\n tool: \"tool\",\n function: \"tool\",\n chat: \"user\",\n};\n\nfunction lcTypeToRole(lcType: string): string {\n return LC_TYPE_TO_ROLE[lcType.toLowerCase()] ?? lcType;\n}\n\n/**\n * Extract the `role` from a message. Plain `{role: \"...\"}` objects (OpenAI\n * wire format) win first; otherwise duck-types LangChain-style messages via\n * `_getType()` (LangChain JS `BaseMessage`) or a `.type` string property.\n */\nfunction getRole(msg: unknown): string {\n if (msg === null || typeof msg !== \"object\") return \"\";\n const rec = msg as OpenAiMessageLike;\n if (typeof rec.role === \"string\") return rec.role;\n if (typeof rec._getType === \"function\") {\n try {\n const t = rec._getType();\n if (typeof t === \"string\" && t.length > 0) return lcTypeToRole(t);\n } catch {\n // fall through\n }\n }\n if (typeof rec.type === \"string\" && rec.type.length > 0) return lcTypeToRole(rec.type);\n return \"\";\n}\n\nfunction getContent(msg: unknown): unknown {\n if (msg === null || typeof msg !== \"object\") return undefined;\n return (msg as OpenAiMessageLike).content;\n}\n\nfunction getAttr(msg: unknown, attr: string): unknown {\n if (msg === null || typeof msg !== \"object\") return undefined;\n return (msg as Record<string, unknown>)[attr];\n}\n\n/**\n * Coerce an OpenAI message `content` value to a plain string. Content can\n * be:\n * - string: plain text (most common)\n * - array of parts: [{type: \"text\", text: \"...\"}, {type: \"image_url\", ...}]\n * - null/undefined\n */\nfunction contentToText(content: unknown): string {\n if (content === null || content === undefined) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const part of content) {\n if (part && typeof part === \"object\") {\n const p = part as Record<string, unknown>;\n if (p.type === \"text\") {\n parts.push(typeof p.text === \"string\" ? p.text : String(p.text ?? \"\"));\n } else if (p.type === \"image_url\") {\n parts.push(\"[image]\");\n }\n } else if (typeof part === \"string\") {\n parts.push(part);\n }\n }\n return parts.filter((p) => p.length > 0).join(\"\\n\");\n }\n return String(content);\n}\n\n/* ------------------------------------------------------------------------ */\n/* Segment construction */\n/* ------------------------------------------------------------------------ */\n\nfunction makeSegment(\n position: number,\n source: string,\n content: string,\n attrs?: Record<string, unknown>,\n): ContextSegment {\n const contentHash = sha256Hex(content);\n const truncated = truncateToBytes(content, CONTEXT_SEGMENT_CONTENT_BYTE_CAP);\n const seg: ContextSegment = {\n position,\n source,\n content_hash: contentHash,\n content: truncated.text,\n };\n if (truncated.truncated) seg.content_truncated = true;\n if (attrs) seg.attrs = attrs;\n return seg;\n}\n\n/**\n * Stringify with stable key ordering so equivalent objects hash to the\n * same content_hash regardless of property insertion order. Mirrors\n * Python's `json.dumps(tools, sort_keys=True, default=str)`.\n */\nfunction canonicalJsonStringify(value: unknown): string {\n try {\n return JSON.stringify(value, function replacer(_key, val) {\n if (val && typeof val === \"object\" && !Array.isArray(val)) {\n const obj = val as Record<string, unknown>;\n const sorted: Record<string, unknown> = {};\n for (const k of Object.keys(obj).sort()) {\n sorted[k] = obj[k];\n }\n return sorted;\n }\n return val;\n });\n } catch {\n return String(value);\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Hashing + byte truncation (duplicated from `src/anthropic/index.ts` —\n * see that file's equivalent block; kept module-local so this file has no\n * cross-adapter dependency, matching the existing `_agent-sdk-common/\n * redaction.ts` convention of a module-local SHA-256 fallback.) */\n/* ------------------------------------------------------------------------ */\n\nfunction sha256Hex(text: string): string {\n // Strategy 1: Node's crypto.createHash. Sync and dep-free.\n try {\n if (typeof process !== \"undefined\" && process.versions?.node) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dynamicRequire = Function(\"m\", \"return require(m)\") as any as (m: string) => unknown;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cryptoMod = dynamicRequire(\"node:crypto\") as any;\n if (cryptoMod?.createHash) {\n return cryptoMod.createHash(\"sha256\").update(text).digest(\"hex\");\n }\n }\n } catch {\n // fall through\n }\n // Strategy 2: pure-TS sha256 (used in browsers).\n return purejsSha256(text);\n}\n\nfunction truncateToBytes(text: string, maxBytes: number): { text: string; truncated: boolean } {\n // Fast path: cheap upper bound. 1 char ≤ 4 bytes UTF-8.\n if (text.length <= maxBytes / 4) return { text, truncated: false };\n const bytes = utf8Encode(text);\n if (bytes.length <= maxBytes) return { text, truncated: false };\n // Find the largest character boundary <= maxBytes.\n let cut = maxBytes;\n while (cut > 0 && (bytes[cut]! & 0xc0) === 0x80) {\n cut--;\n }\n return { text: utf8Decode(bytes.subarray(0, cut)), truncated: true };\n}\n\nfunction utf8Encode(text: string): Uint8Array {\n if (typeof TextEncoder !== \"undefined\") {\n return new TextEncoder().encode(text);\n }\n const out: number[] = [];\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i);\n if (code < 0x80) {\n out.push(code);\n } else if (code < 0x800) {\n out.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f));\n } else {\n out.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f));\n }\n }\n return new Uint8Array(out);\n}\n\nfunction utf8Decode(bytes: Uint8Array): string {\n if (typeof TextDecoder !== \"undefined\") {\n return new TextDecoder(\"utf-8\").decode(bytes);\n }\n let out = \"\";\n for (let i = 0; i < bytes.length; ) {\n const b = bytes[i]!;\n if (b < 0x80) {\n out += String.fromCharCode(b);\n i++;\n } else if (b < 0xe0) {\n out += String.fromCharCode(((b & 0x1f) << 6) | (bytes[i + 1]! & 0x3f));\n i += 2;\n } else {\n out += String.fromCharCode(\n ((b & 0x0f) << 12) | ((bytes[i + 1]! & 0x3f) << 6) | (bytes[i + 2]! & 0x3f),\n );\n i += 3;\n }\n }\n return out;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Pure-JS SHA-256 (used only when node:crypto is unavailable) */\n/* ------------------------------------------------------------------------ */\n\nfunction purejsSha256(text: string): string {\n const K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n ];\n const H = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n ];\n\n const msg = utf8Encode(text);\n const msgLen = msg.length;\n const bitLen = msgLen * 8;\n const padded = new Uint8Array(((msgLen + 9 + 63) >> 6) << 6);\n padded.set(msg);\n padded[msgLen] = 0x80;\n const lo = (bitLen & 0xffffffff) >>> 0;\n const hi = Math.floor(bitLen / 0x100000000) >>> 0;\n padded[padded.length - 8] = (hi >>> 24) & 0xff;\n padded[padded.length - 7] = (hi >>> 16) & 0xff;\n padded[padded.length - 6] = (hi >>> 8) & 0xff;\n padded[padded.length - 5] = hi & 0xff;\n padded[padded.length - 4] = (lo >>> 24) & 0xff;\n padded[padded.length - 3] = (lo >>> 16) & 0xff;\n padded[padded.length - 2] = (lo >>> 8) & 0xff;\n padded[padded.length - 1] = lo & 0xff;\n\n const W = new Uint32Array(64);\n for (let chunk = 0; chunk < padded.length; chunk += 64) {\n for (let i = 0; i < 16; i++) {\n W[i] =\n ((padded[chunk + i * 4]! << 24) |\n (padded[chunk + i * 4 + 1]! << 16) |\n (padded[chunk + i * 4 + 2]! << 8) |\n padded[chunk + i * 4 + 3]!) >>>\n 0;\n }\n for (let i = 16; i < 64; i++) {\n const s0 = rotr(W[i - 15]!, 7) ^ rotr(W[i - 15]!, 18) ^ (W[i - 15]! >>> 3);\n const s1 = rotr(W[i - 2]!, 17) ^ rotr(W[i - 2]!, 19) ^ (W[i - 2]! >>> 10);\n W[i] = (W[i - 16]! + s0 + W[i - 7]! + s1) >>> 0;\n }\n\n let [a, b, c, d, e, f, g, h] = H;\n\n for (let i = 0; i < 64; i++) {\n const S1 = rotr(e!, 6) ^ rotr(e!, 11) ^ rotr(e!, 25);\n const ch = (e! & f!) ^ (~e! & g!);\n const temp1 = (h! + S1 + ch + K[i]! + W[i]!) >>> 0;\n const S0 = rotr(a!, 2) ^ rotr(a!, 13) ^ rotr(a!, 22);\n const maj = (a! & b!) ^ (a! & c!) ^ (b! & c!);\n const temp2 = (S0 + maj) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d! + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n\n H[0] = (H[0]! + a!) >>> 0;\n H[1] = (H[1]! + b!) >>> 0;\n H[2] = (H[2]! + c!) >>> 0;\n H[3] = (H[3]! + d!) >>> 0;\n H[4] = (H[4]! + e!) >>> 0;\n H[5] = (H[5]! + f!) >>> 0;\n H[6] = (H[6]! + g!) >>> 0;\n H[7] = (H[7]! + h!) >>> 0;\n }\n\n let hex = \"\";\n for (const v of H) {\n hex += v.toString(16).padStart(8, \"0\");\n }\n return hex;\n}\n\nfunction rotr(x: number, n: number): number {\n return ((x >>> n) | (x << (32 - n))) >>> 0;\n}\n"]}
@@ -0,0 +1,183 @@
1
+ 'use strict';
2
+
3
+ var chunkFJUNILZT_cjs = require('./chunk-FJUNILZT.cjs');
4
+
5
+ // src/_internal/sentry-reporter.ts
6
+ chunkFJUNILZT_cjs.init_env();
7
+ var SENTRY_DSN = "https://f2f3d4d8c324fe5e439b6d83678116bd@o4511340656656384.ingest.us.sentry.io/4511340719833088";
8
+ var RATE_WINDOW_MS = 60 * 1e3;
9
+ var RATE_LIMIT_PER_WINDOW = 100;
10
+ var rateBuckets = /* @__PURE__ */ new Map();
11
+ var capture = null;
12
+ var sentryInitFailed = false;
13
+ var SAFE_EXTRA_KEYS = /* @__PURE__ */ new Set([
14
+ "adapter",
15
+ "module",
16
+ "function",
17
+ "operation",
18
+ "endpoint_host",
19
+ "sdk_version",
20
+ "runtime",
21
+ "platform"
22
+ ]);
23
+ function checkRateLimit(fingerprint) {
24
+ const now = Date.now();
25
+ const cutoff = now - RATE_WINDOW_MS;
26
+ const bucket = rateBuckets.get(fingerprint) ?? [];
27
+ while (bucket.length > 0 && bucket[0] < cutoff) {
28
+ bucket.shift();
29
+ }
30
+ if (bucket.length >= RATE_LIMIT_PER_WINDOW) {
31
+ rateBuckets.set(fingerprint, bucket);
32
+ return false;
33
+ }
34
+ bucket.push(now);
35
+ rateBuckets.set(fingerprint, bucket);
36
+ return true;
37
+ }
38
+ function scrubExtra(extra) {
39
+ if (!extra) return {};
40
+ const out = {};
41
+ for (const [k, v] of Object.entries(extra)) {
42
+ if (SAFE_EXTRA_KEYS.has(k)) {
43
+ out[k] = v;
44
+ }
45
+ }
46
+ return out;
47
+ }
48
+ async function ensureSentry() {
49
+ if (capture !== null) return capture;
50
+ if (sentryInitFailed) return null;
51
+ try {
52
+ let mod = null;
53
+ let isNode = true;
54
+ try {
55
+ mod = await Function("m", "return import(m)")("@sentry/node");
56
+ } catch {
57
+ try {
58
+ mod = await Function("m", "return import(m)")("@sentry/browser");
59
+ isNode = false;
60
+ } catch {
61
+ sentryInitFailed = true;
62
+ return null;
63
+ }
64
+ }
65
+ if (!mod) {
66
+ sentryInitFailed = true;
67
+ return null;
68
+ }
69
+ const sentry = mod;
70
+ const ClientCtor = isNode ? sentry.NodeClient : sentry.BrowserClient;
71
+ const transport = isNode ? sentry.makeNodeTransport : sentry.makeFetchTransport;
72
+ if (typeof ClientCtor !== "function" || typeof transport !== "function") {
73
+ sentryInitFailed = true;
74
+ return null;
75
+ }
76
+ const client = new ClientCtor({
77
+ dsn: SENTRY_DSN,
78
+ transport,
79
+ stackParser: sentry.defaultStackParser,
80
+ // No integrations: every default one instruments the HOST app (global
81
+ // handlers, console, fetch/http breadcrumbs). We only ever report
82
+ // exceptions we hand over explicitly.
83
+ integrations: [],
84
+ tracesSampleRate: 0,
85
+ autoSessionTracking: false,
86
+ sendDefaultPii: false,
87
+ // Breadcrumbs are host-application activity, not ours. Never collect.
88
+ maxBreadcrumbs: 0
89
+ });
90
+ if (typeof client.init === "function") client.init();
91
+ const built = buildCapture(sentry, client);
92
+ if (built === null) {
93
+ sentryInitFailed = true;
94
+ return null;
95
+ }
96
+ capture = built;
97
+ return capture;
98
+ } catch {
99
+ sentryInitFailed = true;
100
+ return null;
101
+ }
102
+ }
103
+ function buildCapture(sentry, client) {
104
+ if (typeof sentry.Scope === "function" && sentry.Scope.prototype?.setClient) {
105
+ return (error, fingerprint, extra) => {
106
+ const scope = new sentry.Scope();
107
+ scope.setClient(client);
108
+ scope.setFingerprint([fingerprint]);
109
+ for (const [k, v] of Object.entries(extra)) scope.setExtra(k, v);
110
+ scope.captureException(error);
111
+ };
112
+ }
113
+ if (typeof sentry.Hub === "function") {
114
+ const hub = new sentry.Hub(client);
115
+ return (error, fingerprint, extra) => {
116
+ hub.withScope((scope) => {
117
+ scope.setFingerprint([fingerprint]);
118
+ for (const [k, v] of Object.entries(extra)) scope.setExtra(k, v);
119
+ hub.captureException(error);
120
+ });
121
+ };
122
+ }
123
+ return null;
124
+ }
125
+ function report(error, options) {
126
+ try {
127
+ if (chunkFJUNILZT_cjs.isTelemetryDisabled()) return;
128
+ if (!checkRateLimit(options.fingerprint)) return;
129
+ const errClass = error instanceof Error ? error.name : "Error";
130
+ const errMessage = error instanceof Error ? error.message : String(error);
131
+ if (chunkFJUNILZT_cjs.isDebug()) {
132
+ console.error(
133
+ `morse internal error [${options.fingerprint}]: ${errClass}: ${errMessage}`,
134
+ error
135
+ );
136
+ } else {
137
+ console.warn(`morse internal error [${options.fingerprint}]: ${errClass}: ${errMessage}`);
138
+ }
139
+ if (!SENTRY_DSN) ;
140
+ void ensureSentry().then((captureFn) => {
141
+ if (!captureFn) return;
142
+ try {
143
+ captureFn(error, options.fingerprint, scrubExtra(options.extra));
144
+ } catch {
145
+ }
146
+ });
147
+ } catch {
148
+ }
149
+ }
150
+ function _resetForTesting() {
151
+ rateBuckets.clear();
152
+ capture = null;
153
+ sentryInitFailed = false;
154
+ }
155
+
156
+ // src/_internal/errors.ts
157
+ function absorbErrorsSync(fn, options) {
158
+ return (...args) => {
159
+ try {
160
+ return fn(...args);
161
+ } catch (err) {
162
+ report(err, options);
163
+ return void 0;
164
+ }
165
+ };
166
+ }
167
+ function absorbErrorsAsync(fn, options) {
168
+ return async (...args) => {
169
+ try {
170
+ return await fn(...args);
171
+ } catch (err) {
172
+ report(err, options);
173
+ return void 0;
174
+ }
175
+ };
176
+ }
177
+
178
+ exports._resetForTesting = _resetForTesting;
179
+ exports.absorbErrorsAsync = absorbErrorsAsync;
180
+ exports.absorbErrorsSync = absorbErrorsSync;
181
+ exports.report = report;
182
+ //# sourceMappingURL=chunk-7EO7MQBA.cjs.map
183
+ //# sourceMappingURL=chunk-7EO7MQBA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/_internal/sentry-reporter.ts","../src/_internal/errors.ts"],"names":["init_env","isTelemetryDisabled","isDebug"],"mappings":"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","file":"chunk-7EO7MQBA.cjs","sourcesContent":["/**\n * Out-of-band error reporting to Morse's internal Sentry instance.\n *\n * Mirrors the Python SDK's `_internal/sentry_reporter.py`. When the SDK\n * absorbs an internal exception (per the non-invasive guarantee), it\n * reports the error here. Everything in this module is itself wrapped\n * to swallow errors — if Sentry reporting fails, that failure must not\n * propagate either.\n *\n * Customer data is NEVER included. Reports carry only:\n * - Error class + message\n * - Sanitized stack trace (file paths kept, locals stripped)\n * - SDK version\n * - Adapter name (when applicable)\n * - Runtime / OS metadata\n * - Content-free fingerprint of the call site\n *\n * The Sentry DSN is a build-time constant. Write-only — even if the DSN\n * leaks, it can only post errors to Morse's project, never read.\n *\n * Phase 6c status: DSN is a placeholder (`\"\"`). When Sanji provides the\n * real DSN, the constant below is updated and reports start flowing.\n * Until then, errors fall back to `console.warn` (or the host logger\n * once we add a logger abstraction).\n */\n\nimport { isDebug, isTelemetryDisabled } from \"./env\";\n\n// ---------------------------------------------------------------------------\n// Hardcoded DSN constant — Morse-owned, write-only.\n//\n// ISOLATION (MHQ-729): we must never call `Sentry.init()`. That binds a client\n// process-wide, so a host app that already uses Sentry would have ITS errors\n// redirected into Morse's project the first time we absorb an internal error.\n// `ensureSentry` builds a private Client on its own Scope instead.\n// ---------------------------------------------------------------------------\n\nconst SENTRY_DSN =\n \"https://f2f3d4d8c324fe5e439b6d83678116bd@o4511340656656384.ingest.us.sentry.io/4511340719833088\";\n\n// Rate limit: max 100 events per fingerprint per 60-second sliding window.\nconst RATE_WINDOW_MS = 60 * 1000;\nconst RATE_LIMIT_PER_WINDOW = 100;\n\nconst rateBuckets: Map<string, number[]> = new Map();\n\n/** `(error, fingerprint, safeExtra) => void`, bound to a Morse-private client. */\ntype CaptureFn = (error: unknown, fingerprint: string, extra: Record<string, unknown>) => void;\n\nlet capture: CaptureFn | null = null;\nlet sentryInitFailed = false;\n\nconst SAFE_EXTRA_KEYS: ReadonlySet<string> = new Set([\n \"adapter\",\n \"module\",\n \"function\",\n \"operation\",\n \"endpoint_host\",\n \"sdk_version\",\n \"runtime\",\n \"platform\",\n]);\n\nfunction checkRateLimit(fingerprint: string): boolean {\n const now = Date.now();\n const cutoff = now - RATE_WINDOW_MS;\n const bucket = rateBuckets.get(fingerprint) ?? [];\n\n // Evict old entries.\n while (bucket.length > 0 && (bucket[0] as number) < cutoff) {\n bucket.shift();\n }\n if (bucket.length >= RATE_LIMIT_PER_WINDOW) {\n rateBuckets.set(fingerprint, bucket);\n return false;\n }\n bucket.push(now);\n rateBuckets.set(fingerprint, bucket);\n return true;\n}\n\nfunction scrubExtra(extra: Record<string, unknown> | undefined): Record<string, unknown> {\n if (!extra) return {};\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(extra)) {\n if (SAFE_EXTRA_KEYS.has(k)) {\n out[k] = v;\n }\n }\n return out;\n}\n\n/**\n * Build a capture function bound to a PRIVATE Sentry client.\n *\n * MHQ-729: never calls `Sentry.init()`. We construct a Client directly and\n * attach it to a Scope we own, so the host application's global Sentry client\n * (if any) is left exactly as its owner configured it.\n *\n * Returns `null` when no Sentry package is installed or the version exposes\n * neither the v8 `Scope.setClient` nor the v7 `Hub` isolation primitive — in\n * that case reports stay local-log-only, which is the safe direction.\n */\nasync function ensureSentry(): Promise<CaptureFn | null> {\n if (!SENTRY_DSN) return null;\n if (capture !== null) return capture;\n if (sentryInitFailed) return null;\n try {\n // Import dynamically so the SDK doesn't pay the cost when DSN is unset.\n // @sentry/node first, falling back to @sentry/browser.\n let mod: unknown = null;\n let isNode = true;\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mod = await (Function(\"m\", \"return import(m)\") as any)(\"@sentry/node\");\n } catch {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n mod = await (Function(\"m\", \"return import(m)\") as any)(\"@sentry/browser\");\n isNode = false;\n } catch {\n sentryInitFailed = true;\n return null;\n }\n }\n if (!mod) {\n sentryInitFailed = true;\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sentry = mod as any;\n\n const ClientCtor = isNode ? sentry.NodeClient : sentry.BrowserClient;\n const transport = isNode ? sentry.makeNodeTransport : sentry.makeFetchTransport;\n if (typeof ClientCtor !== \"function\" || typeof transport !== \"function\") {\n sentryInitFailed = true;\n return null;\n }\n\n const client = new ClientCtor({\n dsn: SENTRY_DSN,\n transport,\n stackParser: sentry.defaultStackParser,\n // No integrations: every default one instruments the HOST app (global\n // handlers, console, fetch/http breadcrumbs). We only ever report\n // exceptions we hand over explicitly.\n integrations: [],\n tracesSampleRate: 0,\n autoSessionTracking: false,\n sendDefaultPii: false,\n // Breadcrumbs are host-application activity, not ours. Never collect.\n maxBreadcrumbs: 0,\n });\n if (typeof client.init === \"function\") client.init();\n\n const built = buildCapture(sentry, client);\n if (built === null) {\n sentryInitFailed = true;\n return null;\n }\n capture = built;\n return capture;\n } catch {\n sentryInitFailed = true;\n return null;\n }\n}\n\n/**\n * Bind `client` to an isolated scope, preferring the v8 API over v7's Hub.\n *\n * Exported for tests: the dynamic import in `ensureSentry` goes through\n * `Function(\"m\", \"return import(m)\")`, which sidesteps vitest's module mocking,\n * so this — where the actual isolation decision lives — is tested directly.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function buildCapture(sentry: any, client: any): CaptureFn | null {\n if (typeof sentry.Scope === \"function\" && sentry.Scope.prototype?.setClient) {\n // @sentry/* v8+: a Scope carries its own client.\n return (error, fingerprint, extra) => {\n const scope = new sentry.Scope();\n scope.setClient(client);\n scope.setFingerprint([fingerprint]);\n for (const [k, v] of Object.entries(extra)) scope.setExtra(k, v);\n scope.captureException(error);\n };\n }\n if (typeof sentry.Hub === \"function\") {\n // @sentry/* v7: an isolated Hub owns the client.\n const hub = new sentry.Hub(client);\n return (error, fingerprint, extra) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n hub.withScope((scope: any) => {\n scope.setFingerprint([fingerprint]);\n for (const [k, v] of Object.entries(extra)) scope.setExtra(k, v);\n hub.captureException(error);\n });\n };\n }\n return null;\n}\n\nexport interface ReportOptions {\n fingerprint: string;\n extra?: Record<string, unknown>;\n}\n\n/**\n * Report an internal SDK error out-of-band. Never throws.\n *\n * @param error The exception caught.\n * @param options fingerprint used for grouping + rate limiting; extra\n * is scrubbed against an allow-list before sending.\n */\nexport function report(error: unknown, options: ReportOptions): void {\n try {\n if (isTelemetryDisabled()) return;\n if (!checkRateLimit(options.fingerprint)) return;\n\n const errClass = error instanceof Error ? error.name : \"Error\";\n const errMessage = error instanceof Error ? error.message : String(error);\n\n if (isDebug()) {\n console.error(\n `morse internal error [${options.fingerprint}]: ${errClass}: ${errMessage}`,\n error,\n );\n } else {\n console.warn(`morse internal error [${options.fingerprint}]: ${errClass}: ${errMessage}`);\n }\n\n if (!SENTRY_DSN) return;\n\n void ensureSentry().then((captureFn) => {\n if (!captureFn) return;\n try {\n captureFn(error, options.fingerprint, scrubExtra(options.extra));\n } catch {\n // Sentry send error — swallow.\n }\n });\n } catch {\n // Absolute last-resort: nothing here may propagate.\n }\n}\n\n/**\n * Test-only reset hook — clears rate limits and sentry init state.\n *\n * @internal\n */\nexport function _resetForTesting(): void {\n rateBuckets.clear();\n capture = null;\n sentryInitFailed = false;\n}\n","/**\n * Non-invasive error isolation — the foundational SDK guarantee.\n *\n * Mirrors Python's `_internal/errors.py` `@absorb_errors` decorator. Every\n * public SDK function and every adapter-installed wrapper is wrapped with\n * `absorbErrors()`. The wrapper catches all exceptions and reports them\n * out-of-band to the Sentry reporter, then returns a benign value\n * (typically `undefined`) instead of propagating.\n *\n * Foundational principle:\n *\n * Telemetry must never break the host application.\n *\n * The customer's call returns its original result (or `undefined`)\n * regardless of whether the SDK's recording path succeeded.\n *\n * Note on async: TypeScript-land has no `KeyboardInterrupt` equivalent —\n * the analogue is \"no exceptions are special\". We absorb everything,\n * and rely on Node's `process.exit` / browser navigation to tear down\n * the runtime cleanly.\n */\n\nimport { report } from \"./sentry-reporter\";\n\nexport interface AbsorbErrorsOptions {\n /**\n * Stable identifier for grouping. Used for Sentry fingerprinting and\n * the rate limiter (max 100 events per fingerprint per minute).\n */\n fingerprint: string;\n /** Optional metadata attached to the report; scrubbed against an allow-list. */\n extra?: Record<string, unknown>;\n}\n\n/**\n * Wrap a synchronous function so that any thrown exception is absorbed\n * (reported out-of-band) instead of propagating. Returns `undefined` on\n * absorbed error.\n */\nexport function absorbErrorsSync<TArgs extends unknown[], TReturn>(\n fn: (...args: TArgs) => TReturn,\n options: AbsorbErrorsOptions,\n): (...args: TArgs) => TReturn | undefined {\n return (...args: TArgs): TReturn | undefined => {\n try {\n return fn(...args);\n } catch (err) {\n report(err, options);\n return undefined;\n }\n };\n}\n\n/**\n * Wrap an async function so that any rejection or thrown exception is\n * absorbed (reported out-of-band) instead of propagating. Returns\n * `undefined` on absorbed error.\n */\nexport function absorbErrorsAsync<TArgs extends unknown[], TReturn>(\n fn: (...args: TArgs) => Promise<TReturn>,\n options: AbsorbErrorsOptions,\n): (...args: TArgs) => Promise<TReturn | undefined> {\n return async (...args: TArgs): Promise<TReturn | undefined> => {\n try {\n return await fn(...args);\n } catch (err) {\n report(err, options);\n return undefined;\n }\n };\n}\n\n/**\n * Higher-order alias chosen to read like the Python decorator: pass a\n * function in, get a wrapped version back. Resolves to the sync or async\n * variant based on the runtime return value (a Promise). Defaults to\n * sync at the type level; use `absorbErrorsAsync` directly for proper\n * async typing.\n */\nexport const absorbErrors = absorbErrorsSync;\n"]}