@morsehq-dev/sdk 0.5.0-rc.3 → 0.5.0-rc.4

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 (98) hide show
  1. package/README.md +34 -0
  2. package/dist/anthropic/index.cjs +11 -11
  3. package/dist/anthropic/index.js +4 -4
  4. package/dist/anthropic-agent-sdk/index.cjs +37 -37
  5. package/dist/anthropic-agent-sdk/index.js +6 -6
  6. package/dist/browser/anthropic/index.cjs +11 -11
  7. package/dist/browser/anthropic/index.js +4 -4
  8. package/dist/browser/anthropic-agent-sdk/index.cjs +37 -37
  9. package/dist/browser/anthropic-agent-sdk/index.js +6 -6
  10. package/dist/{chunk-DPGUBZVO.cjs → browser/chunk-255AHH2W.cjs} +15 -15
  11. package/dist/browser/{chunk-XLQSSJUZ.cjs.map → chunk-255AHH2W.cjs.map} +1 -1
  12. package/dist/browser/{chunk-QCI2ZDQS.cjs → chunk-36QTJJT7.cjs} +12 -12
  13. package/dist/browser/{chunk-QCI2ZDQS.cjs.map → chunk-36QTJJT7.cjs.map} +1 -1
  14. package/dist/browser/{chunk-PM5D6VXF.cjs → chunk-3H2OJLC2.cjs} +4 -3
  15. package/dist/browser/{chunk-PM5D6VXF.cjs.map → chunk-3H2OJLC2.cjs.map} +1 -1
  16. package/dist/browser/{chunk-P7XWSMFX.cjs → chunk-3STFITZF.cjs} +6 -6
  17. package/dist/browser/{chunk-P7XWSMFX.cjs.map → chunk-3STFITZF.cjs.map} +1 -1
  18. package/dist/browser/{chunk-YSJVJ3Z3.cjs → chunk-6J6F5LJI.cjs} +7 -7
  19. package/dist/browser/{chunk-YSJVJ3Z3.cjs.map → chunk-6J6F5LJI.cjs.map} +1 -1
  20. package/dist/browser/{chunk-LGG5PL5U.js → chunk-E2OVLWAF.js} +3 -3
  21. package/dist/browser/{chunk-LGG5PL5U.js.map → chunk-E2OVLWAF.js.map} +1 -1
  22. package/dist/{chunk-HCEKAVDR.js → browser/chunk-JR6JN7IZ.js} +4 -4
  23. package/dist/browser/{chunk-KGSLJLWW.js.map → chunk-JR6JN7IZ.js.map} +1 -1
  24. package/dist/browser/{chunk-WUQXNRD3.js → chunk-KXVSMY6L.js} +3 -3
  25. package/dist/browser/{chunk-WUQXNRD3.js.map → chunk-KXVSMY6L.js.map} +1 -1
  26. package/dist/browser/{chunk-N4Q2WMOE.js → chunk-PIWO5L5N.js} +5 -5
  27. package/dist/browser/{chunk-N4Q2WMOE.js.map → chunk-PIWO5L5N.js.map} +1 -1
  28. package/dist/browser/{chunk-KFWCOUL3.cjs → chunk-VOZBYSWK.cjs} +5 -5
  29. package/dist/browser/{chunk-KFWCOUL3.cjs.map → chunk-VOZBYSWK.cjs.map} +1 -1
  30. package/dist/{chunk-7PGR4NJG.js → browser/chunk-VZA2EPY3.js} +4 -4
  31. package/dist/browser/{chunk-MOBYR3AP.js.map → chunk-VZA2EPY3.js.map} +1 -1
  32. package/dist/browser/{chunk-MI4OUWUZ.js → chunk-WIWUEI5Z.js} +3 -3
  33. package/dist/browser/{chunk-MI4OUWUZ.js.map → chunk-WIWUEI5Z.js.map} +1 -1
  34. package/dist/browser/{chunk-Y3BOPSM3.js → chunk-XD4VWCAC.js} +4 -4
  35. package/dist/browser/{chunk-Y3BOPSM3.js.map → chunk-XD4VWCAC.js.map} +1 -1
  36. package/dist/browser/{chunk-VSG4EWNL.cjs → chunk-YD7TO4PD.cjs} +18 -18
  37. package/dist/browser/{chunk-VSG4EWNL.cjs.map → chunk-YD7TO4PD.cjs.map} +1 -1
  38. package/dist/browser/index.cjs +91 -90
  39. package/dist/browser/index.cjs.map +1 -1
  40. package/dist/browser/index.js +9 -8
  41. package/dist/browser/index.js.map +1 -1
  42. package/dist/browser/integrations/pino.cjs +4 -4
  43. package/dist/browser/integrations/pino.js +3 -3
  44. package/dist/browser/langchain/index.cjs +17 -17
  45. package/dist/browser/langchain/index.js +2 -2
  46. package/dist/browser/langgraph/index.cjs +27 -27
  47. package/dist/browser/langgraph/index.js +5 -5
  48. package/dist/browser/openai/index.cjs +11 -11
  49. package/dist/browser/openai/index.js +2 -2
  50. package/dist/browser/openai-agents/index.cjs +34 -34
  51. package/dist/browser/openai-agents/index.js +4 -4
  52. package/dist/browser/vercel-ai/index.cjs +14 -14
  53. package/dist/browser/vercel-ai/index.js +3 -3
  54. package/dist/{chunk-XHOLQGN6.js → chunk-2O2FFJLK.js} +5 -5
  55. package/dist/{chunk-XHOLQGN6.js.map → chunk-2O2FFJLK.js.map} +1 -1
  56. package/dist/{chunk-3XQOZXJM.cjs → chunk-7ZNGY236.cjs} +7 -7
  57. package/dist/{chunk-3XQOZXJM.cjs.map → chunk-7ZNGY236.cjs.map} +1 -1
  58. package/dist/{browser/chunk-MOBYR3AP.js → chunk-BNMTY7PE.js} +4 -4
  59. package/dist/{chunk-7PGR4NJG.js.map → chunk-BNMTY7PE.js.map} +1 -1
  60. package/dist/{chunk-XZRJXJFA.js → chunk-ELBY4SJ7.js} +4 -4
  61. package/dist/{chunk-XZRJXJFA.js.map → chunk-ELBY4SJ7.js.map} +1 -1
  62. package/dist/{chunk-E3G3IE6Y.cjs → chunk-HA5RY4N5.cjs} +4 -3
  63. package/dist/{chunk-E3G3IE6Y.cjs.map → chunk-HA5RY4N5.cjs.map} +1 -1
  64. package/dist/{chunk-NGBJJGOC.cjs → chunk-HZKXILBF.cjs} +5 -5
  65. package/dist/{chunk-NGBJJGOC.cjs.map → chunk-HZKXILBF.cjs.map} +1 -1
  66. package/dist/{chunk-ZFE75G7S.js → chunk-JFFZBCTP.js} +3 -3
  67. package/dist/{chunk-ZFE75G7S.js.map → chunk-JFFZBCTP.js.map} +1 -1
  68. package/dist/{browser/chunk-KGSLJLWW.js → chunk-MBOISGKD.js} +4 -4
  69. package/dist/{chunk-HCEKAVDR.js.map → chunk-MBOISGKD.js.map} +1 -1
  70. package/dist/{chunk-UAJO6JM7.js → chunk-Q6NQQ2LO.js} +3 -3
  71. package/dist/{chunk-UAJO6JM7.js.map → chunk-Q6NQQ2LO.js.map} +1 -1
  72. package/dist/{chunk-TGHDV5MC.cjs → chunk-RDFDPK2X.cjs} +6 -6
  73. package/dist/{chunk-TGHDV5MC.cjs.map → chunk-RDFDPK2X.cjs.map} +1 -1
  74. package/dist/{chunk-RK3JPX27.cjs → chunk-ULWGK6F5.cjs} +12 -12
  75. package/dist/{chunk-RK3JPX27.cjs.map → chunk-ULWGK6F5.cjs.map} +1 -1
  76. package/dist/{chunk-YQ6ZA7OE.cjs → chunk-VM3QM22Z.cjs} +18 -18
  77. package/dist/{chunk-YQ6ZA7OE.cjs.map → chunk-VM3QM22Z.cjs.map} +1 -1
  78. package/dist/{browser/chunk-XLQSSJUZ.cjs → chunk-WLNADB4J.cjs} +15 -15
  79. package/dist/{chunk-DPGUBZVO.cjs.map → chunk-WLNADB4J.cjs.map} +1 -1
  80. package/dist/{chunk-T2NESDMT.js → chunk-YPP5DDPO.js} +3 -3
  81. package/dist/{chunk-T2NESDMT.js.map → chunk-YPP5DDPO.js.map} +1 -1
  82. package/dist/index.cjs +98 -97
  83. package/dist/index.cjs.map +1 -1
  84. package/dist/index.js +10 -9
  85. package/dist/index.js.map +1 -1
  86. package/dist/integrations/pino.cjs +4 -4
  87. package/dist/integrations/pino.js +3 -3
  88. package/dist/langchain/index.cjs +17 -17
  89. package/dist/langchain/index.js +2 -2
  90. package/dist/langgraph/index.cjs +27 -27
  91. package/dist/langgraph/index.js +5 -5
  92. package/dist/openai/index.cjs +11 -11
  93. package/dist/openai/index.js +2 -2
  94. package/dist/openai-agents/index.cjs +34 -34
  95. package/dist/openai-agents/index.js +4 -4
  96. package/dist/vercel-ai/index.cjs +14 -14
  97. package/dist/vercel-ai/index.js +3 -3
  98. package/package.json +14 -13
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/_internal/active-framework.ts","../src/_internal/llm-io.ts"],"names":[],"mappings":"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","file":"chunk-T2NESDMT.js","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 `av.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
+ {"version":3,"sources":["../src/_internal/active-framework.ts","../src/_internal/llm-io.ts"],"names":[],"mappings":"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","file":"chunk-YPP5DDPO.js","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 `av.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"]}
package/dist/index.cjs CHANGED
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkYQ6ZA7OE_cjs = require('./chunk-YQ6ZA7OE.cjs');
4
- var chunkRK3JPX27_cjs = require('./chunk-RK3JPX27.cjs');
5
- require('./chunk-NGBJJGOC.cjs');
6
- var chunkTGHDV5MC_cjs = require('./chunk-TGHDV5MC.cjs');
3
+ var chunkVM3QM22Z_cjs = require('./chunk-VM3QM22Z.cjs');
4
+ var chunkULWGK6F5_cjs = require('./chunk-ULWGK6F5.cjs');
5
+ require('./chunk-HZKXILBF.cjs');
6
+ var chunkRDFDPK2X_cjs = require('./chunk-RDFDPK2X.cjs');
7
7
  require('./chunk-KBWPNIH4.cjs');
8
8
  require('./chunk-HICEJ4LV.cjs');
9
- var chunkE3G3IE6Y_cjs = require('./chunk-E3G3IE6Y.cjs');
9
+ var chunkHA5RY4N5_cjs = require('./chunk-HA5RY4N5.cjs');
10
10
  var module$1 = require('module');
11
11
  var instrumentationPg = require('@opentelemetry/instrumentation-pg');
12
12
  var instrumentationMysql2 = require('@opentelemetry/instrumentation-mysql2');
@@ -14,10 +14,10 @@ var instrumentation = require('@opentelemetry/instrumentation');
14
14
  var api = require('@opentelemetry/api');
15
15
 
16
16
  var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
17
- chunkE3G3IE6Y_cjs.init_env();
17
+ chunkHA5RY4N5_cjs.init_env();
18
18
  var FULL_INSTALL_TARGETS = {
19
19
  "@anthropic-ai/sdk": {
20
- install: (mod) => chunkYQ6ZA7OE_cjs.instrumentAnthropic({ anthropicModule: mod })
20
+ install: (mod) => chunkVM3QM22Z_cjs.instrumentAnthropic({ anthropicModule: mod })
21
21
  }
22
22
  };
23
23
  var DETECT_ONLY_TARGETS = {
@@ -91,7 +91,7 @@ function uninstallLazyHook() {
91
91
  originalRequire = null;
92
92
  }
93
93
  async function installAdapters() {
94
- if (chunkE3G3IE6Y_cjs.isAutoDetectDisabled()) return;
94
+ if (chunkHA5RY4N5_cjs.isAutoDetectDisabled()) return;
95
95
  const nodeRequire = getNodeRequire();
96
96
  if (!nodeRequire) return;
97
97
  const installPromises = [];
@@ -129,11 +129,11 @@ function _resetForTesting3() {
129
129
  }
130
130
 
131
131
  // src/index.ts
132
- chunkE3G3IE6Y_cjs.init_env();
132
+ chunkHA5RY4N5_cjs.init_env();
133
133
 
134
134
  // src/_internal/db-capture.ts
135
- chunkE3G3IE6Y_cjs.init_env();
136
- chunkE3G3IE6Y_cjs.init_otel_provider();
135
+ chunkHA5RY4N5_cjs.init_env();
136
+ chunkHA5RY4N5_cjs.init_otel_provider();
137
137
  var SEMCONV_DB_SYSTEM_NAME = "db.system.name";
138
138
  var SEMCONV_DB_QUERY_TEXT = "db.query.text";
139
139
  var DB_SYSTEM_NAME_SQLITE = "sqlite";
@@ -247,7 +247,7 @@ function registerDbInstrumentation() {
247
247
  disableDbCapture();
248
248
  try {
249
249
  const instrumentations = buildDbInstrumentations();
250
- const off = chunkE3G3IE6Y_cjs.getEngine().registerInstrumentations(instrumentations);
250
+ const off = chunkHA5RY4N5_cjs.getEngine().registerInstrumentations(instrumentations);
251
251
  if (off === null) return false;
252
252
  unregister = off;
253
253
  registeredInstrumentations = instrumentations;
@@ -269,18 +269,18 @@ function disableDbCapture() {
269
269
  registeredInstrumentations = null;
270
270
  }
271
271
  function maybeEnableDbCaptureFromEnv() {
272
- if (chunkE3G3IE6Y_cjs.isDbCaptureEnabled()) {
272
+ if (chunkHA5RY4N5_cjs.isDbCaptureEnabled()) {
273
273
  registerDbInstrumentation();
274
274
  }
275
275
  }
276
276
 
277
277
  // src/index.ts
278
- chunkE3G3IE6Y_cjs.init_otel_provider();
279
- chunkE3G3IE6Y_cjs.init_redaction();
278
+ chunkHA5RY4N5_cjs.init_otel_provider();
279
+ chunkHA5RY4N5_cjs.init_redaction();
280
280
 
281
281
  // src/_internal/transport.ts
282
- chunkE3G3IE6Y_cjs.init_diagnostics();
283
- var SDK_VERSION = "0.5.0-rc.3" ;
282
+ chunkHA5RY4N5_cjs.init_diagnostics();
283
+ var SDK_VERSION = "0.5.0-rc.4" ;
284
284
  var RETRY_AFTER_CAP_SECONDS = 30;
285
285
  function parseRetryAfter(value) {
286
286
  if (!value) return null;
@@ -385,11 +385,11 @@ var BatchTransport = class {
385
385
  /** Enqueue an event. Non-blocking. Returns false if the queue is full. */
386
386
  track(event) {
387
387
  if (this.closed) {
388
- chunkE3G3IE6Y_cjs.recordDrop(chunkE3G3IE6Y_cjs.REASON_SHUTDOWN_DROP, "trace");
388
+ chunkHA5RY4N5_cjs.recordDrop(chunkHA5RY4N5_cjs.REASON_SHUTDOWN_DROP, "trace");
389
389
  return false;
390
390
  }
391
391
  if (this.queue.length >= this.maxQueueSize) {
392
- chunkE3G3IE6Y_cjs.recordDrop(chunkE3G3IE6Y_cjs.REASON_QUEUE_FULL, "trace");
392
+ chunkHA5RY4N5_cjs.recordDrop(chunkHA5RY4N5_cjs.REASON_QUEUE_FULL, "trace");
393
393
  return false;
394
394
  }
395
395
  this.queue.push(event);
@@ -476,12 +476,12 @@ var BatchTransport = class {
476
476
  body: JSON.stringify(payload),
477
477
  signal: controller.signal
478
478
  });
479
- chunkE3G3IE6Y_cjs.setLevel(resp.headers.get("X-Morse-Diagnostics"));
479
+ chunkHA5RY4N5_cjs.setLevel(resp.headers.get("X-Morse-Diagnostics"));
480
480
  const droppedCount = countPayloadEntries(payload);
481
481
  const droppedCategory = categoryOf(payload);
482
482
  if (resp.status === 429) {
483
483
  await recordQuotaState(resp);
484
- chunkE3G3IE6Y_cjs.recordDrop(chunkE3G3IE6Y_cjs.REASON_QUOTA_REJECTED, droppedCategory, droppedCount);
484
+ chunkHA5RY4N5_cjs.recordDrop(chunkHA5RY4N5_cjs.REASON_QUOTA_REJECTED, droppedCategory, droppedCount);
485
485
  }
486
486
  if (!resp.ok) {
487
487
  let bodySnippet = "";
@@ -491,9 +491,9 @@ var BatchTransport = class {
491
491
  } catch {
492
492
  }
493
493
  if (resp.status !== 429) {
494
- chunkE3G3IE6Y_cjs.recordDrop(chunkE3G3IE6Y_cjs.REASON_RETRY_EXHAUSTED, droppedCategory, droppedCount);
494
+ chunkHA5RY4N5_cjs.recordDrop(chunkHA5RY4N5_cjs.REASON_RETRY_EXHAUSTED, droppedCategory, droppedCount);
495
495
  }
496
- chunkE3G3IE6Y_cjs.report(new Error(`morse: batch POST returned ${resp.status} ${bodySnippet}`), {
496
+ chunkHA5RY4N5_cjs.report(new Error(`morse: batch POST returned ${resp.status} ${bodySnippet}`), {
497
497
  fingerprint: "morse.transport.post.non_2xx",
498
498
  extra: {
499
499
  endpoint_host: hostnameOf(url),
@@ -502,8 +502,8 @@ var BatchTransport = class {
502
502
  });
503
503
  }
504
504
  } catch (err) {
505
- chunkE3G3IE6Y_cjs.recordDrop(chunkE3G3IE6Y_cjs.REASON_RETRY_EXHAUSTED, categoryOf(payload), countPayloadEntries(payload));
506
- chunkE3G3IE6Y_cjs.report(err, {
505
+ chunkHA5RY4N5_cjs.recordDrop(chunkHA5RY4N5_cjs.REASON_RETRY_EXHAUSTED, categoryOf(payload), countPayloadEntries(payload));
506
+ chunkHA5RY4N5_cjs.report(err, {
507
507
  fingerprint: "morse.transport.post.network",
508
508
  extra: {
509
509
  endpoint_host: hostnameOf(url),
@@ -547,10 +547,10 @@ function categoryOf(payload) {
547
547
  }
548
548
 
549
549
  // src/index.ts
550
- chunkE3G3IE6Y_cjs.init_tracing();
551
- chunkE3G3IE6Y_cjs.init_diagnostics();
552
- chunkE3G3IE6Y_cjs.init_spans();
553
- chunkE3G3IE6Y_cjs.init_propagation();
550
+ chunkHA5RY4N5_cjs.init_tracing();
551
+ chunkHA5RY4N5_cjs.init_diagnostics();
552
+ chunkHA5RY4N5_cjs.init_spans();
553
+ chunkHA5RY4N5_cjs.init_propagation();
554
554
  var version = SDK_VERSION;
555
555
  var singleton = null;
556
556
  var transportFactory = (opts) => new BatchTransport(opts);
@@ -570,9 +570,9 @@ function logDestinationOnce(endpoint) {
570
570
  }
571
571
  function resolveEndpoint(explicit) {
572
572
  if (explicit && explicit.length > 0) return explicit;
573
- const fromEnv = chunkE3G3IE6Y_cjs.getEndpoint();
573
+ const fromEnv = chunkHA5RY4N5_cjs.getEndpoint();
574
574
  if (fromEnv) return fromEnv;
575
- return chunkE3G3IE6Y_cjs.DEFAULT_ENDPOINT;
575
+ return chunkHA5RY4N5_cjs.DEFAULT_ENDPOINT;
576
576
  }
577
577
  var OTLP_TRACES_PATH = "/api/v1/otlp/v1/traces";
578
578
  function deriveOtlpEndpoint(tracesEndpoint) {
@@ -587,10 +587,10 @@ function deriveOtlpEndpoint(tracesEndpoint) {
587
587
  }
588
588
  }
589
589
  function buildSingleton(opts, redaction) {
590
- if (chunkE3G3IE6Y_cjs.isDisabled()) {
590
+ if (chunkHA5RY4N5_cjs.isDisabled()) {
591
591
  return null;
592
592
  }
593
- const apiKey = opts.apiKey ?? chunkE3G3IE6Y_cjs.getApiKey();
593
+ const apiKey = opts.apiKey ?? chunkHA5RY4N5_cjs.getApiKey();
594
594
  if (!apiKey) {
595
595
  if (!noApiKeyWarningEmitted) {
596
596
  logger2(
@@ -602,24 +602,24 @@ function buildSingleton(opts, redaction) {
602
602
  return null;
603
603
  }
604
604
  const endpoint = resolveEndpoint(opts.endpoint);
605
- const flushIntervalSeconds = opts.flushIntervalSeconds ?? chunkE3G3IE6Y_cjs.getFlushIntervalSeconds();
605
+ const flushIntervalSeconds = opts.flushIntervalSeconds ?? chunkHA5RY4N5_cjs.getFlushIntervalSeconds();
606
606
  const transport = transportFactory({ apiKey, endpoint, flushIntervalSeconds });
607
- chunkE3G3IE6Y_cjs.setTransport(transport);
608
- chunkE3G3IE6Y_cjs.setRedactionConfig(redaction);
609
- chunkE3G3IE6Y_cjs.setDiagnosticsClientConfig({ apiKey, endpoint });
610
- const explicitSource = chunkE3G3IE6Y_cjs.isValidInternalSource(opts.source) ? opts.source : void 0;
611
- const resolvedSource = explicitSource ?? chunkE3G3IE6Y_cjs.getInternalSource() ?? null;
612
- chunkE3G3IE6Y_cjs.setSource(resolvedSource);
607
+ chunkHA5RY4N5_cjs.setTransport(transport);
608
+ chunkHA5RY4N5_cjs.setRedactionConfig(redaction);
609
+ chunkHA5RY4N5_cjs.setDiagnosticsClientConfig({ apiKey, endpoint });
610
+ const explicitSource = chunkHA5RY4N5_cjs.isValidInternalSource(opts.source) ? opts.source : void 0;
611
+ const resolvedSource = explicitSource ?? chunkHA5RY4N5_cjs.getInternalSource() ?? null;
612
+ chunkHA5RY4N5_cjs.setSource(resolvedSource);
613
613
  logDestinationOnce(endpoint);
614
614
  try {
615
- chunkE3G3IE6Y_cjs.getEngine().configure({
615
+ chunkHA5RY4N5_cjs.getEngine().configure({
616
616
  endpoint: deriveOtlpEndpoint(endpoint),
617
617
  apiKey,
618
- sampleRate: chunkE3G3IE6Y_cjs.getSampleRate(),
618
+ sampleRate: chunkHA5RY4N5_cjs.getSampleRate(),
619
619
  scheduleDelayMillis: flushIntervalSeconds * 1e3,
620
- maxQueueSize: chunkE3G3IE6Y_cjs.getMaxQueueSize(),
621
- maxExportBatchSize: chunkE3G3IE6Y_cjs.getMaxBatchSize(),
622
- maxFieldBytes: chunkE3G3IE6Y_cjs.getMaxFieldBytes(),
620
+ maxQueueSize: chunkHA5RY4N5_cjs.getMaxQueueSize(),
621
+ maxExportBatchSize: chunkHA5RY4N5_cjs.getMaxBatchSize(),
622
+ maxFieldBytes: chunkHA5RY4N5_cjs.getMaxFieldBytes(),
623
623
  // 10s (not the exporter's un-overridden 30s ceiling): a genuine
624
624
  // network blip still gets several retries with backoff; a fully dead
625
625
  // endpoint fails within a bounded, shutdown-friendly window instead
@@ -628,32 +628,32 @@ function buildSingleton(opts, redaction) {
628
628
  redactionConfig: redaction
629
629
  });
630
630
  } catch (err) {
631
- chunkE3G3IE6Y_cjs.report(err, { fingerprint: "morse.otel_provider.configure" });
631
+ chunkHA5RY4N5_cjs.report(err, { fingerprint: "morse.otel_provider.configure" });
632
632
  }
633
633
  void installAdapters().catch(() => {
634
634
  });
635
635
  try {
636
636
  maybeEnableDbCaptureFromEnv();
637
637
  } catch (err) {
638
- chunkE3G3IE6Y_cjs.report(err, { fingerprint: "morse.db_capture.register" });
638
+ chunkHA5RY4N5_cjs.report(err, { fingerprint: "morse.db_capture.register" });
639
639
  }
640
640
  return { apiKey, endpoint, transport, redaction };
641
641
  }
642
642
  function ensureInitialized() {
643
- if (chunkE3G3IE6Y_cjs.isDisabled()) return null;
643
+ if (chunkHA5RY4N5_cjs.isDisabled()) return null;
644
644
  if (singleton !== null) return singleton;
645
- singleton = buildSingleton({}, chunkE3G3IE6Y_cjs.buildRedactionConfig());
645
+ singleton = buildSingleton({}, chunkHA5RY4N5_cjs.buildRedactionConfig());
646
646
  return singleton;
647
647
  }
648
- chunkRK3JPX27_cjs._setEnsureInitialized(() => {
648
+ chunkULWGK6F5_cjs._setEnsureInitialized(() => {
649
649
  ensureInitialized();
650
650
  });
651
651
  function init(options = {}) {
652
- if (chunkE3G3IE6Y_cjs.isDisabled()) {
652
+ if (chunkHA5RY4N5_cjs.isDisabled()) {
653
653
  logger2("info", "morse: MORSE_DISABLED=1 \u2014 SDK is a no-op");
654
654
  return;
655
655
  }
656
- const redaction = chunkE3G3IE6Y_cjs.buildRedactionConfig(options.redaction);
656
+ const redaction = chunkHA5RY4N5_cjs.buildRedactionConfig(options.redaction);
657
657
  try {
658
658
  if (singleton !== null) {
659
659
  void singleton.transport.shutdown();
@@ -661,10 +661,10 @@ function init(options = {}) {
661
661
  }
662
662
  singleton = buildSingleton(options, redaction);
663
663
  } catch (err) {
664
- chunkE3G3IE6Y_cjs.report(err, { fingerprint: "morse.init" });
664
+ chunkHA5RY4N5_cjs.report(err, { fingerprint: "morse.init" });
665
665
  }
666
666
  }
667
- var track = chunkTGHDV5MC_cjs.absorbErrorsSync(
667
+ var track = chunkRDFDPK2X_cjs.absorbErrorsSync(
668
668
  (options) => {
669
669
  const state = ensureInitialized();
670
670
  if (!state) return;
@@ -672,33 +672,33 @@ var track = chunkTGHDV5MC_cjs.absorbErrorsSync(
672
672
  agent_id: options.agentId,
673
673
  ...options.runData
674
674
  };
675
- const redacted = chunkE3G3IE6Y_cjs.redactValue(payload, state.redaction);
675
+ const redacted = chunkHA5RY4N5_cjs.redactValue(payload, state.redaction);
676
676
  state.transport.track(redacted);
677
677
  },
678
678
  { fingerprint: "morse.track" }
679
679
  );
680
- var batchTrack = chunkTGHDV5MC_cjs.absorbErrorsSync(
680
+ var batchTrack = chunkRDFDPK2X_cjs.absorbErrorsSync(
681
681
  (runs) => {
682
682
  const state = ensureInitialized();
683
683
  if (!state) return;
684
684
  for (const run2 of runs) {
685
- const redacted = chunkE3G3IE6Y_cjs.redactValue(run2, state.redaction);
685
+ const redacted = chunkHA5RY4N5_cjs.redactValue(run2, state.redaction);
686
686
  state.transport.track(redacted);
687
687
  }
688
688
  },
689
689
  { fingerprint: "morse.batch_track" }
690
690
  );
691
- var record = chunkTGHDV5MC_cjs.absorbErrorsSync(
691
+ var record = chunkRDFDPK2X_cjs.absorbErrorsSync(
692
692
  (rec) => {
693
693
  const state = ensureInitialized();
694
694
  if (!state) return;
695
- const traceId = chunkE3G3IE6Y_cjs.generateTraceId();
696
- const now = chunkE3G3IE6Y_cjs.nowIso();
695
+ const traceId = chunkHA5RY4N5_cjs.generateTraceId();
696
+ const now = chunkHA5RY4N5_cjs.nowIso();
697
697
  const resolvedStatus = rec.errorMessage ? "failed" : rec.status ?? "completed";
698
698
  const span2 = {
699
699
  trace_id: traceId,
700
- span_id: chunkE3G3IE6Y_cjs.generateSpanId(),
701
- type: chunkE3G3IE6Y_cjs.SpanType.AGENT,
700
+ span_id: chunkHA5RY4N5_cjs.generateSpanId(),
701
+ type: chunkHA5RY4N5_cjs.SpanType.AGENT,
702
702
  name: rec.agent,
703
703
  started_at: now,
704
704
  ended_at: now,
@@ -723,57 +723,58 @@ var record = chunkTGHDV5MC_cjs.absorbErrorsSync(
723
723
  success: rec.success,
724
724
  outcome: rec.outcome
725
725
  };
726
- const entry = chunkE3G3IE6Y_cjs.buildTraceEntry(traceFields, [span2]);
727
- const redacted = chunkE3G3IE6Y_cjs.redactValue(entry, state.redaction);
728
- chunkE3G3IE6Y_cjs.sendTrace(redacted);
726
+ const entry = chunkHA5RY4N5_cjs.buildTraceEntry(traceFields, [span2]);
727
+ const redacted = chunkHA5RY4N5_cjs.redactValue(entry, state.redaction);
728
+ chunkHA5RY4N5_cjs.sendTrace(redacted);
729
729
  },
730
730
  { fingerprint: "morse.record" }
731
731
  );
732
732
  function run(nameOrOpts, fn) {
733
733
  const opts = typeof nameOrOpts === "string" ? { agentName: nameOrOpts } : nameOrOpts;
734
734
  ensureInitialized();
735
- return chunkE3G3IE6Y_cjs.runSync(opts, fn);
735
+ return chunkHA5RY4N5_cjs.runSync(opts, fn);
736
736
  }
737
737
  function runTraced(options, fn) {
738
738
  ensureInitialized();
739
- return chunkE3G3IE6Y_cjs.runAsync(options, fn);
739
+ return chunkHA5RY4N5_cjs.runAsync(options, fn);
740
740
  }
741
741
  function setContext2(dims) {
742
- chunkE3G3IE6Y_cjs.setContext(dims);
742
+ chunkHA5RY4N5_cjs.setContext(dims);
743
743
  }
744
744
  function startSpan2(options) {
745
- return chunkE3G3IE6Y_cjs.startSpan(options);
745
+ return chunkHA5RY4N5_cjs.startSpan(options);
746
746
  }
747
747
  function span(options, fn) {
748
- return chunkE3G3IE6Y_cjs.spanSync(options, fn);
748
+ return chunkHA5RY4N5_cjs.spanSync(options, fn);
749
749
  }
750
750
  function spanAsync2(options, fn) {
751
- return chunkE3G3IE6Y_cjs.spanAsync(options, fn);
751
+ return chunkHA5RY4N5_cjs.spanAsync(options, fn);
752
752
  }
753
- var flush = chunkTGHDV5MC_cjs.absorbErrorsAsync(
753
+ var flush = chunkRDFDPK2X_cjs.absorbErrorsAsync(
754
754
  async () => {
755
755
  if (singleton !== null) {
756
756
  await singleton.transport.flush();
757
- await chunkE3G3IE6Y_cjs.getEngine().flush();
757
+ await chunkHA5RY4N5_cjs.getEngine().flush();
758
758
  }
759
759
  },
760
760
  { fingerprint: "morse.flush" }
761
761
  );
762
- var quotaState2 = chunkTGHDV5MC_cjs.absorbErrorsSync(
762
+ var quotaState2 = chunkRDFDPK2X_cjs.absorbErrorsSync(
763
763
  () => {
764
764
  if (singleton === null) return null;
765
765
  return getQuotaState();
766
766
  },
767
767
  { fingerprint: "morse.quota_state" }
768
768
  );
769
- var shutdown = chunkTGHDV5MC_cjs.absorbErrorsAsync(
769
+ var shutdown = chunkRDFDPK2X_cjs.absorbErrorsAsync(
770
770
  async () => {
771
771
  if (singleton !== null) {
772
772
  await singleton.transport.shutdown();
773
- await chunkE3G3IE6Y_cjs.getEngine().flush();
774
- chunkE3G3IE6Y_cjs.getEngine().shutdown();
773
+ await chunkHA5RY4N5_cjs.getEngine().flush();
774
+ chunkHA5RY4N5_cjs.getEngine().shutdown();
775
+ await chunkHA5RY4N5_cjs.flushOnce();
775
776
  singleton = null;
776
- chunkE3G3IE6Y_cjs.setTransport(null);
777
+ chunkHA5RY4N5_cjs.setTransport(null);
777
778
  }
778
779
  },
779
780
  { fingerprint: "morse.shutdown" }
@@ -782,14 +783,14 @@ function _resetForTesting4() {
782
783
  if (singleton !== null) {
783
784
  void singleton.transport.shutdown();
784
785
  singleton = null;
785
- chunkE3G3IE6Y_cjs.setTransport(null);
786
+ chunkHA5RY4N5_cjs.setTransport(null);
786
787
  }
787
- chunkE3G3IE6Y_cjs.getEngine().resetForTesting();
788
+ chunkHA5RY4N5_cjs.getEngine().resetForTesting();
788
789
  noApiKeyWarningEmitted = false;
789
790
  lastLoggedEndpoint = null;
790
- chunkE3G3IE6Y_cjs.setSource(null);
791
- chunkE3G3IE6Y_cjs._resetForTesting2();
792
- chunkE3G3IE6Y_cjs._resetForTesting();
791
+ chunkHA5RY4N5_cjs.setSource(null);
792
+ chunkHA5RY4N5_cjs._resetForTesting2();
793
+ chunkHA5RY4N5_cjs._resetForTesting();
793
794
  _resetForTesting3();
794
795
  _resetQuotaStateForTesting();
795
796
  transportFactory = (opts) => new BatchTransport(opts);
@@ -798,59 +799,59 @@ function _setTransportFactoryForTesting(factory) {
798
799
  transportFactory = factory;
799
800
  }
800
801
  function _getLastTraceForTesting() {
801
- return chunkE3G3IE6Y_cjs.getLastTrace();
802
+ return chunkHA5RY4N5_cjs.getLastTrace();
802
803
  }
803
804
  function _getActiveTraceStateForTesting() {
804
- return chunkE3G3IE6Y_cjs.getActiveTraceState();
805
+ return chunkHA5RY4N5_cjs.getActiveTraceState();
805
806
  }
806
807
 
807
808
  Object.defineProperty(exports, "MAX_SEGMENT_CONTENT_BYTES", {
808
809
  enumerable: true,
809
- get: function () { return chunkYQ6ZA7OE_cjs.MAX_SEGMENT_CONTENT_BYTES; }
810
+ get: function () { return chunkVM3QM22Z_cjs.MAX_SEGMENT_CONTENT_BYTES; }
810
811
  });
811
812
  Object.defineProperty(exports, "extractAnthropicSegments", {
812
813
  enumerable: true,
813
- get: function () { return chunkYQ6ZA7OE_cjs.extractAnthropicSegments; }
814
+ get: function () { return chunkVM3QM22Z_cjs.extractAnthropicSegments; }
814
815
  });
815
816
  Object.defineProperty(exports, "instrumentAnthropic", {
816
817
  enumerable: true,
817
- get: function () { return chunkYQ6ZA7OE_cjs.instrumentAnthropic; }
818
+ get: function () { return chunkVM3QM22Z_cjs.instrumentAnthropic; }
818
819
  });
819
820
  Object.defineProperty(exports, "isAnthropicWrapped", {
820
821
  enumerable: true,
821
- get: function () { return chunkYQ6ZA7OE_cjs.isAnthropicWrapped; }
822
+ get: function () { return chunkVM3QM22Z_cjs.isAnthropicWrapped; }
822
823
  });
823
824
  Object.defineProperty(exports, "uninstallAnthropic", {
824
825
  enumerable: true,
825
- get: function () { return chunkYQ6ZA7OE_cjs.uninstallAnthropic; }
826
+ get: function () { return chunkVM3QM22Z_cjs.uninstallAnthropic; }
826
827
  });
827
828
  Object.defineProperty(exports, "wrapAnthropic", {
828
829
  enumerable: true,
829
- get: function () { return chunkYQ6ZA7OE_cjs.wrapAnthropic; }
830
+ get: function () { return chunkVM3QM22Z_cjs.wrapAnthropic; }
830
831
  });
831
832
  Object.defineProperty(exports, "log", {
832
833
  enumerable: true,
833
- get: function () { return chunkRK3JPX27_cjs.log; }
834
+ get: function () { return chunkULWGK6F5_cjs.log; }
834
835
  });
835
836
  Object.defineProperty(exports, "W3C_TRACEPARENT_HEADER", {
836
837
  enumerable: true,
837
- get: function () { return chunkE3G3IE6Y_cjs.W3C_TRACEPARENT_HEADER; }
838
+ get: function () { return chunkHA5RY4N5_cjs.W3C_TRACEPARENT_HEADER; }
838
839
  });
839
840
  Object.defineProperty(exports, "extractTraceparent", {
840
841
  enumerable: true,
841
- get: function () { return chunkE3G3IE6Y_cjs.extractTraceparent; }
842
+ get: function () { return chunkHA5RY4N5_cjs.extractTraceparent; }
842
843
  });
843
844
  Object.defineProperty(exports, "formatTraceparent", {
844
845
  enumerable: true,
845
- get: function () { return chunkE3G3IE6Y_cjs.formatTraceparent; }
846
+ get: function () { return chunkHA5RY4N5_cjs.formatTraceparent; }
846
847
  });
847
848
  Object.defineProperty(exports, "injectIntoRequestInit", {
848
849
  enumerable: true,
849
- get: function () { return chunkE3G3IE6Y_cjs.injectIntoRequestInit; }
850
+ get: function () { return chunkHA5RY4N5_cjs.injectIntoRequestInit; }
850
851
  });
851
852
  Object.defineProperty(exports, "injectTraceparent", {
852
853
  enumerable: true,
853
- get: function () { return chunkE3G3IE6Y_cjs.injectTraceparent; }
854
+ get: function () { return chunkHA5RY4N5_cjs.injectTraceparent; }
854
855
  });
855
856
  exports._getActiveTraceStateForTesting = _getActiveTraceStateForTesting;
856
857
  exports._getLastTraceForTesting = _getLastTraceForTesting;