@morsehq-dev/sdk 0.5.0-rc.1 → 0.5.0-rc.2

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 (97) hide show
  1. package/dist/anthropic/index.cjs +11 -11
  2. package/dist/anthropic/index.js +4 -4
  3. package/dist/anthropic-agent-sdk/index.cjs +37 -37
  4. package/dist/anthropic-agent-sdk/index.js +6 -6
  5. package/dist/browser/anthropic/index.cjs +11 -11
  6. package/dist/browser/anthropic/index.js +4 -4
  7. package/dist/browser/anthropic-agent-sdk/index.cjs +37 -37
  8. package/dist/browser/anthropic-agent-sdk/index.js +6 -6
  9. package/dist/browser/{chunk-A7P3ZBZX.js → chunk-3MTJGZGX.js} +5 -5
  10. package/dist/browser/{chunk-A7P3ZBZX.js.map → chunk-3MTJGZGX.js.map} +1 -1
  11. package/dist/browser/{chunk-5EFKNOO7.cjs → chunk-63ZI6PGP.cjs} +15 -15
  12. package/dist/browser/{chunk-5EFKNOO7.cjs.map → chunk-63ZI6PGP.cjs.map} +1 -1
  13. package/dist/browser/{chunk-ZGYZZCUK.cjs → chunk-A5EYWAOT.cjs} +40 -11
  14. package/dist/browser/chunk-A5EYWAOT.cjs.map +1 -0
  15. package/dist/{chunk-TP3N3S2D.js → browser/chunk-AM6LMQCT.js} +3 -3
  16. package/dist/browser/{chunk-AZ3SVK3K.js.map → chunk-AM6LMQCT.js.map} +1 -1
  17. package/dist/{chunk-O3Q5L2HY.js → browser/chunk-FDE32B3R.js} +4 -4
  18. package/dist/browser/{chunk-454FDWBM.js.map → chunk-FDE32B3R.js.map} +1 -1
  19. package/dist/browser/{chunk-5IWGFPKQ.js → chunk-L6FWDEGJ.js} +4 -4
  20. package/dist/browser/{chunk-5IWGFPKQ.js.map → chunk-L6FWDEGJ.js.map} +1 -1
  21. package/dist/{chunk-UWQPOWJQ.cjs → browser/chunk-N3PXJCOE.cjs} +7 -7
  22. package/dist/browser/{chunk-NT37C2TK.cjs.map → chunk-N3PXJCOE.cjs.map} +1 -1
  23. package/dist/browser/{chunk-32U547L3.js → chunk-NH54DAJP.js} +3 -3
  24. package/dist/browser/{chunk-32U547L3.js.map → chunk-NH54DAJP.js.map} +1 -1
  25. package/dist/browser/{chunk-VFNNU3AX.js → chunk-NRYB5GJT.js} +3 -3
  26. package/dist/browser/{chunk-VFNNU3AX.js.map → chunk-NRYB5GJT.js.map} +1 -1
  27. package/dist/browser/{chunk-6DOP3MTY.js → chunk-OOGAYEJF.js} +40 -11
  28. package/dist/browser/chunk-OOGAYEJF.js.map +1 -0
  29. package/dist/browser/{chunk-HZZK2EMO.cjs → chunk-SOJYLXCR.cjs} +5 -5
  30. package/dist/browser/{chunk-HZZK2EMO.cjs.map → chunk-SOJYLXCR.cjs.map} +1 -1
  31. package/dist/{chunk-HSY7V4RG.cjs → browser/chunk-T4NHSVXH.cjs} +12 -12
  32. package/dist/browser/{chunk-WY2VLKRR.cjs.map → chunk-T4NHSVXH.cjs.map} +1 -1
  33. package/dist/browser/{chunk-FNZWJU64.cjs → chunk-YMEU6XQQ.cjs} +6 -6
  34. package/dist/browser/{chunk-FNZWJU64.cjs.map → chunk-YMEU6XQQ.cjs.map} +1 -1
  35. package/dist/browser/{chunk-AV35EOER.cjs → chunk-YR2FCEWM.cjs} +18 -18
  36. package/dist/browser/{chunk-AV35EOER.cjs.map → chunk-YR2FCEWM.cjs.map} +1 -1
  37. package/dist/browser/index.cjs +89 -89
  38. package/dist/browser/index.js +8 -8
  39. package/dist/browser/integrations/pino.cjs +4 -4
  40. package/dist/browser/integrations/pino.js +3 -3
  41. package/dist/browser/langchain/index.cjs +17 -17
  42. package/dist/browser/langchain/index.js +2 -2
  43. package/dist/browser/langgraph/index.cjs +27 -27
  44. package/dist/browser/langgraph/index.js +5 -5
  45. package/dist/browser/openai/index.cjs +11 -11
  46. package/dist/browser/openai/index.js +2 -2
  47. package/dist/browser/openai-agents/index.cjs +34 -34
  48. package/dist/browser/openai-agents/index.js +4 -4
  49. package/dist/browser/vercel-ai/index.cjs +14 -14
  50. package/dist/browser/vercel-ai/index.js +3 -3
  51. package/dist/{chunk-UEKQIRRA.js → chunk-3IGQWLWE.js} +40 -11
  52. package/dist/chunk-3IGQWLWE.js.map +1 -0
  53. package/dist/{chunk-7A2EWXZK.cjs → chunk-6DZNK4VX.cjs} +6 -6
  54. package/dist/{chunk-7A2EWXZK.cjs.map → chunk-6DZNK4VX.cjs.map} +1 -1
  55. package/dist/{browser/chunk-454FDWBM.js → chunk-FCAPLB7A.js} +4 -4
  56. package/dist/{chunk-O3Q5L2HY.js.map → chunk-FCAPLB7A.js.map} +1 -1
  57. package/dist/{chunk-LB6ZLJUR.js → chunk-S4WUABAU.js} +3 -3
  58. package/dist/{chunk-LB6ZLJUR.js.map → chunk-S4WUABAU.js.map} +1 -1
  59. package/dist/{chunk-CECVNM7R.js → chunk-SHK2XEPB.js} +4 -4
  60. package/dist/{chunk-CECVNM7R.js.map → chunk-SHK2XEPB.js.map} +1 -1
  61. package/dist/{chunk-ADRVMGAW.cjs → chunk-SNGYSP7Z.cjs} +18 -18
  62. package/dist/{chunk-ADRVMGAW.cjs.map → chunk-SNGYSP7Z.cjs.map} +1 -1
  63. package/dist/{chunk-VD3KRXSP.cjs → chunk-VHF4GWJ4.cjs} +5 -5
  64. package/dist/{chunk-VD3KRXSP.cjs.map → chunk-VHF4GWJ4.cjs.map} +1 -1
  65. package/dist/{chunk-5B3IUESN.cjs → chunk-XCOZIFHC.cjs} +40 -11
  66. package/dist/chunk-XCOZIFHC.cjs.map +1 -0
  67. package/dist/{chunk-5RXSICEJ.js → chunk-XJUH6PR5.js} +3 -3
  68. package/dist/{chunk-5RXSICEJ.js.map → chunk-XJUH6PR5.js.map} +1 -1
  69. package/dist/{browser/chunk-NT37C2TK.cjs → chunk-Y2QHMV6H.cjs} +7 -7
  70. package/dist/{chunk-UWQPOWJQ.cjs.map → chunk-Y2QHMV6H.cjs.map} +1 -1
  71. package/dist/{chunk-AAR4FYFO.js → chunk-YJYF4NSA.js} +5 -5
  72. package/dist/{chunk-AAR4FYFO.js.map → chunk-YJYF4NSA.js.map} +1 -1
  73. package/dist/{chunk-RF7NI5VN.cjs → chunk-Z2IYSTRT.cjs} +15 -15
  74. package/dist/{chunk-RF7NI5VN.cjs.map → chunk-Z2IYSTRT.cjs.map} +1 -1
  75. package/dist/{browser/chunk-WY2VLKRR.cjs → chunk-ZIER4DGK.cjs} +12 -12
  76. package/dist/{chunk-HSY7V4RG.cjs.map → chunk-ZIER4DGK.cjs.map} +1 -1
  77. package/dist/{browser/chunk-AZ3SVK3K.js → chunk-ZWOSPXS4.js} +3 -3
  78. package/dist/{chunk-TP3N3S2D.js.map → chunk-ZWOSPXS4.js.map} +1 -1
  79. package/dist/index.cjs +96 -96
  80. package/dist/index.js +9 -9
  81. package/dist/integrations/pino.cjs +4 -4
  82. package/dist/integrations/pino.js +3 -3
  83. package/dist/langchain/index.cjs +17 -17
  84. package/dist/langchain/index.js +2 -2
  85. package/dist/langgraph/index.cjs +27 -27
  86. package/dist/langgraph/index.js +5 -5
  87. package/dist/openai/index.cjs +11 -11
  88. package/dist/openai/index.js +2 -2
  89. package/dist/openai-agents/index.cjs +34 -34
  90. package/dist/openai-agents/index.js +4 -4
  91. package/dist/vercel-ai/index.cjs +14 -14
  92. package/dist/vercel-ai/index.js +3 -3
  93. package/package.json +1 -1
  94. package/dist/browser/chunk-6DOP3MTY.js.map +0 -1
  95. package/dist/browser/chunk-ZGYZZCUK.cjs.map +0 -1
  96. package/dist/chunk-5B3IUESN.cjs.map +0 -1
  97. package/dist/chunk-UEKQIRRA.js.map +0 -1
@@ -1,14 +1,14 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkHICEJ4LV_cjs = require('./chunk-HICEJ4LV.cjs');
4
- var chunk5B3IUESN_cjs = require('./chunk-5B3IUESN.cjs');
4
+ var chunkXCOZIFHC_cjs = require('./chunk-XCOZIFHC.cjs');
5
5
 
6
6
  // src/_internal/active-framework.ts
7
- chunk5B3IUESN_cjs.init_tracing();
7
+ chunkXCOZIFHC_cjs.init_tracing();
8
8
  function setActiveFramework(name) {
9
9
  if (typeof name !== "string" || name.length === 0) return;
10
10
  try {
11
- const state = chunk5B3IUESN_cjs.getActiveTraceState();
11
+ const state = chunkXCOZIFHC_cjs.getActiveTraceState();
12
12
  if (state !== null && !state.framework) {
13
13
  state.framework = name;
14
14
  }
@@ -122,5 +122,5 @@ exports.extractAnthropicOutputText = extractAnthropicOutputText;
122
122
  exports.extractLangChainOutputText = extractLangChainOutputText;
123
123
  exports.extractOpenAiOutputText = extractOpenAiOutputText;
124
124
  exports.setActiveFramework = setActiveFramework;
125
- //# sourceMappingURL=chunk-VD3KRXSP.cjs.map
126
- //# sourceMappingURL=chunk-VD3KRXSP.cjs.map
125
+ //# sourceMappingURL=chunk-VHF4GWJ4.cjs.map
126
+ //# sourceMappingURL=chunk-VHF4GWJ4.cjs.map
@@ -1 +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-VD3KRXSP.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 `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":["init_tracing","getActiveTraceState","getRole","contentToText","getContent"],"mappings":"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","file":"chunk-VHF4GWJ4.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 `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"]}
@@ -605,7 +605,7 @@ var init_diagnostics = __esm({
605
605
  "src/_internal/diagnostics.ts"() {
606
606
  init_env();
607
607
  init_redaction();
608
- SDK_VERSION = "0.5.0-rc.1" ;
608
+ SDK_VERSION = "0.5.0-rc.2" ;
609
609
  LEVEL_OFF = "off";
610
610
  LEVEL_ERROR = "error";
611
611
  LEVEL_DEBUG = "debug";
@@ -1145,6 +1145,17 @@ function tryLoadAls() {
1145
1145
  als = null;
1146
1146
  return als;
1147
1147
  }
1148
+ try {
1149
+ const getBuiltin = process?.getBuiltinModule;
1150
+ if (typeof getBuiltin === "function") {
1151
+ const mod = getBuiltin("node:async_hooks");
1152
+ if (mod?.AsyncLocalStorage) {
1153
+ als = new mod.AsyncLocalStorage();
1154
+ return als;
1155
+ }
1156
+ }
1157
+ } catch {
1158
+ }
1148
1159
  try {
1149
1160
  const dynamicRequire = Function("m", "return require(m)");
1150
1161
  const mod = dynamicRequire("node:async_hooks");
@@ -1372,16 +1383,37 @@ function errToString(e) {
1372
1383
  if (e instanceof Error) return e.message;
1373
1384
  return String(e);
1374
1385
  }
1386
+ function isThenable(v) {
1387
+ return v !== null && (typeof v === "object" || typeof v === "function") && typeof v.then === "function";
1388
+ }
1375
1389
  function runSync(opts, fn) {
1376
1390
  const { state, rootSpan, startMono } = startTrace(opts);
1377
1391
  const handle = buildRunHandle(state);
1378
1392
  const store = tryLoadAls();
1379
1393
  const runFn = () => withDbCaptureContext(state.traceId, rootSpan.span_id, () => fn(handle));
1380
- if (store) {
1381
- try {
1382
- const result = store.run(state, runFn);
1394
+ const settle = (result, onDone) => {
1395
+ if (!isThenable(result)) {
1383
1396
  endTrace(state, rootSpan, startMono, void 0);
1397
+ onDone();
1384
1398
  return result;
1399
+ }
1400
+ return result.then(
1401
+ (value) => {
1402
+ endTrace(state, rootSpan, startMono, void 0);
1403
+ onDone();
1404
+ return value;
1405
+ },
1406
+ (err) => {
1407
+ endTrace(state, rootSpan, startMono, err);
1408
+ onDone();
1409
+ throw err;
1410
+ }
1411
+ );
1412
+ };
1413
+ if (store) {
1414
+ try {
1415
+ return settle(store.run(state, runFn), () => {
1416
+ });
1385
1417
  } catch (err) {
1386
1418
  endTrace(state, rootSpan, startMono, err);
1387
1419
  throw err;
@@ -1389,14 +1421,11 @@ function runSync(opts, fn) {
1389
1421
  } else {
1390
1422
  const reset = setActiveTraceState(state);
1391
1423
  try {
1392
- const result = runFn();
1393
- endTrace(state, rootSpan, startMono, void 0);
1394
- return result;
1424
+ return settle(runFn(), reset);
1395
1425
  } catch (err) {
1396
1426
  endTrace(state, rootSpan, startMono, err);
1397
- throw err;
1398
- } finally {
1399
1427
  reset();
1428
+ throw err;
1400
1429
  }
1401
1430
  }
1402
1431
  }
@@ -1674,5 +1703,5 @@ exports.setTransport = setTransport;
1674
1703
  exports.spanAsync = spanAsync;
1675
1704
  exports.spanSync = spanSync;
1676
1705
  exports.startSpan = startSpan;
1677
- //# sourceMappingURL=chunk-5B3IUESN.cjs.map
1678
- //# sourceMappingURL=chunk-5B3IUESN.cjs.map
1706
+ //# sourceMappingURL=chunk-XCOZIFHC.cjs.map
1707
+ //# sourceMappingURL=chunk-XCOZIFHC.cjs.map