@morsehq-dev/sdk 0.5.1-rc.1 → 0.6.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 (139) hide show
  1. package/dist/anthropic/index.cjs +11 -11
  2. package/dist/anthropic/index.d.cts +1 -1
  3. package/dist/anthropic/index.d.ts +1 -1
  4. package/dist/anthropic/index.js +4 -4
  5. package/dist/anthropic-agent-sdk/index.cjs +44 -40
  6. package/dist/anthropic-agent-sdk/index.cjs.map +1 -1
  7. package/dist/anthropic-agent-sdk/index.d.cts +1 -1
  8. package/dist/anthropic-agent-sdk/index.d.ts +1 -1
  9. package/dist/anthropic-agent-sdk/index.js +10 -6
  10. package/dist/anthropic-agent-sdk/index.js.map +1 -1
  11. package/dist/browser/anthropic/index.cjs +11 -11
  12. package/dist/browser/anthropic/index.js +4 -4
  13. package/dist/browser/anthropic-agent-sdk/index.cjs +44 -40
  14. package/dist/browser/anthropic-agent-sdk/index.cjs.map +1 -1
  15. package/dist/browser/anthropic-agent-sdk/index.js +10 -6
  16. package/dist/browser/anthropic-agent-sdk/index.js.map +1 -1
  17. package/dist/browser/{chunk-ZOOYJTDT.cjs → chunk-33WDUUKZ.cjs} +18 -18
  18. package/dist/browser/{chunk-ZOOYJTDT.cjs.map → chunk-33WDUUKZ.cjs.map} +1 -1
  19. package/dist/browser/{chunk-E6WORBIU.cjs → chunk-3I7IGP3P.cjs} +5 -5
  20. package/dist/browser/chunk-3I7IGP3P.cjs.map +1 -0
  21. package/dist/{chunk-FHQGPQFR.js → browser/chunk-3OYHDDOJ.js} +27 -5
  22. package/dist/browser/chunk-3OYHDDOJ.js.map +1 -0
  23. package/dist/browser/{chunk-HJTUPXNE.cjs → chunk-4IUHXUCJ.cjs} +21 -4
  24. package/dist/browser/chunk-4IUHXUCJ.cjs.map +1 -0
  25. package/dist/browser/{chunk-AX6NEG6X.js → chunk-5TYTCLKA.js} +4 -4
  26. package/dist/browser/{chunk-AX6NEG6X.js.map → chunk-5TYTCLKA.js.map} +1 -1
  27. package/dist/browser/{chunk-5IMBYZUB.js → chunk-6JHMFFPE.js} +3 -3
  28. package/dist/browser/chunk-6JHMFFPE.js.map +1 -0
  29. package/dist/{chunk-2UFTRWUS.cjs → browser/chunk-FKYI3N5N.cjs} +7 -7
  30. package/dist/browser/{chunk-FYIQARMI.cjs.map → chunk-FKYI3N5N.cjs.map} +1 -1
  31. package/dist/browser/{chunk-TIMAH323.js → chunk-FPTUHYDJ.js} +3 -3
  32. package/dist/browser/{chunk-TIMAH323.js.map → chunk-FPTUHYDJ.js.map} +1 -1
  33. package/dist/browser/{chunk-YXCWAU36.cjs → chunk-IDKQZ4X5.cjs} +38 -15
  34. package/dist/browser/chunk-IDKQZ4X5.cjs.map +1 -0
  35. package/dist/browser/{chunk-HNOHWDK3.cjs → chunk-LIP3XCTK.cjs} +12 -12
  36. package/dist/browser/{chunk-HNOHWDK3.cjs.map → chunk-LIP3XCTK.cjs.map} +1 -1
  37. package/dist/browser/{chunk-RDNSY73W.js → chunk-OUQAH27A.js} +3 -3
  38. package/dist/browser/{chunk-RDNSY73W.js.map → chunk-OUQAH27A.js.map} +1 -1
  39. package/dist/browser/{chunk-Z26QGUMP.cjs → chunk-PSNZZBQJ.cjs} +6 -6
  40. package/dist/browser/{chunk-Z26QGUMP.cjs.map → chunk-PSNZZBQJ.cjs.map} +1 -1
  41. package/dist/browser/{chunk-7G266PKE.js → chunk-PXHTLCEU.js} +21 -5
  42. package/dist/browser/chunk-PXHTLCEU.js.map +1 -0
  43. package/dist/browser/{chunk-VSHCKROM.js → chunk-TRVACYUN.js} +5 -5
  44. package/dist/browser/{chunk-VSHCKROM.js.map → chunk-TRVACYUN.js.map} +1 -1
  45. package/dist/browser/index.cjs +99 -99
  46. package/dist/browser/index.js +8 -8
  47. package/dist/browser/integrations/pino.cjs +4 -4
  48. package/dist/browser/integrations/pino.js +3 -3
  49. package/dist/browser/langchain/index.cjs +28 -26
  50. package/dist/browser/langchain/index.cjs.map +1 -1
  51. package/dist/browser/langchain/index.js +13 -11
  52. package/dist/browser/langchain/index.js.map +1 -1
  53. package/dist/browser/langgraph/index.cjs +32 -30
  54. package/dist/browser/langgraph/index.cjs.map +1 -1
  55. package/dist/browser/langgraph/index.js +10 -8
  56. package/dist/browser/langgraph/index.js.map +1 -1
  57. package/dist/browser/openai/index.cjs +11 -11
  58. package/dist/browser/openai/index.js +2 -2
  59. package/dist/browser/openai-agents/index.cjs +63 -35
  60. package/dist/browser/openai-agents/index.cjs.map +1 -1
  61. package/dist/browser/openai-agents/index.js +33 -5
  62. package/dist/browser/openai-agents/index.js.map +1 -1
  63. package/dist/browser/vercel-ai/index.cjs +14 -14
  64. package/dist/browser/vercel-ai/index.js +3 -3
  65. package/dist/{chunk-ZTBAMSCC.cjs → chunk-7DALGJL2.cjs} +72 -20
  66. package/dist/chunk-7DALGJL2.cjs.map +1 -0
  67. package/dist/{chunk-KALB7HJ5.cjs → chunk-B7TGG62X.cjs} +12 -12
  68. package/dist/{chunk-KALB7HJ5.cjs.map → chunk-B7TGG62X.cjs.map} +1 -1
  69. package/dist/{chunk-GATTHW3X.cjs → chunk-COZFARLL.cjs} +5 -5
  70. package/dist/chunk-COZFARLL.cjs.map +1 -0
  71. package/dist/{chunk-XBI4AMCW.cjs → chunk-DXTNU2KT.cjs} +38 -15
  72. package/dist/chunk-DXTNU2KT.cjs.map +1 -0
  73. package/dist/{chunk-5MJS5ECA.js → chunk-ERH3TNXZ.js} +3 -3
  74. package/dist/{chunk-5MJS5ECA.js.map → chunk-ERH3TNXZ.js.map} +1 -1
  75. package/dist/{chunk-QLJAATBR.cjs → chunk-ESJJXXB6.cjs} +6 -6
  76. package/dist/{chunk-QLJAATBR.cjs.map → chunk-ESJJXXB6.cjs.map} +1 -1
  77. package/dist/{chunk-HCN6Z56N.cjs → chunk-ETRNCI5Z.cjs} +18 -18
  78. package/dist/{chunk-HCN6Z56N.cjs.map → chunk-ETRNCI5Z.cjs.map} +1 -1
  79. package/dist/{browser/chunk-PIZVCAW7.js → chunk-GULJAURY.js} +27 -5
  80. package/dist/chunk-GULJAURY.js.map +1 -0
  81. package/dist/{chunk-YGKEP2GY.js → chunk-HJV35HWL.js} +72 -21
  82. package/dist/chunk-HJV35HWL.js.map +1 -0
  83. package/dist/{chunk-ZMRXUZ5L.js → chunk-L7AD4KUD.js} +3 -3
  84. package/dist/chunk-L7AD4KUD.js.map +1 -0
  85. package/dist/{chunk-GQVNZPRF.js → chunk-QBDTQTMN.js} +3 -3
  86. package/dist/{chunk-GQVNZPRF.js.map → chunk-QBDTQTMN.js.map} +1 -1
  87. package/dist/{browser/chunk-FYIQARMI.cjs → chunk-WG4H5JC6.cjs} +7 -7
  88. package/dist/{chunk-2UFTRWUS.cjs.map → chunk-WG4H5JC6.cjs.map} +1 -1
  89. package/dist/{chunk-62FWHZXN.js → chunk-XS4P7XPV.js} +5 -5
  90. package/dist/{chunk-62FWHZXN.js.map → chunk-XS4P7XPV.js.map} +1 -1
  91. package/dist/{chunk-4WUG3RMJ.js → chunk-YVLEDBN7.js} +4 -4
  92. package/dist/{chunk-4WUG3RMJ.js.map → chunk-YVLEDBN7.js.map} +1 -1
  93. package/dist/index.cjs +106 -106
  94. package/dist/index.cjs.map +1 -1
  95. package/dist/index.d.cts +2 -2
  96. package/dist/index.d.ts +2 -2
  97. package/dist/index.js +9 -9
  98. package/dist/index.js.map +1 -1
  99. package/dist/integrations/pino.cjs +4 -4
  100. package/dist/integrations/pino.js +3 -3
  101. package/dist/langchain/index.cjs +28 -26
  102. package/dist/langchain/index.cjs.map +1 -1
  103. package/dist/langchain/index.d.cts +3 -3
  104. package/dist/langchain/index.d.ts +3 -3
  105. package/dist/langchain/index.js +13 -11
  106. package/dist/langchain/index.js.map +1 -1
  107. package/dist/langgraph/index.cjs +32 -30
  108. package/dist/langgraph/index.cjs.map +1 -1
  109. package/dist/langgraph/index.d.cts +3 -3
  110. package/dist/langgraph/index.d.ts +3 -3
  111. package/dist/langgraph/index.js +10 -8
  112. package/dist/langgraph/index.js.map +1 -1
  113. package/dist/openai/index.cjs +11 -11
  114. package/dist/openai/index.js +2 -2
  115. package/dist/openai-agents/index.cjs +63 -35
  116. package/dist/openai-agents/index.cjs.map +1 -1
  117. package/dist/openai-agents/index.d.cts +13 -4
  118. package/dist/openai-agents/index.d.ts +13 -4
  119. package/dist/openai-agents/index.js +33 -5
  120. package/dist/openai-agents/index.js.map +1 -1
  121. package/dist/{spans-DZtMuBvc.d.cts → spans-CBMWNg2C.d.cts} +1 -0
  122. package/dist/{spans-DZtMuBvc.d.ts → spans-CBMWNg2C.d.ts} +1 -0
  123. package/dist/{tracing-J8ZgxVzU.d.ts → tracing-BMWTyexr.d.ts} +1 -1
  124. package/dist/{tracing-CNlre8TK.d.cts → tracing-Bh-cbvr6.d.cts} +1 -1
  125. package/dist/vercel-ai/index.cjs +14 -14
  126. package/dist/vercel-ai/index.js +3 -3
  127. package/package.json +1 -1
  128. package/dist/browser/chunk-5IMBYZUB.js.map +0 -1
  129. package/dist/browser/chunk-7G266PKE.js.map +0 -1
  130. package/dist/browser/chunk-E6WORBIU.cjs.map +0 -1
  131. package/dist/browser/chunk-HJTUPXNE.cjs.map +0 -1
  132. package/dist/browser/chunk-PIZVCAW7.js.map +0 -1
  133. package/dist/browser/chunk-YXCWAU36.cjs.map +0 -1
  134. package/dist/chunk-FHQGPQFR.js.map +0 -1
  135. package/dist/chunk-GATTHW3X.cjs.map +0 -1
  136. package/dist/chunk-XBI4AMCW.cjs.map +0 -1
  137. package/dist/chunk-YGKEP2GY.js.map +0 -1
  138. package/dist/chunk-ZMRXUZ5L.js.map +0 -1
  139. package/dist/chunk-ZTBAMSCC.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/_internal/active-framework.ts","../src/_internal/llm-io.ts"],"names":["init_tracing","getActiveTraceState","getRole","contentToText","getContent"],"mappings":"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","file":"chunk-COZFARLL.cjs","sourcesContent":["/**\n * MHQ-859 — active framework discovery, the TS half of AGE-240.\n *\n * Python has had this since AGE-240: each adapter marks itself active when\n * it intercepts a call, the trace stamps `morse_ai.framework` on its\n * resource, and the server uses it to disambiguate agents that share a\n * logical name but not an implementation. TypeScript had the *consumer*\n * side wired all along — `otel-provider.ts` already maps\n * `resource[\"morse_ai.framework\"]` to the `morse.framework` root-span\n * attribute — but nothing ever set it, so every TS trace landed with\n * `framework` NULL and framework filtering silently excluded all TS traffic.\n *\n * Python uses a `threading.local`. The Node equivalent is per-trace state,\n * not per-thread: `AsyncLocalStorage` already scopes the active trace, and\n * concurrent traces in one process must not see each other's marker. So the\n * marker is written straight onto the active trace state and there is no\n * module-global to leak across interleaved async calls — which also removes\n * the need for Python's `clear_active_framework()` try/finally discipline.\n *\n * First framework wins per trace: when a customer mixes two adapters in one\n * trace, the first to fire defines the label. Absence is the signal — never\n * invent a default.\n */\n\nimport { getActiveTraceState } from \"./tracing\";\n\n/**\n * Mark `name` as the framework for the currently-active trace.\n *\n * No-op when no trace is active (an adapter can fire outside `run()`), and\n * no-op when a framework is already set. Never throws — telemetry must not\n * break customer code.\n */\nexport function setActiveFramework(name: string): void {\n if (typeof name !== \"string\" || name.length === 0) return;\n try {\n const state = getActiveTraceState();\n if (state !== null && !state.framework) {\n state.framework = name;\n }\n } catch {\n // swallow — never break the caller\n }\n}\n\n/** Framework recorded on the active trace, or `undefined`. */\nexport function getActiveFramework(): string | undefined {\n try {\n return getActiveTraceState()?.framework ?? undefined;\n } catch {\n return undefined;\n }\n}\n","/**\n * MHQ-858 — shared `input_data` / `output_data` capture for LLM spans.\n *\n * Python's adapters have captured prompt/response content on `llm` spans\n * since MHQ-772; no TypeScript adapter ever did, so the trace-detail\n * INPUT/OUTPUT panes were empty for every TS customer while being populated\n * for the Python customer running the identical workload.\n *\n * Mirrors `morse_ai/adapters/anthropic.py`'s `_safe_input_messages` /\n * `_extract_output_text`, including the 4096-byte cap, so the two SDKs\n * produce the same shape for the same call.\n */\n\nimport { contentToText, getContent, getRole } from \"../_agent-sdk-common/context-decomposer\";\n\n/** Bytes of text kept per field. Matches Python's `_CONTENT_BYTE_CAP`. */\nexport const CONTENT_BYTE_CAP = 4096;\n\n/**\n * Truncate on a UTF-8 *byte* budget, not a UTF-16 code-unit count — a\n * 4096-char string of emoji is 16KB on the wire. Never splits a code point.\n */\nexport function truncateText(text: string, maxBytes: number = CONTENT_BYTE_CAP): string {\n if (typeof text !== \"string\" || text.length === 0) return text;\n const encoder = new TextEncoder();\n const bytes = encoder.encode(text);\n if (bytes.length <= maxBytes) return text;\n // `fatal: false` replaces a trailing partial code point with U+FFFD\n // rather than throwing; drop it so the value stays clean.\n const sliced = new TextDecoder(\"utf-8\", { fatal: false }).decode(bytes.subarray(0, maxBytes));\n return sliced.replace(/�$/, \"\") + \"…\";\n}\n\nexport interface CapturedInput {\n messages: Array<{ role?: unknown; content?: unknown }>;\n system?: string;\n}\n\n/**\n * Build a truncated, JSON-safe `input_data` from a chat-completions-shaped\n * request. String content is truncated; block-form content (tool_use,\n * tool_result, image parts) passes through as-is — per-block truncation\n * would mean reconstructing each provider's content-block schema exactly,\n * which is not worth it for a display field.\n *\n * Returns `undefined` when there is nothing worth showing, so callers can\n * assign unconditionally without writing empty objects onto the wire.\n */\nexport function captureInputMessages(\n messages: unknown,\n system?: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n\n const safeMessages = messages\n .filter((m): m is Record<string, unknown> => typeof m === \"object\" && m !== null)\n .map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? truncateText(m.content, maxBytes) : m.content,\n }));\n if (safeMessages.length === 0) return undefined;\n\n const out: CapturedInput = { messages: safeMessages };\n const systemText = flattenSystem(system);\n if (systemText) out.system = truncateText(systemText, maxBytes);\n return out;\n}\n\n/**\n * Anthropic's `system` is either a string or an array of text blocks.\n * Returns `undefined` when neither yields text.\n */\nexport function flattenSystem(system: unknown): string | undefined {\n if (typeof system === \"string\") return system || undefined;\n if (!Array.isArray(system)) return undefined;\n const parts = system\n .map((block) =>\n typeof block === \"string\"\n ? block\n : typeof (block as { text?: unknown })?.text === \"string\"\n ? (block as { text: string }).text\n : \"\",\n )\n .filter(Boolean);\n return parts.length > 0 ? parts.join(\"\\n\") : undefined;\n}\n\n/**\n * Extract the assistant's text from an Anthropic `Message.content` array.\n * A response that only calls a tool still yields something meaningful\n * rather than nothing — same rule as Python's `_extract_output_text`.\n */\nexport function extractAnthropicOutputText(\n content: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(content) || content.length === 0) return undefined;\n const parts: string[] = [];\n for (const block of content) {\n const b = block as { type?: unknown; text?: unknown; name?: unknown; input?: unknown };\n if (b?.type === \"text\" && typeof b.text === \"string\" && b.text) {\n parts.push(b.text);\n } else if (b?.type === \"tool_use\") {\n const name = typeof b.name === \"string\" ? b.name : \"tool\";\n parts.push(b.input ? `[tool_use:${name}] ${safeJson(b.input)}` : `[tool_use:${name}]`);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * Extract the assistant's text from an OpenAI chat-completions response,\n * including a tool-call-only response.\n */\nexport function extractOpenAiOutputText(\n choices: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(choices) || choices.length === 0) return undefined;\n const parts: string[] = [];\n for (const choice of choices) {\n const message = (choice as { message?: Record<string, unknown> })?.message;\n if (!message) continue;\n if (typeof message.content === \"string\" && message.content) {\n parts.push(message.content);\n }\n const toolCalls = message.tool_calls;\n if (Array.isArray(toolCalls)) {\n for (const call of toolCalls) {\n const fn = (call as { function?: { name?: unknown; arguments?: unknown } })?.function;\n const name = typeof fn?.name === \"string\" ? fn.name : \"tool\";\n parts.push(\n fn?.arguments ? `[tool_call:${name}] ${String(fn.arguments)}` : `[tool_call:${name}]`,\n );\n }\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * `input_data` for LangChain/LangGraph callbacks, whose messages are class\n * instances with `_getType()` rather than plain `{role, content}` dicts.\n * Reuses the decomposer's duck-typing so the two never drift.\n */\nexport function captureLangChainMessages(\n messages: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n const safeMessages = messages\n .map((m) => ({ role: getRole(m) || undefined, content: contentToText(getContent(m)) }))\n .filter((m) => m.content.length > 0)\n .map((m) => ({ role: m.role, content: truncateText(m.content, maxBytes) }));\n return safeMessages.length > 0 ? { messages: safeMessages } : undefined;\n}\n\n/** `input_data` for the raw-prompt (non-chat) LangChain LLM callback. */\nexport function capturePrompts(\n prompts: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(prompts) || prompts.length === 0) return undefined;\n const messages = prompts\n .filter((p): p is string => typeof p === \"string\" && p.length > 0)\n .map((p) => ({ role: \"user\" as const, content: truncateText(p, maxBytes) }));\n return messages.length > 0 ? { messages } : undefined;\n}\n\n/**\n * `output_data` text from a LangChain `LLMResult` — `generations` is an\n * array-of-arrays (one inner array per prompt).\n */\nexport function extractLangChainOutputText(\n generations: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(generations)) return undefined;\n const parts: string[] = [];\n for (const group of generations) {\n if (!Array.isArray(group)) continue;\n for (const gen of group) {\n const text = (gen as { text?: unknown })?.text;\n if (typeof text === \"string\" && text) parts.push(text);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\nfunction safeJson(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkQLJAATBR_cjs = require('./chunk-QLJAATBR.cjs');
4
- var chunkZTBAMSCC_cjs = require('./chunk-ZTBAMSCC.cjs');
3
+ var chunkESJJXXB6_cjs = require('./chunk-ESJJXXB6.cjs');
4
+ var chunk7DALGJL2_cjs = require('./chunk-7DALGJL2.cjs');
5
5
 
6
6
  // src/_agent-sdk-common/span-emitter.ts
7
- chunkZTBAMSCC_cjs.init_tracing();
7
+ chunk7DALGJL2_cjs.init_tracing();
8
8
  var MAX_NAME_BYTES = 256;
9
9
  var MAX_DESCRIPTION_BYTES = 2048;
10
10
  function truncate(value, maxBytes) {
@@ -25,7 +25,7 @@ var _emitAgentSpan = (opts) => {
25
25
  adapter,
26
26
  agent_name: agentName
27
27
  };
28
- const handle = chunkZTBAMSCC_cjs.startSpan({
28
+ const handle = chunk7DALGJL2_cjs.startSpan({
29
29
  name: `${adapter}.agent`,
30
30
  type: "agent",
31
31
  metadata
@@ -37,7 +37,7 @@ var _emitAgentSpan = (opts) => {
37
37
  }
38
38
  return handle;
39
39
  };
40
- var emitAgentSpan = chunkQLJAATBR_cjs.absorbErrorsSync(
40
+ var emitAgentSpan = chunkESJJXXB6_cjs.absorbErrorsSync(
41
41
  _emitAgentSpan,
42
42
  {
43
43
  fingerprint: "morse.adapters.shared.emitAgentSpan"
@@ -54,7 +54,7 @@ var _emitLlmSpan = (opts) => {
54
54
  if (typeof opts.provider === "string" && opts.provider.length > 0) {
55
55
  metadata.provider = opts.provider;
56
56
  }
57
- const handle = chunkZTBAMSCC_cjs.startSpan({
57
+ const handle = chunk7DALGJL2_cjs.startSpan({
58
58
  name: `${adapter}.llm`,
59
59
  type: "llm",
60
60
  metadata
@@ -80,7 +80,7 @@ var _emitLlmSpan = (opts) => {
80
80
  if (opts.outputData !== void 0) span.output_data = opts.outputData;
81
81
  return handle;
82
82
  };
83
- var emitLlmSpan = chunkQLJAATBR_cjs.absorbErrorsSync(
83
+ var emitLlmSpan = chunkESJJXXB6_cjs.absorbErrorsSync(
84
84
  _emitLlmSpan,
85
85
  {
86
86
  fingerprint: "morse.adapters.shared.emitLlmSpan"
@@ -101,13 +101,13 @@ var _emitToolSpan = (opts) => {
101
101
  adapter,
102
102
  tool
103
103
  };
104
- return chunkZTBAMSCC_cjs.startSpan({
104
+ return chunk7DALGJL2_cjs.startSpan({
105
105
  name: `${adapter}.tool.${toolName}`,
106
106
  type: "tool",
107
107
  metadata
108
108
  });
109
109
  };
110
- var emitToolSpan = chunkQLJAATBR_cjs.absorbErrorsSync(
110
+ var emitToolSpan = chunkESJJXXB6_cjs.absorbErrorsSync(
111
111
  _emitToolSpan,
112
112
  {
113
113
  fingerprint: "morse.adapters.shared.emitToolSpan"
@@ -127,15 +127,37 @@ var _emitSubagentSpan = (opts) => {
127
127
  if (typeof opts.taskDescription === "string" && opts.taskDescription.length > 0) {
128
128
  metadata.task_description = truncate(opts.taskDescription, MAX_DESCRIPTION_BYTES);
129
129
  }
130
- return chunkZTBAMSCC_cjs.startSpan({
130
+ return chunk7DALGJL2_cjs.startSpan({
131
131
  name: `${adapter}.subagent.${subagentName}`,
132
132
  type: "agent",
133
133
  metadata
134
134
  });
135
135
  };
136
- var emitSubagentSpan = chunkQLJAATBR_cjs.absorbErrorsSync(_emitSubagentSpan, {
136
+ var emitSubagentSpan = chunkESJJXXB6_cjs.absorbErrorsSync(_emitSubagentSpan, {
137
137
  fingerprint: "morse.adapters.shared.emitSubagentSpan"
138
138
  });
139
+ var _emitHandoffSpan = (opts) => {
140
+ const adapter = requireNonEmpty(opts.adapter, "adapter");
141
+ const fromAgent = truncate(requireNonEmpty(opts.fromAgent, "fromAgent"), MAX_NAME_BYTES);
142
+ const toAgent = truncate(requireNonEmpty(opts.toAgent, "toAgent"), MAX_NAME_BYTES);
143
+ const metadata = {
144
+ ...opts.attributes ?? {},
145
+ adapter,
146
+ from_agent: fromAgent,
147
+ to_agent: toAgent
148
+ };
149
+ if (typeof opts.reason === "string" && opts.reason.length > 0) {
150
+ metadata.handoff_reason = truncate(opts.reason, MAX_DESCRIPTION_BYTES);
151
+ }
152
+ return chunk7DALGJL2_cjs.startSpan({
153
+ name: `${fromAgent} \u2192 ${toAgent}`,
154
+ type: "handoff",
155
+ metadata
156
+ });
157
+ };
158
+ var emitHandoffSpan = chunkESJJXXB6_cjs.absorbErrorsSync(_emitHandoffSpan, {
159
+ fingerprint: "morse.adapters.shared.emitHandoffSpan"
160
+ });
139
161
  var _emitHookSpan = (opts) => {
140
162
  const adapter = requireNonEmpty(opts.adapter, "adapter");
141
163
  const hookName = truncate(requireNonEmpty(opts.hookName, "hookName"), MAX_NAME_BYTES);
@@ -157,13 +179,13 @@ var _emitHookSpan = (opts) => {
157
179
  tool_kind: "hook",
158
180
  hook
159
181
  };
160
- return chunkZTBAMSCC_cjs.startSpan({
182
+ return chunk7DALGJL2_cjs.startSpan({
161
183
  name: `${adapter}.hook.${hookKind}.${hookName}`,
162
184
  type: "tool",
163
185
  metadata
164
186
  });
165
187
  };
166
- var emitHookSpan = chunkQLJAATBR_cjs.absorbErrorsSync(
188
+ var emitHookSpan = chunkESJJXXB6_cjs.absorbErrorsSync(
167
189
  _emitHookSpan,
168
190
  {
169
191
  fingerprint: "morse.adapters.shared.emitHookSpan"
@@ -171,9 +193,10 @@ var emitHookSpan = chunkQLJAATBR_cjs.absorbErrorsSync(
171
193
  );
172
194
 
173
195
  exports.emitAgentSpan = emitAgentSpan;
196
+ exports.emitHandoffSpan = emitHandoffSpan;
174
197
  exports.emitHookSpan = emitHookSpan;
175
198
  exports.emitLlmSpan = emitLlmSpan;
176
199
  exports.emitSubagentSpan = emitSubagentSpan;
177
200
  exports.emitToolSpan = emitToolSpan;
178
- //# sourceMappingURL=chunk-XBI4AMCW.cjs.map
179
- //# sourceMappingURL=chunk-XBI4AMCW.cjs.map
201
+ //# sourceMappingURL=chunk-DXTNU2KT.cjs.map
202
+ //# sourceMappingURL=chunk-DXTNU2KT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/_agent-sdk-common/span-emitter.ts"],"names":["init_tracing","startSpan","absorbErrorsSync"],"mappings":"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","file":"chunk-DXTNU2KT.cjs","sourcesContent":["/**\n * `_agent-sdk-common/span-emitter.ts` — shared span-emission helpers used by\n * all three agent-SDK adapters (`anthropic-agent-sdk`, `openai-agents`,\n * `langgraph-js`).\n *\n * Each helper:\n *\n * 1. Validates the required metadata for its logical span type.\n * 2. Calls `startSpan(...)` from `_internal/tracing.ts` to allocate the\n * wire-format span and push it onto the active trace's span stack.\n * 3. Tags `metadata.adapter` on every span so the UI can attribute spans\n * back to their adapter origin.\n * 4. Hydrates type-specific top-level fields (`model`, `input_tokens`,\n * `output_tokens`, `total_tokens`, `context_segments`) onto `SpanData`.\n * 5. Returns the `SpanHandle` so callers can later call `.end(err?)`.\n *\n * All helpers are wrapped in `absorbErrorsSync` — telemetry MUST NOT throw\n * at the caller. If `startSpan` returns `null` (no active trace), the\n * helper also returns `null`; callers must tolerate this case.\n *\n * Logical → wire `type` mapping (per `design.md` §Span schema):\n *\n * agent → \"agent\"\n * llm → \"llm\"\n * tool → \"tool\"\n * subagent → \"agent\" + metadata.spawn_kind = \"subagent\"\n * hook → \"tool\" + metadata.tool_kind = \"hook\"\n * handoff → \"handoff\" (native since MHQ-1025 — no metadata stand-in)\n *\n * Adapter-flavoured redaction (tool-arg truncation, base64/image\n * stripping) lives in a sibling `redaction.ts` (W1.2). This file is\n * intentionally agnostic: the only redaction it applies is a minimal\n * string-length guard on free-form fields that would otherwise blow up\n * the wire payload (task descriptions, hook names, tool names).\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { ContextSegment, SpanData } from \"../_internal/spans\";\nimport { startSpan, type SpanHandle } from \"../_internal/tracing\";\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\nexport type AdapterName = \"anthropic-agent-sdk\" | \"openai-agents\" | \"langgraph-js\" | \"vercel-ai\";\n\n/** Soft cap for free-form identifier-ish strings (tool names, hook names, etc.). */\nconst MAX_NAME_BYTES = 256;\n\n/** Soft cap for free-form description strings (task descriptions). */\nconst MAX_DESCRIPTION_BYTES = 2048;\n\n/** Trim a string to `maxBytes` bytes (UTF-8 codepoint-safe at the JS-string level). */\nfunction truncate(value: string, maxBytes: number): string {\n if (value.length <= maxBytes) return value;\n return `${value.slice(0, maxBytes)}…[truncated]`;\n}\n\nfunction requireNonEmpty(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`morse span-emitter: ${field} must be a non-empty string`);\n }\n return value;\n}\n\n/* ------------------------------------------------------------------------ */\n/* emitAgentSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitAgentSpanOptions {\n adapter: AdapterName;\n agentName: string;\n model?: string;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitAgentSpan = (opts: EmitAgentSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const agentName = requireNonEmpty(opts.agentName, \"agentName\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n agent_name: agentName,\n };\n const handle = startSpan({\n name: `${adapter}.agent`,\n type: \"agent\",\n metadata,\n });\n if (handle === null) return null;\n if (typeof opts.model === \"string\" && opts.model.length > 0) {\n handle.span.model = opts.model;\n metadata.model = opts.model;\n }\n return handle;\n};\n\n/**\n * Emit a wire `type=agent` span. Returns `null` when no active trace exists\n * (callers MUST tolerate this); never throws.\n */\nexport const emitAgentSpan: (opts: EmitAgentSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitAgentSpan,\n {\n fingerprint: \"morse.adapters.shared.emitAgentSpan\",\n },\n) as (opts: EmitAgentSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitLlmSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitLlmSpanOptions {\n adapter: AdapterName;\n model: string;\n provider?: string;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n contextSegments?: ContextSegment[];\n attributes?: Record<string, unknown>;\n // MHQ-858: prompt/response capture. Adapters pass already-truncated\n // values (see `_internal/llm-io.ts`); this emitter does not truncate.\n inputData?: unknown;\n outputData?: unknown;\n}\n\nconst _emitLlmSpan = (opts: EmitLlmSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const model = requireNonEmpty(opts.model, \"model\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n model,\n };\n if (typeof opts.provider === \"string\" && opts.provider.length > 0) {\n metadata.provider = opts.provider;\n }\n const handle = startSpan({\n name: `${adapter}.llm`,\n type: \"llm\",\n metadata,\n });\n if (handle === null) return null;\n const span: SpanData = handle.span;\n span.model = model;\n if (typeof opts.inputTokens === \"number\" && Number.isFinite(opts.inputTokens)) {\n span.input_tokens = opts.inputTokens;\n }\n if (typeof opts.outputTokens === \"number\" && Number.isFinite(opts.outputTokens)) {\n span.output_tokens = opts.outputTokens;\n }\n if (typeof opts.totalTokens === \"number\" && Number.isFinite(opts.totalTokens)) {\n span.total_tokens = opts.totalTokens;\n } else if (span.input_tokens !== undefined && span.output_tokens !== undefined) {\n span.total_tokens = span.input_tokens + span.output_tokens;\n }\n if (Array.isArray(opts.contextSegments)) {\n span.context_segments = opts.contextSegments;\n }\n if (opts.inputData !== undefined) span.input_data = opts.inputData;\n if (opts.outputData !== undefined) span.output_data = opts.outputData;\n return handle;\n};\n\n/**\n * Emit a wire `type=llm` span. Returns `null` when no active trace exists;\n * never throws. Hydrates `model`, `input_tokens`, `output_tokens`,\n * `total_tokens` (derived if absent), and `context_segments` onto the\n * underlying `SpanData` so downstream consumers see them at the top level\n * — not buried in `metadata`.\n */\nexport const emitLlmSpan: (opts: EmitLlmSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitLlmSpan,\n {\n fingerprint: \"morse.adapters.shared.emitLlmSpan\",\n },\n) as (opts: EmitLlmSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitToolSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitToolSpanOptions {\n adapter: AdapterName;\n toolName: string;\n inputSummary?: unknown;\n outputSummary?: unknown;\n durationMs?: number;\n success?: boolean;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitToolSpan = (opts: EmitToolSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const toolName = truncate(requireNonEmpty(opts.toolName, \"toolName\"), MAX_NAME_BYTES);\n const tool: Record<string, unknown> = { name: toolName };\n if (opts.inputSummary !== undefined) tool.input_summary = opts.inputSummary;\n if (opts.outputSummary !== undefined) tool.output_summary = opts.outputSummary;\n if (typeof opts.durationMs === \"number\" && Number.isFinite(opts.durationMs)) {\n tool.duration_ms = opts.durationMs;\n }\n if (typeof opts.success === \"boolean\") tool.success = opts.success;\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n tool,\n };\n return startSpan({\n name: `${adapter}.tool.${toolName}`,\n type: \"tool\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=tool` span. Returns `null` when no active trace exists;\n * never throws.\n */\nexport const emitToolSpan: (opts: EmitToolSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitToolSpan,\n {\n fingerprint: \"morse.adapters.shared.emitToolSpan\",\n },\n) as (opts: EmitToolSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitSubagentSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitSubagentSpanOptions {\n adapter: AdapterName;\n parentAgentName: string;\n subagentName: string;\n taskDescription?: string;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitSubagentSpan = (opts: EmitSubagentSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const parentAgentName = requireNonEmpty(opts.parentAgentName, \"parentAgentName\");\n const subagentName = requireNonEmpty(opts.subagentName, \"subagentName\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n spawn_kind: \"subagent\",\n parent_agent_name: parentAgentName,\n subagent_name: subagentName,\n };\n if (typeof opts.taskDescription === \"string\" && opts.taskDescription.length > 0) {\n metadata.task_description = truncate(opts.taskDescription, MAX_DESCRIPTION_BYTES);\n }\n return startSpan({\n name: `${adapter}.subagent.${subagentName}`,\n type: \"agent\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=agent` span with `metadata.spawn_kind=\"subagent\"` — the\n * UI inspects this metadata key to render subagent-spawn relationships\n * until the backend gains a native `subagent` enum value. Returns `null`\n * when no active trace exists; never throws.\n */\nexport const emitSubagentSpan: (opts: EmitSubagentSpanOptions) => SpanHandle | null =\n absorbErrorsSync(_emitSubagentSpan, {\n fingerprint: \"morse.adapters.shared.emitSubagentSpan\",\n }) as (opts: EmitSubagentSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitHandoffSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitHandoffSpanOptions {\n adapter: AdapterName;\n fromAgent: string;\n toAgent: string;\n reason?: string;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitHandoffSpan = (opts: EmitHandoffSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const fromAgent = truncate(requireNonEmpty(opts.fromAgent, \"fromAgent\"), MAX_NAME_BYTES);\n const toAgent = truncate(requireNonEmpty(opts.toAgent, \"toAgent\"), MAX_NAME_BYTES);\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n from_agent: fromAgent,\n to_agent: toAgent,\n };\n if (typeof opts.reason === \"string\" && opts.reason.length > 0) {\n metadata.handoff_reason = truncate(opts.reason, MAX_DESCRIPTION_BYTES);\n }\n return startSpan({\n name: `${fromAgent} → ${toAgent}`,\n type: \"handoff\",\n metadata,\n });\n};\n\n/**\n * Emit a native wire `type=handoff` span for one routing decision between two\n * agents (MHQ-1025). Mirrors the Python SDK: name `from → to`, metadata\n * `{from_agent, to_agent}`. Returns `null` when no active trace exists; never\n * throws.\n */\nexport const emitHandoffSpan: (opts: EmitHandoffSpanOptions) => SpanHandle | null =\n absorbErrorsSync(_emitHandoffSpan, {\n fingerprint: \"morse.adapters.shared.emitHandoffSpan\",\n }) as (opts: EmitHandoffSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitHookSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitHookSpanOptions {\n adapter: AdapterName;\n hookName: string;\n hookKind: \"pre_tool\" | \"post_tool\" | \"on_error\";\n durationMs?: number;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitHookSpan = (opts: EmitHookSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const hookName = truncate(requireNonEmpty(opts.hookName, \"hookName\"), MAX_NAME_BYTES);\n const hookKind = opts.hookKind;\n if (hookKind !== \"pre_tool\" && hookKind !== \"post_tool\" && hookKind !== \"on_error\") {\n throw new Error(\n `morse span-emitter: hookKind must be one of pre_tool|post_tool|on_error (got ${String(\n hookKind,\n )})`,\n );\n }\n const hook: Record<string, unknown> = { name: hookName, kind: hookKind };\n if (typeof opts.durationMs === \"number\" && Number.isFinite(opts.durationMs)) {\n hook.duration_ms = opts.durationMs;\n }\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n tool_kind: \"hook\",\n hook,\n };\n return startSpan({\n name: `${adapter}.hook.${hookKind}.${hookName}`,\n type: \"tool\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=tool` span with `metadata.tool_kind=\"hook\"` — the UI\n * inspects this metadata key to render hook spans separately from regular\n * tool spans. Returns `null` when no active trace exists; never throws.\n */\nexport const emitHookSpan: (opts: EmitHookSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitHookSpan,\n {\n fingerprint: \"morse.adapters.shared.emitHookSpan\",\n },\n) as (opts: EmitHookSpanOptions) => SpanHandle | null;\n"]}
@@ -1,4 +1,4 @@
1
- import { init_diagnostics, report } from './chunk-YGKEP2GY.js';
1
+ import { init_diagnostics, report } from './chunk-HJV35HWL.js';
2
2
 
3
3
  // src/_internal/errors.ts
4
4
  init_diagnostics();
@@ -24,5 +24,5 @@ function absorbErrorsAsync(fn, options) {
24
24
  }
25
25
 
26
26
  export { absorbErrorsAsync, absorbErrorsSync };
27
- //# sourceMappingURL=chunk-5MJS5ECA.js.map
28
- //# sourceMappingURL=chunk-5MJS5ECA.js.map
27
+ //# sourceMappingURL=chunk-ERH3TNXZ.js.map
28
+ //# sourceMappingURL=chunk-ERH3TNXZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/_internal/errors.ts"],"names":[],"mappings":";;;AAsBA,gBAAA,EAAA;AAiBO,SAAS,gBAAA,CACd,IACA,OAAA,EACyC;AACzC,EAAA,OAAO,IAAI,IAAA,KAAqC;AAC9C,IAAA,IAAI;AACF,MAAA,OAAO,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;AAOO,SAAS,iBAAA,CACd,IACA,OAAA,EACkD;AAClD,EAAA,OAAO,UAAU,IAAA,KAA8C;AAC7D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF","file":"chunk-5MJS5ECA.js","sourcesContent":["/**\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 Morse's own diagnostics endpoint, 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 \"./diagnostics\";\n\nexport interface AbsorbErrorsOptions {\n /**\n * Stable identifier for grouping. Used for server-side grouping 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"]}
1
+ {"version":3,"sources":["../src/_internal/errors.ts"],"names":[],"mappings":";;;AAsBA,gBAAA,EAAA;AAiBO,SAAS,gBAAA,CACd,IACA,OAAA,EACyC;AACzC,EAAA,OAAO,IAAI,IAAA,KAAqC;AAC9C,IAAA,IAAI;AACF,MAAA,OAAO,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;AAOO,SAAS,iBAAA,CACd,IACA,OAAA,EACkD;AAClD,EAAA,OAAO,UAAU,IAAA,KAA8C;AAC7D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF","file":"chunk-ERH3TNXZ.js","sourcesContent":["/**\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 Morse's own diagnostics endpoint, 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 \"./diagnostics\";\n\nexport interface AbsorbErrorsOptions {\n /**\n * Stable identifier for grouping. Used for server-side grouping 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"]}
@@ -1,15 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var chunkZTBAMSCC_cjs = require('./chunk-ZTBAMSCC.cjs');
3
+ var chunk7DALGJL2_cjs = require('./chunk-7DALGJL2.cjs');
4
4
 
5
5
  // src/_internal/errors.ts
6
- chunkZTBAMSCC_cjs.init_diagnostics();
6
+ chunk7DALGJL2_cjs.init_diagnostics();
7
7
  function absorbErrorsSync(fn, options) {
8
8
  return (...args) => {
9
9
  try {
10
10
  return fn(...args);
11
11
  } catch (err) {
12
- chunkZTBAMSCC_cjs.report(err, options);
12
+ chunk7DALGJL2_cjs.report(err, options);
13
13
  return void 0;
14
14
  }
15
15
  };
@@ -19,7 +19,7 @@ function absorbErrorsAsync(fn, options) {
19
19
  try {
20
20
  return await fn(...args);
21
21
  } catch (err) {
22
- chunkZTBAMSCC_cjs.report(err, options);
22
+ chunk7DALGJL2_cjs.report(err, options);
23
23
  return void 0;
24
24
  }
25
25
  };
@@ -27,5 +27,5 @@ function absorbErrorsAsync(fn, options) {
27
27
 
28
28
  exports.absorbErrorsAsync = absorbErrorsAsync;
29
29
  exports.absorbErrorsSync = absorbErrorsSync;
30
- //# sourceMappingURL=chunk-QLJAATBR.cjs.map
31
- //# sourceMappingURL=chunk-QLJAATBR.cjs.map
30
+ //# sourceMappingURL=chunk-ESJJXXB6.cjs.map
31
+ //# sourceMappingURL=chunk-ESJJXXB6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/_internal/errors.ts"],"names":["init_diagnostics","report"],"mappings":";;;;;AAsBAA,kCAAA,EAAA;AAiBO,SAAS,gBAAA,CACd,IACA,OAAA,EACyC;AACzC,EAAA,OAAO,IAAI,IAAA,KAAqC;AAC9C,IAAA,IAAI;AACF,MAAA,OAAO,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAAC,wBAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;AAOO,SAAS,iBAAA,CACd,IACA,OAAA,EACkD;AAClD,EAAA,OAAO,UAAU,IAAA,KAA8C;AAC7D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAAA,wBAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF","file":"chunk-QLJAATBR.cjs","sourcesContent":["/**\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 Morse's own diagnostics endpoint, 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 \"./diagnostics\";\n\nexport interface AbsorbErrorsOptions {\n /**\n * Stable identifier for grouping. Used for server-side grouping 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"]}
1
+ {"version":3,"sources":["../src/_internal/errors.ts"],"names":["init_diagnostics","report"],"mappings":";;;;;AAsBAA,kCAAA,EAAA;AAiBO,SAAS,gBAAA,CACd,IACA,OAAA,EACyC;AACzC,EAAA,OAAO,IAAI,IAAA,KAAqC;AAC9C,IAAA,IAAI;AACF,MAAA,OAAO,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAAC,wBAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;AAOO,SAAS,iBAAA,CACd,IACA,OAAA,EACkD;AAClD,EAAA,OAAO,UAAU,IAAA,KAA8C;AAC7D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAAA,wBAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF","file":"chunk-ESJJXXB6.cjs","sourcesContent":["/**\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 Morse's own diagnostics endpoint, 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 \"./diagnostics\";\n\nexport interface AbsorbErrorsOptions {\n /**\n * Stable identifier for grouping. Used for server-side grouping 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"]}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkGATTHW3X_cjs = require('./chunk-GATTHW3X.cjs');
4
- var chunkQLJAATBR_cjs = require('./chunk-QLJAATBR.cjs');
3
+ var chunkCOZFARLL_cjs = require('./chunk-COZFARLL.cjs');
4
+ var chunkESJJXXB6_cjs = require('./chunk-ESJJXXB6.cjs');
5
5
  var chunkKBWPNIH4_cjs = require('./chunk-KBWPNIH4.cjs');
6
- var chunkZTBAMSCC_cjs = require('./chunk-ZTBAMSCC.cjs');
6
+ var chunk7DALGJL2_cjs = require('./chunk-7DALGJL2.cjs');
7
7
 
8
8
  // src/anthropic/index.ts
9
- chunkZTBAMSCC_cjs.init_spans();
10
- chunkZTBAMSCC_cjs.init_tracing();
9
+ chunk7DALGJL2_cjs.init_spans();
10
+ chunk7DALGJL2_cjs.init_tracing();
11
11
  var WRAPPED_CLIENT = /* @__PURE__ */ Symbol.for("morse.anthropic.wrapped");
12
12
  var INSTALL_SENTINEL = /* @__PURE__ */ Symbol.for("morse.anthropic.installed");
13
13
  var ORIGINALS_SENTINEL = /* @__PURE__ */ Symbol.for("morse.anthropic.originals");
@@ -38,7 +38,7 @@ function wrapAnthropic(client, options = {}) {
38
38
  });
39
39
  return wrapper;
40
40
  }
41
- var instrumentAnthropic = chunkQLJAATBR_cjs.absorbErrorsAsync(
41
+ var instrumentAnthropic = chunkESJJXXB6_cjs.absorbErrorsAsync(
42
42
  async (clientOrOptions, maybeOptions) => {
43
43
  if (clientOrOptions && isClient(clientOrOptions)) {
44
44
  const opts2 = maybeOptions ?? {};
@@ -74,7 +74,7 @@ var instrumentAnthropic = chunkQLJAATBR_cjs.absorbErrorsAsync(
74
74
  },
75
75
  { fingerprint: "morse.adapters.anthropic.install" }
76
76
  );
77
- var uninstallAnthropic = chunkQLJAATBR_cjs.absorbErrorsSync(
77
+ var uninstallAnthropic = chunkESJJXXB6_cjs.absorbErrorsSync(
78
78
  (anthropicModule) => {
79
79
  if (!anthropicModule || typeof anthropicModule !== "object") return;
80
80
  const mod = anthropicModule;
@@ -129,10 +129,10 @@ function buildPatchedCreate(original, options) {
129
129
  const agentName = options.defaultAgentName ?? "anthropic.messages.create";
130
130
  const summarizeMode = options.summarize === true;
131
131
  return async function patchedCreate(params, callOptions) {
132
- const inTrace = chunkZTBAMSCC_cjs.getActiveTraceState() !== null;
132
+ const inTrace = chunk7DALGJL2_cjs.getActiveTraceState() !== null;
133
133
  const work = async () => {
134
- chunkGATTHW3X_cjs.setActiveFramework("anthropic");
135
- const handle = chunkZTBAMSCC_cjs.startSpan({
134
+ chunkCOZFARLL_cjs.setActiveFramework("anthropic");
135
+ const handle = chunk7DALGJL2_cjs.startSpan({
136
136
  name: "anthropic.messages.create",
137
137
  type: "llm",
138
138
  metadata: { model: params?.model, max_tokens: params?.max_tokens }
@@ -171,9 +171,9 @@ function buildPatchedCreate(original, options) {
171
171
  if (cost !== void 0) handle.span.cost_usd = cost;
172
172
  }
173
173
  handle.span.context_segments = segments;
174
- const inputData = chunkGATTHW3X_cjs.captureInputMessages(params?.messages, params?.system);
174
+ const inputData = chunkCOZFARLL_cjs.captureInputMessages(params?.messages, params?.system);
175
175
  if (inputData !== void 0) handle.span.input_data = inputData;
176
- const outputText = chunkGATTHW3X_cjs.extractAnthropicOutputText(response?.content);
176
+ const outputText = chunkCOZFARLL_cjs.extractAnthropicOutputText(response?.content);
177
177
  if (outputText !== void 0) handle.span.output_data = { content: outputText };
178
178
  }
179
179
  } catch {
@@ -192,7 +192,7 @@ function buildPatchedCreate(original, options) {
192
192
  }
193
193
  let result;
194
194
  let thrown;
195
- await chunkZTBAMSCC_cjs.runAsync({ agentName }, async (runHandle) => {
195
+ await chunk7DALGJL2_cjs.runAsync({ agentName }, async (runHandle) => {
196
196
  runHandle.setOutcome(true);
197
197
  try {
198
198
  result = await work();
@@ -291,15 +291,15 @@ function safeExtractSegments(params, response) {
291
291
  }
292
292
  }
293
293
  function emitSummarizeMemorySpan(llmSpan, response) {
294
- const state = chunkZTBAMSCC_cjs.getActiveTraceState();
294
+ const state = chunk7DALGJL2_cjs.getActiveTraceState();
295
295
  if (state === null) return;
296
296
  const summaryText = extractFirstTextBlock(response);
297
297
  const summaryHash = sha256Hex(summaryText);
298
298
  const summaryTokens = response?.usage?.output_tokens ?? 0;
299
- const startedAt = llmSpan.ended_at ?? llmSpan.started_at ?? chunkZTBAMSCC_cjs.nowIso();
299
+ const startedAt = llmSpan.ended_at ?? llmSpan.started_at ?? chunk7DALGJL2_cjs.nowIso();
300
300
  const memorySpan = {
301
301
  trace_id: state.traceId,
302
- span_id: chunkZTBAMSCC_cjs.generateSpanId(),
302
+ span_id: chunk7DALGJL2_cjs.generateSpanId(),
303
303
  type: "memory",
304
304
  name: "anthropic.summarize",
305
305
  parent_span_id: llmSpan.span_id,
@@ -606,5 +606,5 @@ exports.instrumentAnthropic = instrumentAnthropic;
606
606
  exports.isAnthropicWrapped = isAnthropicWrapped;
607
607
  exports.uninstallAnthropic = uninstallAnthropic;
608
608
  exports.wrapAnthropic = wrapAnthropic;
609
- //# sourceMappingURL=chunk-HCN6Z56N.cjs.map
610
- //# sourceMappingURL=chunk-HCN6Z56N.cjs.map
609
+ //# sourceMappingURL=chunk-ETRNCI5Z.cjs.map
610
+ //# sourceMappingURL=chunk-ETRNCI5Z.cjs.map