@morsehq-dev/sdk 0.5.0 → 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 (142) hide show
  1. package/README.md +11 -10
  2. package/dist/anthropic/index.cjs +11 -11
  3. package/dist/anthropic/index.d.cts +1 -1
  4. package/dist/anthropic/index.d.ts +1 -1
  5. package/dist/anthropic/index.js +4 -4
  6. package/dist/anthropic-agent-sdk/index.cjs +44 -40
  7. package/dist/anthropic-agent-sdk/index.cjs.map +1 -1
  8. package/dist/anthropic-agent-sdk/index.d.cts +1 -1
  9. package/dist/anthropic-agent-sdk/index.d.ts +1 -1
  10. package/dist/anthropic-agent-sdk/index.js +10 -6
  11. package/dist/anthropic-agent-sdk/index.js.map +1 -1
  12. package/dist/browser/anthropic/index.cjs +11 -11
  13. package/dist/browser/anthropic/index.js +4 -4
  14. package/dist/browser/anthropic-agent-sdk/index.cjs +44 -40
  15. package/dist/browser/anthropic-agent-sdk/index.cjs.map +1 -1
  16. package/dist/browser/anthropic-agent-sdk/index.js +10 -6
  17. package/dist/browser/anthropic-agent-sdk/index.js.map +1 -1
  18. package/dist/browser/{chunk-ELQ4LGAS.cjs → chunk-33WDUUKZ.cjs} +18 -18
  19. package/dist/browser/{chunk-ELQ4LGAS.cjs.map → chunk-33WDUUKZ.cjs.map} +1 -1
  20. package/dist/browser/{chunk-TV7TRP5O.cjs → chunk-3I7IGP3P.cjs} +5 -5
  21. package/dist/browser/chunk-3I7IGP3P.cjs.map +1 -0
  22. package/dist/browser/{chunk-YYUDZTHI.js → chunk-3OYHDDOJ.js} +27 -5
  23. package/dist/browser/chunk-3OYHDDOJ.js.map +1 -0
  24. package/dist/browser/{chunk-6BNMYEMW.cjs → chunk-4IUHXUCJ.cjs} +49 -9
  25. package/dist/browser/chunk-4IUHXUCJ.cjs.map +1 -0
  26. package/dist/browser/{chunk-BUCIE3DR.js → chunk-5TYTCLKA.js} +4 -4
  27. package/dist/browser/{chunk-BUCIE3DR.js.map → chunk-5TYTCLKA.js.map} +1 -1
  28. package/dist/browser/{chunk-VIOT3AOP.js → chunk-6JHMFFPE.js} +3 -3
  29. package/dist/browser/chunk-6JHMFFPE.js.map +1 -0
  30. package/dist/browser/{chunk-BIP66M44.cjs → chunk-FKYI3N5N.cjs} +7 -7
  31. package/dist/browser/{chunk-BIP66M44.cjs.map → chunk-FKYI3N5N.cjs.map} +1 -1
  32. package/dist/browser/{chunk-NU74H55W.js → chunk-FPTUHYDJ.js} +3 -3
  33. package/dist/browser/{chunk-NU74H55W.js.map → chunk-FPTUHYDJ.js.map} +1 -1
  34. package/dist/browser/{chunk-52JTU4LH.cjs → chunk-IDKQZ4X5.cjs} +38 -15
  35. package/dist/browser/chunk-IDKQZ4X5.cjs.map +1 -0
  36. package/dist/browser/{chunk-2X64OY2L.cjs → chunk-LIP3XCTK.cjs} +12 -12
  37. package/dist/browser/{chunk-2X64OY2L.cjs.map → chunk-LIP3XCTK.cjs.map} +1 -1
  38. package/dist/browser/{chunk-T6Z6UIBN.js → chunk-OUQAH27A.js} +3 -3
  39. package/dist/browser/{chunk-T6Z6UIBN.js.map → chunk-OUQAH27A.js.map} +1 -1
  40. package/dist/browser/{chunk-4CMVMTFB.cjs → chunk-PSNZZBQJ.cjs} +6 -6
  41. package/dist/browser/{chunk-4CMVMTFB.cjs.map → chunk-PSNZZBQJ.cjs.map} +1 -1
  42. package/dist/browser/{chunk-6T6ZPOKZ.js → chunk-PXHTLCEU.js} +49 -10
  43. package/dist/browser/chunk-PXHTLCEU.js.map +1 -0
  44. package/dist/browser/{chunk-KZFG23MO.js → chunk-TRVACYUN.js} +5 -5
  45. package/dist/browser/{chunk-KZFG23MO.js.map → chunk-TRVACYUN.js.map} +1 -1
  46. package/dist/browser/index.cjs +189 -124
  47. package/dist/browser/index.cjs.map +1 -1
  48. package/dist/browser/index.js +111 -46
  49. package/dist/browser/index.js.map +1 -1
  50. package/dist/browser/integrations/pino.cjs +4 -4
  51. package/dist/browser/integrations/pino.js +3 -3
  52. package/dist/browser/langchain/index.cjs +28 -26
  53. package/dist/browser/langchain/index.cjs.map +1 -1
  54. package/dist/browser/langchain/index.js +13 -11
  55. package/dist/browser/langchain/index.js.map +1 -1
  56. package/dist/browser/langgraph/index.cjs +32 -30
  57. package/dist/browser/langgraph/index.cjs.map +1 -1
  58. package/dist/browser/langgraph/index.js +10 -8
  59. package/dist/browser/langgraph/index.js.map +1 -1
  60. package/dist/browser/openai/index.cjs +11 -11
  61. package/dist/browser/openai/index.js +2 -2
  62. package/dist/browser/openai-agents/index.cjs +63 -35
  63. package/dist/browser/openai-agents/index.cjs.map +1 -1
  64. package/dist/browser/openai-agents/index.js +33 -5
  65. package/dist/browser/openai-agents/index.js.map +1 -1
  66. package/dist/browser/vercel-ai/index.cjs +14 -14
  67. package/dist/browser/vercel-ai/index.js +3 -3
  68. package/dist/{chunk-KMBKZLXH.cjs → chunk-7DALGJL2.cjs} +100 -25
  69. package/dist/chunk-7DALGJL2.cjs.map +1 -0
  70. package/dist/{chunk-D5NTF54A.cjs → chunk-B7TGG62X.cjs} +12 -12
  71. package/dist/{chunk-D5NTF54A.cjs.map → chunk-B7TGG62X.cjs.map} +1 -1
  72. package/dist/{chunk-LPLL2OXI.cjs → chunk-COZFARLL.cjs} +5 -5
  73. package/dist/chunk-COZFARLL.cjs.map +1 -0
  74. package/dist/{chunk-GTPKPUAV.cjs → chunk-DXTNU2KT.cjs} +38 -15
  75. package/dist/chunk-DXTNU2KT.cjs.map +1 -0
  76. package/dist/{chunk-6FLGLD72.js → chunk-ERH3TNXZ.js} +3 -3
  77. package/dist/{chunk-6FLGLD72.js.map → chunk-ERH3TNXZ.js.map} +1 -1
  78. package/dist/{chunk-7HYFOHM3.cjs → chunk-ESJJXXB6.cjs} +6 -6
  79. package/dist/{chunk-7HYFOHM3.cjs.map → chunk-ESJJXXB6.cjs.map} +1 -1
  80. package/dist/{chunk-SUEBUMHL.cjs → chunk-ETRNCI5Z.cjs} +18 -18
  81. package/dist/{chunk-SUEBUMHL.cjs.map → chunk-ETRNCI5Z.cjs.map} +1 -1
  82. package/dist/{chunk-KWOSUW7B.js → chunk-GULJAURY.js} +27 -5
  83. package/dist/chunk-GULJAURY.js.map +1 -0
  84. package/dist/{chunk-ZIMGB7IT.js → chunk-HJV35HWL.js} +100 -26
  85. package/dist/chunk-HJV35HWL.js.map +1 -0
  86. package/dist/{chunk-3ONFIKKC.js → chunk-L7AD4KUD.js} +3 -3
  87. package/dist/chunk-L7AD4KUD.js.map +1 -0
  88. package/dist/{chunk-SFI36VWW.js → chunk-QBDTQTMN.js} +3 -3
  89. package/dist/{chunk-SFI36VWW.js.map → chunk-QBDTQTMN.js.map} +1 -1
  90. package/dist/{chunk-NMARCV3R.cjs → chunk-WG4H5JC6.cjs} +7 -7
  91. package/dist/{chunk-NMARCV3R.cjs.map → chunk-WG4H5JC6.cjs.map} +1 -1
  92. package/dist/{chunk-J5FEPM7L.js → chunk-XS4P7XPV.js} +5 -5
  93. package/dist/{chunk-J5FEPM7L.js.map → chunk-XS4P7XPV.js.map} +1 -1
  94. package/dist/{chunk-ZZSVPAXM.js → chunk-YVLEDBN7.js} +4 -4
  95. package/dist/{chunk-ZZSVPAXM.js.map → chunk-YVLEDBN7.js.map} +1 -1
  96. package/dist/index.cjs +199 -134
  97. package/dist/index.cjs.map +1 -1
  98. package/dist/index.d.cts +13 -2
  99. package/dist/index.d.ts +13 -2
  100. package/dist/index.js +112 -47
  101. package/dist/index.js.map +1 -1
  102. package/dist/integrations/pino.cjs +4 -4
  103. package/dist/integrations/pino.js +3 -3
  104. package/dist/langchain/index.cjs +28 -26
  105. package/dist/langchain/index.cjs.map +1 -1
  106. package/dist/langchain/index.d.cts +3 -3
  107. package/dist/langchain/index.d.ts +3 -3
  108. package/dist/langchain/index.js +13 -11
  109. package/dist/langchain/index.js.map +1 -1
  110. package/dist/langgraph/index.cjs +32 -30
  111. package/dist/langgraph/index.cjs.map +1 -1
  112. package/dist/langgraph/index.d.cts +3 -3
  113. package/dist/langgraph/index.d.ts +3 -3
  114. package/dist/langgraph/index.js +10 -8
  115. package/dist/langgraph/index.js.map +1 -1
  116. package/dist/openai/index.cjs +11 -11
  117. package/dist/openai/index.js +2 -2
  118. package/dist/openai-agents/index.cjs +63 -35
  119. package/dist/openai-agents/index.cjs.map +1 -1
  120. package/dist/openai-agents/index.d.cts +13 -4
  121. package/dist/openai-agents/index.d.ts +13 -4
  122. package/dist/openai-agents/index.js +33 -5
  123. package/dist/openai-agents/index.js.map +1 -1
  124. package/dist/{spans-DZtMuBvc.d.cts → spans-CBMWNg2C.d.cts} +1 -0
  125. package/dist/{spans-DZtMuBvc.d.ts → spans-CBMWNg2C.d.ts} +1 -0
  126. package/dist/{tracing-J8ZgxVzU.d.ts → tracing-BMWTyexr.d.ts} +1 -1
  127. package/dist/{tracing-CNlre8TK.d.cts → tracing-Bh-cbvr6.d.cts} +1 -1
  128. package/dist/vercel-ai/index.cjs +14 -14
  129. package/dist/vercel-ai/index.js +3 -3
  130. package/package.json +1 -1
  131. package/dist/browser/chunk-52JTU4LH.cjs.map +0 -1
  132. package/dist/browser/chunk-6BNMYEMW.cjs.map +0 -1
  133. package/dist/browser/chunk-6T6ZPOKZ.js.map +0 -1
  134. package/dist/browser/chunk-TV7TRP5O.cjs.map +0 -1
  135. package/dist/browser/chunk-VIOT3AOP.js.map +0 -1
  136. package/dist/browser/chunk-YYUDZTHI.js.map +0 -1
  137. package/dist/chunk-3ONFIKKC.js.map +0 -1
  138. package/dist/chunk-GTPKPUAV.cjs.map +0 -1
  139. package/dist/chunk-KMBKZLXH.cjs.map +0 -1
  140. package/dist/chunk-KWOSUW7B.js.map +0 -1
  141. package/dist/chunk-LPLL2OXI.cjs.map +0 -1
  142. package/dist/chunk-ZIMGB7IT.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/langchain/callback-handler.ts"],"names":["tokenUsage","model"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * `@morsehq-dev/sdk/langchain` — `MorseCallbackHandler` for plain LangChain\n * (chains, LLMs, tools, retrievers). Port of\n * `apps/sdk/python/src/morse_ai/adapters/langchain.py` (MHQ-482).\n *\n * Usage:\n *\n * ```ts\n * import { MorseCallbackHandler } from \"@morsehq-dev/sdk/langchain\";\n * import { runAsync } from \"@morsehq-dev/sdk\"; // or morse.run()\n *\n * const handler = new MorseCallbackHandler({ agentName: \"my-agent\" });\n * await runAsync({ agentName: \"my-agent\" }, async () => {\n * await chain.invoke(input, { callbacks: [handler] });\n * });\n * ```\n *\n * Span mapping (mirrors the Python adapter):\n * - handleChainStart / handleChainEnd / handleChainError → `type=agent`\n * - handleLLMStart / handleChatModelStart / handleLLMEnd / handleLLMError → `type=llm`\n * - handleToolStart / handleToolEnd / handleToolError → `type=tool`\n * - handleRetrieverStart / handleRetrieverEnd / handleRetrieverError (@beta)\n * → `type=retriever`\n *\n * ## Deviations from the Python adapter (see PR report for full rationale)\n *\n * 1. **No auto-trace creation.** Python's `MorseCallbackHandler` calls\n * `morse_ai.tracing.run(...)` itself when no trace is active (contextvars\n * support manually entering/exiting a context across independent callback\n * invocations). The TS SDK's trace context is `AsyncLocalStorage`-based\n * (`_internal/tracing.ts`), which only supports the `als.run(store, fn)`\n * callback shape — there is no way to open a trace and leave it open\n * across separate, unwrapped callback calls. Callers MUST wrap the\n * LangChain invocation in `morse.run()` / `runAsync()`. This mirrors the\n * constraint the existing `../langgraph/` adapter already operates under\n * (see its file-header comments) — every span helper silently no-ops\n * (returns `null`) when there is no active trace, exactly like this file.\n * 2. **No structural subclass relationship with `../langgraph/`.** The task\n * brief notes that Python's `langgraph.py::LangGraphCallbackHandler`\n * subclasses `langchain.py::MorseCallbackHandler`. `@langchain/core`'s\n * `BaseCallbackHandler` surface is identical for plain chains and for\n * LangGraph graphs (LangGraph JS is built on `@langchain/core`\n * callbacks), so structurally the two TS adapters COULD share a base.\n * But the existing `../langgraph/` files are off-limits for this task\n * (a separate, already-shipped gap) and refactoring them to extract a\n * shared base is out of scope / higher risk than the value it buys right\n * now. This adapter is therefore a structural sibling, not a subclass —\n * same conventions (span-emission via `startSpan`, `absorbErrorsSync`\n * everywhere, `metadata.adapter` tagging), independently implemented.\n * 3. **No cost computation.** Python's `on_llm_end` calls\n * `morse_ai.pricing.calculate_cost` and `merge_provider_reported_cost`.\n * Neither has a TS port yet (owned by a separate parallel MHQ-482 gap).\n * Token counts/model are still captured; `cost_usd` is left unset until\n * the pricing gap lands.\n * 4. **`type=retriever` uses a real, added `SpanType` variant** (see\n * `_internal/spans.ts`) rather than the `type=tool` +\n * `metadata.tool_kind` fallback pattern used for `hook`/`subagent` — the\n * backend already accepts `\"retriever\"` (Python's `SpanType.RETRIEVER`\n * has shipped since the Python adapter), so no fallback is needed.\n *\n * All public methods absorb internal errors (never throw into the LangChain\n * runtime) — mirrors Python's `try/except Exception: logger.debug(...)`\n * wrapping on every callback.\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport { startSpan } from \"../_internal/tracing\";\nimport { decomposeOpenAiMessages } from \"../_agent-sdk-common/context-decomposer\";\nimport type {\n BaseMessageLike,\n CallbackHandlerSurface,\n DocumentLike,\n LangChainCoreCallbacksModuleLike,\n LLMResultLike,\n SerializedLike,\n} from \"./types\";\n\n/* ------------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------------ */\n\nconst ADAPTER = \"langchain-js\" as const;\nconst HANDLER_NAME = \"morse_callback_handler\";\nconst DEFAULT_AGENT_NAME = \"langchain-agent\";\n\n// AGE-260 port: cap on the JSON-serialized size of any single input_data /\n// output_data payload. Mirrors the Python adapter's `_MAX_STATE_PAYLOAD_BYTES`.\nconst MAX_STATE_PAYLOAD_BYTES = 64 * 1024; // 64 KB JSON\n\n/* ------------------------------------------------------------------------ */\n/* Public options */\n/* ------------------------------------------------------------------------ */\n\nexport interface MorseCallbackHandlerOptions {\n /** Falls back to `\"langchain-agent\"` when unset. Only used for documentation\n * purposes on this handler instance — the actual trace's agent name is set\n * by whatever `morse.run()` / `runAsync()` call wraps the invocation. */\n agentName?: string;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Name resolution helpers */\n/* ------------------------------------------------------------------------ */\n\n/** chain/llm: prefer `id` path tail, then `name`, then `fallback`. */\nfunction resolveNameIdFirst(\n serialized: SerializedLike | null | undefined,\n fallback: string,\n): string {\n const s = serialized ?? {};\n const idPath = s.id;\n if (Array.isArray(idPath) && idPath.length > 0) {\n const last = idPath[idPath.length - 1];\n if (typeof last === \"string\" && last.length > 0) return last;\n }\n if (typeof s.name === \"string\" && s.name.length > 0) return s.name;\n return fallback;\n}\n\n/** tool: prefer `name`, then `id` path tail, then `fallback`. */\nfunction resolveNameNameFirst(\n serialized: SerializedLike | null | undefined,\n fallback: string,\n): string {\n const s = serialized ?? {};\n if (typeof s.name === \"string\" && s.name.length > 0) return s.name;\n const idPath = s.id;\n if (Array.isArray(idPath) && idPath.length > 0) {\n const last = idPath[idPath.length - 1];\n if (typeof last === \"string\" && last.length > 0) return last;\n }\n return fallback;\n}\n\n/* ------------------------------------------------------------------------ */\n/* State coercion — port of Python's `_ensure_dict` */\n/* ------------------------------------------------------------------------ */\n\nfunction utf8ByteLength(s: string): number {\n if (typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(s).length;\n // Rough fallback — good enough for a soft cap, never load-bearing for\n // correctness (only used to decide whether to truncate).\n return s.length;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const proto: unknown = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Coerce arbitrary LangChain chain/tool/retriever input or output into a\n * dict payload the wire schema requires (`SpanData.input_data` /\n * `output_data`). Port of Python's `MorseCallbackHandler._ensure_dict`:\n *\n * - `null` / `undefined` → `undefined` (legitimately absent)\n * - plain object → unchanged\n * - object with a callable `toJSON()` returning a plain object → that result\n * (JS analogue of Python's Pydantic `model_dump()` / `dict()` duck typing)\n * - other (string / number / array / class instance) → `{ value: String(x) }`\n *\n * Oversized payloads (JSON > `MAX_STATE_PAYLOAD_BYTES`) are replaced with a\n * truncation marker so the transport queue stays bounded but the dashboard\n * still shows a usable preview — never silently dropped to `undefined`.\n */\nexport function coerceStateValue(data: unknown): Record<string, unknown> | undefined {\n if (data === null || data === undefined) return undefined;\n\n let coerced: Record<string, unknown>;\n if (isPlainObject(data)) {\n coerced = data;\n } else {\n const toJSON = (data as { toJSON?: unknown }).toJSON;\n let viaToJSON: Record<string, unknown> | null = null;\n if (typeof toJSON === \"function\") {\n try {\n const result: unknown = (toJSON as () => unknown).call(data);\n if (isPlainObject(result)) viaToJSON = result;\n } catch {\n viaToJSON = null;\n }\n }\n if (viaToJSON !== null) {\n coerced = viaToJSON;\n } else if (Array.isArray(data)) {\n coerced = { value: safeStringify(data) };\n } else {\n coerced = { value: String(data) };\n }\n }\n\n let encoded: string;\n try {\n encoded = JSON.stringify(coerced) ?? \"null\";\n } catch {\n return {\n _truncated: true,\n _reason: \"unserializable\",\n value: String(coerced).slice(0, 1024),\n };\n }\n\n const byteLen = utf8ByteLength(encoded);\n if (byteLen > MAX_STATE_PAYLOAD_BYTES) {\n const preview = encoded.slice(0, Math.floor(MAX_STATE_PAYLOAD_BYTES / 2));\n return {\n _truncated: true,\n _reason: \"payload_too_large\",\n _original_size_bytes: byteLen,\n _max_bytes: MAX_STATE_PAYLOAD_BYTES,\n preview,\n };\n }\n\n return coerced;\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* LLM response extraction — port of `_extract_token_usage` / `_extract_model` */\n/* ------------------------------------------------------------------------ */\n\nexport interface TokenUsage {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n}\n\nfunction numOrUndef(v: unknown): number | undefined {\n return typeof v === \"number\" && Number.isFinite(v) ? v : undefined;\n}\n\nfunction firstGenerationMessage(\n response: LLMResultLike | null | undefined,\n): BaseMessageLike | undefined {\n const gens = response?.generations;\n if (Array.isArray(gens) && gens.length > 0 && Array.isArray(gens[0]) && gens[0]!.length > 0) {\n return gens[0]![0]!.message;\n }\n return undefined;\n}\n\n/**\n * Returns token usage across the provider shapes LangChain JS integrations\n * use in practice. Field names below are snake_case because — unlike most\n * of the JS ecosystem — `@langchain/core`'s `usage_metadata` /\n * `response_metadata` fields ARE snake_case (verified against\n * `@langchain/core/dist/messages/ai.d.ts`), matching the Python SDK 1:1.\n * `llmOutput` is a free-form provider bag; we also check the camelCase\n * `tokenUsage` key the existing `../langgraph/` adapter established.\n */\nexport function extractTokenUsage(response: LLMResultLike | null | undefined): TokenUsage {\n try {\n const msg = firstGenerationMessage(response);\n if (msg) {\n const um = msg.usage_metadata;\n if (um && (um.input_tokens !== undefined || um.output_tokens !== undefined)) {\n const details = um.input_token_details ?? {};\n const cached = details.cache_read ?? details.cache_creation;\n return {\n inputTokens: numOrUndef(um.input_tokens),\n outputTokens: numOrUndef(um.output_tokens),\n totalTokens: numOrUndef(um.total_tokens),\n cachedInputTokens: numOrUndef(cached),\n };\n }\n const tokenUsage = msg.response_metadata?.token_usage;\n if (tokenUsage) {\n return {\n inputTokens: numOrUndef(tokenUsage.prompt_tokens ?? tokenUsage.input_tokens),\n outputTokens: numOrUndef(tokenUsage.completion_tokens ?? tokenUsage.output_tokens),\n totalTokens: numOrUndef(tokenUsage.total_tokens),\n };\n }\n }\n } catch {\n // fall through to llmOutput-based extraction\n }\n\n const llmOutput = response?.llmOutput ?? {};\n const tokenUsage = (llmOutput.tokenUsage ?? llmOutput.token_usage) as\n | Record<string, unknown>\n | undefined;\n if (tokenUsage && Object.keys(tokenUsage).length > 0) {\n return {\n inputTokens: numOrUndef(\n tokenUsage.promptTokens ??\n tokenUsage.prompt_tokens ??\n tokenUsage.inputTokens ??\n tokenUsage.input_tokens,\n ),\n outputTokens: numOrUndef(\n tokenUsage.completionTokens ??\n tokenUsage.completion_tokens ??\n tokenUsage.outputTokens ??\n tokenUsage.output_tokens,\n ),\n totalTokens: numOrUndef(tokenUsage.totalTokens ?? tokenUsage.total_tokens),\n };\n }\n\n const usage = llmOutput.usage as Record<string, unknown> | undefined;\n if (usage && Object.keys(usage).length > 0) {\n return {\n inputTokens: numOrUndef(usage.input_tokens),\n outputTokens: numOrUndef(usage.output_tokens),\n totalTokens: numOrUndef(usage.total_tokens),\n cachedInputTokens: numOrUndef(usage.cache_read_input_tokens),\n };\n }\n\n return {};\n}\n\n/** Best-effort model-name extraction from an `LLMResult`. */\nexport function extractModel(response: LLMResultLike | null | undefined): string | undefined {\n try {\n const msg = firstGenerationMessage(response);\n const meta = msg?.response_metadata;\n const model = meta?.model_name ?? meta?.model;\n if (typeof model === \"string\" && model.length > 0) return model;\n } catch {\n // fall through\n }\n const llmOutput = response?.llmOutput ?? {};\n const model = llmOutput.model_name ?? llmOutput.model;\n return typeof model === \"string\" && model.length > 0 ? model : undefined;\n}\n\n/** Best-effort output-text extraction from an `LLMResult`, for `output_data.text`. */\nexport function extractOutputText(response: LLMResultLike | null | undefined): string {\n try {\n const gens = response?.generations;\n if (Array.isArray(gens) && gens.length > 0 && Array.isArray(gens[0]) && gens[0]!.length > 0) {\n const first = gens[0]![0]!;\n if (typeof first.text === \"string\" && first.text.length > 0) return first.text;\n const content = first.message?.content;\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block === \"string\") {\n parts.push(block);\n } else if (\n block &&\n typeof block === \"object\" &&\n typeof (block as Record<string, unknown>).text === \"string\"\n ) {\n parts.push((block as Record<string, unknown>).text as string);\n }\n }\n return parts.join(\"\\n\");\n }\n }\n } catch {\n // fall through\n }\n return \"\";\n}\n\n/* ------------------------------------------------------------------------ */\n/* MorseCallbackHandler */\n/* ------------------------------------------------------------------------ */\n\nexport class MorseCallbackHandler implements CallbackHandlerSurface {\n /** Required by LangChain's `BaseCallbackHandler` interface. */\n public readonly name: string = HANDLER_NAME;\n\n public readonly agentName: string;\n\n /** Map of `runId` → open `SpanHandle`, spanning chain/llm/tool/retriever\n * spans together (mirrors Python's single `_span_stack` dict). */\n private readonly spanStack: Map<string, SpanHandle> = new Map();\n\n constructor(options?: MorseCallbackHandlerOptions) {\n this.agentName =\n options?.agentName && options.agentName.length > 0 ? options.agentName : DEFAULT_AGENT_NAME;\n }\n\n /* ---------------------------------------------------------------------- */\n /* Internal helpers */\n /* ---------------------------------------------------------------------- */\n\n private openSpan(\n runId: string,\n name: string,\n type: \"agent\" | \"llm\" | \"tool\" | \"retriever\",\n inputData?: unknown,\n extraMetadata?: Record<string, unknown>,\n ): SpanHandle | null {\n if (typeof runId !== \"string\" || runId.length === 0) return null;\n const metadata: Record<string, unknown> = { ...(extraMetadata ?? {}), adapter: ADAPTER };\n const handle = startSpan({ name, type, metadata });\n if (handle === null) return null;\n const wrapped = coerceStateValue(inputData);\n if (wrapped !== undefined) handle.span.input_data = wrapped;\n this.spanStack.set(runId, handle);\n return handle;\n }\n\n private closeSpan(runId: string, outputData?: unknown, error?: unknown): void {\n const handle = this.spanStack.get(runId);\n if (handle === undefined) return;\n this.spanStack.delete(runId);\n if (outputData !== undefined) {\n const wrapped = coerceStateValue(outputData);\n if (wrapped !== undefined) handle.span.output_data = wrapped;\n }\n if (error !== undefined) {\n handle.end(error);\n } else {\n handle.end();\n }\n }\n\n /* ---------------------------------------------------------------------- */\n /* Chain callbacks */\n /* ---------------------------------------------------------------------- */\n\n // NOTE: trailing `parentRunId`/`tags`/`metadata`/`runType`/`runName`\n // parameters from `CallbackHandlerSurface` are intentionally omitted below\n // (not just underscore-prefixed) — this adapter doesn't use them, and\n // TypeScript structural typing allows an implementing function to declare\n // fewer parameters than its interface signature. Declaring-then-ignoring\n // trailing unused params trips `@typescript-eslint/no-unused-vars`'s\n // default `args: \"after-used\"` mode (only params before the last *used*\n // one are exempt); omitting them entirely is both lint-clean and reads\n // as \"these truly aren't consulted.\"\n\n handleChainStart(chain: SerializedLike, inputs: Record<string, unknown>, runId: string): void {\n _handleChainStart(this, chain, inputs, runId);\n }\n\n handleChainEnd(outputs: Record<string, unknown>, runId: string): void {\n _handleChainEnd(this, outputs, runId);\n }\n\n handleChainError(err: unknown, runId: string): void {\n _handleChainError(this, err, runId);\n }\n\n /* ---------------------------------------------------------------------- */\n /* LLM callbacks */\n /* ---------------------------------------------------------------------- */\n\n handleLLMStart(\n llm: SerializedLike,\n prompts: string[],\n runId: string,\n _parentRunId?: string,\n extraParams?: Record<string, unknown>,\n ): void {\n _handleLLMStart(this, llm, prompts, runId, extraParams);\n }\n\n handleChatModelStart(\n llm: SerializedLike,\n messages: BaseMessageLike[][],\n runId: string,\n _parentRunId?: string,\n extraParams?: Record<string, unknown>,\n ): void {\n // Chat models ARE LLMs — same span type as handleLLMStart (mirrors\n // Python's LangGraph override; the plain-LangChain adapter treats both\n // identically since it has no chat-model-specific behavior to add).\n // MHQ-750: also decompose the flattened messages (+ bound tools, if\n // any) into context_segments — mirrors `../langgraph/`'s\n // handleChatModelStart wiring via the same shared decomposer.\n _handleChatModelStart(this, llm, messages, runId, extraParams);\n }\n\n handleLLMEnd(output: LLMResultLike, runId: string): void {\n _handleLLMEnd(this, output, runId);\n }\n\n handleLLMError(err: unknown, runId: string): void {\n _handleLLMError(this, err, runId);\n }\n\n /* ---------------------------------------------------------------------- */\n /* Tool callbacks */\n /* ---------------------------------------------------------------------- */\n\n handleToolStart(tool: SerializedLike, input: string, runId: string): void {\n _handleToolStart(this, tool, input, runId);\n }\n\n handleToolEnd(output: unknown, runId: string): void {\n _handleToolEnd(this, output, runId);\n }\n\n handleToolError(err: unknown, runId: string): void {\n _handleToolError(this, err, runId);\n }\n\n /* ---------------------------------------------------------------------- */\n /* Retriever callbacks (@beta — subject to change before SDK v1.0) */\n /* ---------------------------------------------------------------------- */\n\n handleRetrieverStart(retriever: SerializedLike, query: string, runId: string): void {\n _handleRetrieverStart(this, retriever, query, runId);\n }\n\n handleRetrieverEnd(documents: DocumentLike[], runId: string): void {\n _handleRetrieverEnd(this, documents, runId);\n }\n\n handleRetrieverError(err: unknown, runId: string): void {\n _handleRetrieverError(this, err, runId);\n }\n\n /* ---------------------------------------------------------------------- */\n /* Internal accessors used by the absorbErrorsSync-wrapped impls */\n /* ---------------------------------------------------------------------- */\n\n /** @internal */\n _openSpan(\n runId: string,\n name: string,\n type: \"agent\" | \"llm\" | \"tool\" | \"retriever\",\n inputData?: unknown,\n extraMetadata?: Record<string, unknown>,\n ): SpanHandle | null {\n return this.openSpan(runId, name, type, inputData, extraMetadata);\n }\n\n /** @internal */\n _closeSpan(runId: string, outputData?: unknown, error?: unknown): void {\n this.closeSpan(runId, outputData, error);\n }\n\n /** @internal */\n _getSpan(runId: string): SpanHandle | undefined {\n return this.spanStack.get(runId);\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Implementation bodies (wrapped in absorbErrorsSync) */\n/* ------------------------------------------------------------------------ */\n\nconst _handleChainStart = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n chain: SerializedLike | null | undefined,\n inputs: Record<string, unknown>,\n runId: string,\n ): void => {\n const chainName = resolveNameIdFirst(chain, \"chain\");\n self._openSpan(runId, chainName, \"agent\", inputs);\n },\n { fingerprint: \"morse.langchain.handleChainStart\" },\n) as (\n self: MorseCallbackHandler,\n chain: SerializedLike | null | undefined,\n inputs: Record<string, unknown>,\n runId: string,\n) => void;\n\nconst _handleChainEnd = absorbErrorsSync(\n (self: MorseCallbackHandler, outputs: Record<string, unknown>, runId: string): void => {\n self._closeSpan(runId, outputs);\n },\n { fingerprint: \"morse.langchain.handleChainEnd\" },\n) as (self: MorseCallbackHandler, outputs: Record<string, unknown>, runId: string) => void;\n\nconst _handleChainError = absorbErrorsSync(\n (self: MorseCallbackHandler, err: unknown, runId: string): void => {\n self._closeSpan(runId, undefined, err ?? new Error(\"langchain chain error\"));\n },\n { fingerprint: \"morse.langchain.handleChainError\" },\n) as (self: MorseCallbackHandler, err: unknown, runId: string) => void;\n\nconst _handleLLMStart = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n llm: SerializedLike | null | undefined,\n prompts: string[],\n runId: string,\n extraParams: Record<string, unknown> | undefined,\n ): void => {\n const llmName = resolveNameIdFirst(llm, \"llm\");\n const invocationParams = extraParams?.invocation_params as Record<string, unknown> | undefined;\n const modelName =\n (typeof invocationParams?.model_name === \"string\"\n ? invocationParams.model_name\n : undefined) ??\n (typeof invocationParams?.model === \"string\" ? invocationParams.model : undefined);\n const handle = self._openSpan(\n runId,\n llmName,\n \"llm\",\n prompts && prompts.length > 0 ? { prompts } : undefined,\n );\n if (handle !== null && modelName) {\n handle.span.model = modelName;\n }\n },\n { fingerprint: \"morse.langchain.handleLLMStart\" },\n) as (\n self: MorseCallbackHandler,\n llm: SerializedLike | null | undefined,\n prompts: string[],\n runId: string,\n extraParams: Record<string, unknown> | undefined,\n) => void;\n\n/**\n * `@langchain/core` passes `handleChatModelStart` a nested\n * `BaseMessage[][]` — one array per \"prompt\" in a batch call. The\n * decomposer expects a flat list, so flatten one level (mirrors\n * `../langgraph/llm-and-tool-callbacks.ts`'s `flattenMessages`, itself a\n * port of Python's `_flatten_messages` in `adapters/langgraph.py`).\n */\nfunction flattenMessages(messages: BaseMessageLike[][] | undefined): BaseMessageLike[] {\n if (!Array.isArray(messages)) return [];\n const flat: BaseMessageLike[] = [];\n for (const item of messages) {\n if (Array.isArray(item)) {\n flat.push(...item);\n } else if (item !== undefined && item !== null) {\n flat.push(item as unknown as BaseMessageLike);\n }\n }\n return flat;\n}\n\n/** Extract the bound `tools` array from `handleChatModelStart`'s `extraParams.invocation_params`. */\nfunction toolsFromExtra(extra: Record<string, unknown> | undefined): unknown {\n const invocationParams = extra?.invocation_params as Record<string, unknown> | undefined;\n return invocationParams?.tools;\n}\n\nconst _handleChatModelStart = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n llm: SerializedLike | null | undefined,\n messages: BaseMessageLike[][],\n runId: string,\n extraParams: Record<string, unknown> | undefined,\n ): void => {\n const llmName = resolveNameIdFirst(llm, \"llm\");\n const invocationParams = extraParams?.invocation_params as Record<string, unknown> | undefined;\n const modelName =\n (typeof invocationParams?.model_name === \"string\"\n ? invocationParams.model_name\n : undefined) ??\n (typeof invocationParams?.model === \"string\" ? invocationParams.model : undefined);\n const flatMessages = flattenMessages(messages);\n const contextSegments = decomposeOpenAiMessages(flatMessages, toolsFromExtra(extraParams));\n const handle = self._openSpan(runId, llmName, \"llm\", undefined);\n if (handle !== null) {\n if (modelName) handle.span.model = modelName;\n if (contextSegments.length > 0) handle.span.context_segments = contextSegments;\n }\n },\n { fingerprint: \"morse.langchain.handleChatModelStart\" },\n) as (\n self: MorseCallbackHandler,\n llm: SerializedLike | null | undefined,\n messages: BaseMessageLike[][],\n runId: string,\n extraParams: Record<string, unknown> | undefined,\n) => void;\n\nconst _handleLLMEnd = absorbErrorsSync(\n (self: MorseCallbackHandler, response: LLMResultLike, runId: string): void => {\n const handle = self._getSpan(runId);\n const outputText = extractOutputText(response);\n\n if (handle !== undefined) {\n const usage = extractTokenUsage(response);\n if (usage.inputTokens !== undefined || usage.outputTokens !== undefined) {\n handle.span.input_tokens = usage.inputTokens;\n handle.span.output_tokens = usage.outputTokens;\n handle.span.total_tokens =\n usage.totalTokens !== undefined\n ? usage.totalTokens\n : (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0) || undefined;\n if (usage.cachedInputTokens) {\n handle.span.cached_input_tokens = usage.cachedInputTokens;\n }\n }\n // Response model wins over the invocation-param model set in\n // handleLLMStart — the response carries the fully-resolved version\n // string. Mirrors Python's on_llm_end behavior.\n const resolvedModel = extractModel(response);\n if (resolvedModel) {\n handle.span.model = resolvedModel;\n }\n // NOTE: cost computation (calculate_cost / merge_provider_reported_cost\n // in the Python adapter) intentionally omitted — no TS pricing module\n // exists yet (separate MHQ-482 gap). See file-header deviation notes.\n }\n\n self._closeSpan(runId, { text: outputText });\n },\n { fingerprint: \"morse.langchain.handleLLMEnd\" },\n) as (self: MorseCallbackHandler, response: LLMResultLike, runId: string) => void;\n\nconst _handleLLMError = absorbErrorsSync(\n (self: MorseCallbackHandler, err: unknown, runId: string): void => {\n self._closeSpan(runId, undefined, err ?? new Error(\"langchain llm error\"));\n },\n { fingerprint: \"morse.langchain.handleLLMError\" },\n) as (self: MorseCallbackHandler, err: unknown, runId: string) => void;\n\nconst _handleToolStart = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n tool: SerializedLike | null | undefined,\n input: string,\n runId: string,\n ): void => {\n const toolName = resolveNameNameFirst(tool, \"tool\");\n self._openSpan(runId, toolName, \"tool\", { input });\n },\n { fingerprint: \"morse.langchain.handleToolStart\" },\n) as (\n self: MorseCallbackHandler,\n tool: SerializedLike | null | undefined,\n input: string,\n runId: string,\n) => void;\n\nconst _handleToolEnd = absorbErrorsSync(\n (self: MorseCallbackHandler, output: unknown, runId: string): void => {\n self._closeSpan(runId, { output: String(output) });\n },\n { fingerprint: \"morse.langchain.handleToolEnd\" },\n) as (self: MorseCallbackHandler, output: unknown, runId: string) => void;\n\nconst _handleToolError = absorbErrorsSync(\n (self: MorseCallbackHandler, err: unknown, runId: string): void => {\n self._closeSpan(runId, undefined, err ?? new Error(\"langchain tool error\"));\n },\n { fingerprint: \"morse.langchain.handleToolError\" },\n) as (self: MorseCallbackHandler, err: unknown, runId: string) => void;\n\nconst _handleRetrieverStart = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n retriever: SerializedLike | null | undefined,\n query: string,\n runId: string,\n ): void => {\n const idPath = retriever?.id;\n const retrieverName =\n (Array.isArray(idPath) && idPath.length > 0 ? idPath[idPath.length - 1] : undefined) ||\n \"retriever\";\n self._openSpan(runId, String(retrieverName), \"retriever\", { query });\n },\n { fingerprint: \"morse.langchain.handleRetrieverStart\" },\n) as (\n self: MorseCallbackHandler,\n retriever: SerializedLike | null | undefined,\n query: string,\n runId: string,\n) => void;\n\nconst _handleRetrieverEnd = absorbErrorsSync(\n (self: MorseCallbackHandler, documents: DocumentLike[], runId: string): void => {\n const docsOut: Array<{ content_preview: string; source?: string; score?: number }> = [];\n for (const doc of documents ?? []) {\n if (doc && typeof doc === \"object\" && typeof doc.pageContent === \"string\") {\n const entry: { content_preview: string; source?: string; score?: number } = {\n content_preview: doc.pageContent.slice(0, 200),\n };\n const meta = doc.metadata;\n if (meta) {\n if (typeof meta.source === \"string\") entry.source = meta.source;\n const score = meta.score ?? meta.relevance_score;\n if (typeof score === \"number\") entry.score = score;\n }\n docsOut.push(entry);\n } else if (doc && typeof doc === \"object\") {\n docsOut.push(\n doc as unknown as { content_preview: string; source?: string; score?: number },\n );\n }\n }\n self._closeSpan(runId, {\n docs_count: documents?.length ?? 0,\n top_score: docsOut.length > 0 ? (docsOut[0]?.score ?? null) : null,\n sources: docsOut\n .map((d) => d.source)\n .filter((s): s is string => typeof s === \"string\" && s.length > 0),\n documents: docsOut.slice(0, 10),\n });\n },\n { fingerprint: \"morse.langchain.handleRetrieverEnd\" },\n) as (self: MorseCallbackHandler, documents: DocumentLike[], runId: string) => void;\n\nconst _handleRetrieverError = absorbErrorsSync(\n (self: MorseCallbackHandler, err: unknown, runId: string): void => {\n self._closeSpan(runId, undefined, err ?? new Error(\"langchain retriever error\"));\n },\n { fingerprint: \"morse.langchain.handleRetrieverError\" },\n) as (self: MorseCallbackHandler, err: unknown, runId: string) => void;\n\n/* ------------------------------------------------------------------------ */\n/* Optional peer-dep: real BaseCallbackHandler */\n/* ------------------------------------------------------------------------ */\n\nasync function loadLangChainCoreCallbacks(): Promise<LangChainCoreCallbacksModuleLike | null> {\n try {\n // Function-eval'd dynamic import keeps bundlers from trying to resolve\n // `@langchain/core/callbacks/base` at build time when the dep isn't installed.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mod = (await (Function(\"m\", \"return import(m)\") as any)(\n \"@langchain/core/callbacks/base\",\n )) as LangChainCoreCallbacksModuleLike;\n return mod ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Best-effort: if `@langchain/core/callbacks/base` is installed at runtime,\n * return a `MorseCallbackHandler`-shaped class whose prototype chain\n * includes the real `BaseCallbackHandler` (for users relying on\n * `instanceof BaseCallbackHandler` checks). Otherwise return the duck-typed\n * `MorseCallbackHandler` defined above. Mirrors `../langgraph/callback-handler.ts`'s\n * `getCallbackHandlerClass()`.\n */\nexport async function getCallbackHandlerClass(): Promise<typeof MorseCallbackHandler> {\n const mod = await loadLangChainCoreCallbacks();\n const Base = mod?.BaseCallbackHandler;\n if (!Base) return MorseCallbackHandler;\n\n class MorseCallbackHandlerWithBase extends (Base as unknown as {\n new (...args: unknown[]): object;\n }) {\n public readonly name: string = HANDLER_NAME;\n private readonly _av: MorseCallbackHandler;\n constructor(options?: MorseCallbackHandlerOptions) {\n super();\n this._av = new MorseCallbackHandler(options);\n }\n handleChainStart(chain: SerializedLike, inputs: Record<string, unknown>, runId: string): void {\n this._av.handleChainStart(chain, inputs, runId);\n }\n handleChainEnd(outputs: Record<string, unknown>, runId: string): void {\n this._av.handleChainEnd(outputs, runId);\n }\n handleChainError(err: unknown, runId: string): void {\n this._av.handleChainError(err, runId);\n }\n handleLLMStart(\n llm: SerializedLike,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n ): void {\n this._av.handleLLMStart(llm, prompts, runId, parentRunId, extraParams);\n }\n handleChatModelStart(\n llm: SerializedLike,\n messages: BaseMessageLike[][],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n ): void {\n this._av.handleChatModelStart(llm, messages, runId, parentRunId, extraParams);\n }\n handleLLMEnd(output: LLMResultLike, runId: string): void {\n this._av.handleLLMEnd(output, runId);\n }\n handleLLMError(err: unknown, runId: string): void {\n this._av.handleLLMError(err, runId);\n }\n handleToolStart(tool: SerializedLike, input: string, runId: string): void {\n this._av.handleToolStart(tool, input, runId);\n }\n handleToolEnd(output: unknown, runId: string): void {\n this._av.handleToolEnd(output, runId);\n }\n handleToolError(err: unknown, runId: string): void {\n this._av.handleToolError(err, runId);\n }\n handleRetrieverStart(retriever: SerializedLike, query: string, runId: string): void {\n this._av.handleRetrieverStart(retriever, query, runId);\n }\n handleRetrieverEnd(documents: DocumentLike[], runId: string): void {\n this._av.handleRetrieverEnd(documents, runId);\n }\n handleRetrieverError(err: unknown, runId: string): void {\n this._av.handleRetrieverError(err, runId);\n }\n }\n return MorseCallbackHandlerWithBase as unknown as typeof MorseCallbackHandler;\n}\n"]}
1
+ {"version":3,"sources":["../../src/langchain/callback-handler.ts"],"names":["tokenUsage","model"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * `@morsehq-dev/sdk/langchain` — `MorseCallbackHandler` for plain LangChain\n * (chains, LLMs, tools, retrievers). Port of\n * `apps/sdk/python/src/morse_ai/adapters/langchain.py` (MHQ-482).\n *\n * Usage:\n *\n * ```ts\n * import { MorseCallbackHandler } from \"@morsehq-dev/sdk/langchain\";\n * import { runAsync } from \"@morsehq-dev/sdk\"; // or morse.run()\n *\n * const handler = new MorseCallbackHandler({ agentName: \"my-agent\" });\n * await runAsync({ agentName: \"my-agent\" }, async () => {\n * await chain.invoke(input, { callbacks: [handler] });\n * });\n * ```\n *\n * Span mapping (mirrors the Python adapter):\n * - handleChainStart / handleChainEnd / handleChainError → `type=agent`\n * - handleLLMStart / handleChatModelStart / handleLLMEnd / handleLLMError → `type=llm`\n * - handleToolStart / handleToolEnd / handleToolError → `type=tool`\n * - handleRetrieverStart / handleRetrieverEnd / handleRetrieverError (@beta)\n * → `type=retriever`\n *\n * ## Deviations from the Python adapter (see PR report for full rationale)\n *\n * 1. **No auto-trace creation.** Python's `MorseCallbackHandler` calls\n * `morse_ai.tracing.run(...)` itself when no trace is active (contextvars\n * support manually entering/exiting a context across independent callback\n * invocations). The TS SDK's trace context is `AsyncLocalStorage`-based\n * (`_internal/tracing.ts`), which only supports the `als.run(store, fn)`\n * callback shape — there is no way to open a trace and leave it open\n * across separate, unwrapped callback calls. Callers MUST wrap the\n * LangChain invocation in `morse.run()` / `runAsync()`. This mirrors the\n * constraint the existing `../langgraph/` adapter already operates under\n * (see its file-header comments) — every span helper silently no-ops\n * (returns `null`) when there is no active trace, exactly like this file.\n * 2. **No structural subclass relationship with `../langgraph/`.** The task\n * brief notes that Python's `langgraph.py::LangGraphCallbackHandler`\n * subclasses `langchain.py::MorseCallbackHandler`. `@langchain/core`'s\n * `BaseCallbackHandler` surface is identical for plain chains and for\n * LangGraph graphs (LangGraph JS is built on `@langchain/core`\n * callbacks), so structurally the two TS adapters COULD share a base.\n * But the existing `../langgraph/` files are off-limits for this task\n * (a separate, already-shipped gap) and refactoring them to extract a\n * shared base is out of scope / higher risk than the value it buys right\n * now. This adapter is therefore a structural sibling, not a subclass —\n * same conventions (span-emission via `startSpan`, `absorbErrorsSync`\n * everywhere, `metadata.adapter` tagging), independently implemented.\n * 3. **No cost computation.** Python's `on_llm_end` calls\n * `morse_ai.pricing.calculate_cost` and `merge_provider_reported_cost`.\n * Neither has a TS port yet (owned by a separate parallel MHQ-482 gap).\n * Token counts/model are still captured; `cost_usd` is left unset until\n * the pricing gap lands.\n * 4. **`type=retriever` uses a real, added `SpanType` variant** (see\n * `_internal/spans.ts`) rather than the `type=tool` +\n * `metadata.tool_kind` fallback pattern used for `hook`/`subagent` — the\n * backend already accepts `\"retriever\"` (Python's `SpanType.RETRIEVER`\n * has shipped since the Python adapter), so no fallback is needed.\n *\n * All public methods absorb internal errors (never throw into the LangChain\n * runtime) — mirrors Python's `try/except Exception: logger.debug(...)`\n * wrapping on every callback.\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport { adoptThreadId, startSpan } from \"../_internal/tracing\";\nimport { decomposeOpenAiMessages } from \"../_agent-sdk-common/context-decomposer\";\nimport type {\n BaseMessageLike,\n CallbackHandlerSurface,\n DocumentLike,\n LangChainCoreCallbacksModuleLike,\n LLMResultLike,\n SerializedLike,\n} from \"./types\";\n\n/* ------------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------------ */\n\nconst ADAPTER = \"langchain-js\" as const;\nconst HANDLER_NAME = \"morse_callback_handler\";\nconst DEFAULT_AGENT_NAME = \"langchain-agent\";\n\n// AGE-260 port: cap on the JSON-serialized size of any single input_data /\n// output_data payload. Mirrors the Python adapter's `_MAX_STATE_PAYLOAD_BYTES`.\nconst MAX_STATE_PAYLOAD_BYTES = 64 * 1024; // 64 KB JSON\n\n/* ------------------------------------------------------------------------ */\n/* Public options */\n/* ------------------------------------------------------------------------ */\n\nexport interface MorseCallbackHandlerOptions {\n /** Falls back to `\"langchain-agent\"` when unset. Only used for documentation\n * purposes on this handler instance — the actual trace's agent name is set\n * by whatever `morse.run()` / `runAsync()` call wraps the invocation. */\n agentName?: string;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Name resolution helpers */\n/* ------------------------------------------------------------------------ */\n\n/** chain/llm: prefer `id` path tail, then `name`, then `fallback`. */\nfunction resolveNameIdFirst(\n serialized: SerializedLike | null | undefined,\n fallback: string,\n): string {\n const s = serialized ?? {};\n const idPath = s.id;\n if (Array.isArray(idPath) && idPath.length > 0) {\n const last = idPath[idPath.length - 1];\n if (typeof last === \"string\" && last.length > 0) return last;\n }\n if (typeof s.name === \"string\" && s.name.length > 0) return s.name;\n return fallback;\n}\n\n/** tool: prefer `name`, then `id` path tail, then `fallback`. */\nfunction resolveNameNameFirst(\n serialized: SerializedLike | null | undefined,\n fallback: string,\n): string {\n const s = serialized ?? {};\n if (typeof s.name === \"string\" && s.name.length > 0) return s.name;\n const idPath = s.id;\n if (Array.isArray(idPath) && idPath.length > 0) {\n const last = idPath[idPath.length - 1];\n if (typeof last === \"string\" && last.length > 0) return last;\n }\n return fallback;\n}\n\n/* ------------------------------------------------------------------------ */\n/* State coercion — port of Python's `_ensure_dict` */\n/* ------------------------------------------------------------------------ */\n\nfunction utf8ByteLength(s: string): number {\n if (typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(s).length;\n // Rough fallback — good enough for a soft cap, never load-bearing for\n // correctness (only used to decide whether to truncate).\n return s.length;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const proto: unknown = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Coerce arbitrary LangChain chain/tool/retriever input or output into a\n * dict payload the wire schema requires (`SpanData.input_data` /\n * `output_data`). Port of Python's `MorseCallbackHandler._ensure_dict`:\n *\n * - `null` / `undefined` → `undefined` (legitimately absent)\n * - plain object → unchanged\n * - object with a callable `toJSON()` returning a plain object → that result\n * (JS analogue of Python's Pydantic `model_dump()` / `dict()` duck typing)\n * - other (string / number / array / class instance) → `{ value: String(x) }`\n *\n * Oversized payloads (JSON > `MAX_STATE_PAYLOAD_BYTES`) are replaced with a\n * truncation marker so the transport queue stays bounded but the dashboard\n * still shows a usable preview — never silently dropped to `undefined`.\n */\nexport function coerceStateValue(data: unknown): Record<string, unknown> | undefined {\n if (data === null || data === undefined) return undefined;\n\n let coerced: Record<string, unknown>;\n if (isPlainObject(data)) {\n coerced = data;\n } else {\n const toJSON = (data as { toJSON?: unknown }).toJSON;\n let viaToJSON: Record<string, unknown> | null = null;\n if (typeof toJSON === \"function\") {\n try {\n const result: unknown = (toJSON as () => unknown).call(data);\n if (isPlainObject(result)) viaToJSON = result;\n } catch {\n viaToJSON = null;\n }\n }\n if (viaToJSON !== null) {\n coerced = viaToJSON;\n } else if (Array.isArray(data)) {\n coerced = { value: safeStringify(data) };\n } else {\n coerced = { value: String(data) };\n }\n }\n\n let encoded: string;\n try {\n encoded = JSON.stringify(coerced) ?? \"null\";\n } catch {\n return {\n _truncated: true,\n _reason: \"unserializable\",\n value: String(coerced).slice(0, 1024),\n };\n }\n\n const byteLen = utf8ByteLength(encoded);\n if (byteLen > MAX_STATE_PAYLOAD_BYTES) {\n const preview = encoded.slice(0, Math.floor(MAX_STATE_PAYLOAD_BYTES / 2));\n return {\n _truncated: true,\n _reason: \"payload_too_large\",\n _original_size_bytes: byteLen,\n _max_bytes: MAX_STATE_PAYLOAD_BYTES,\n preview,\n };\n }\n\n return coerced;\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* LLM response extraction — port of `_extract_token_usage` / `_extract_model` */\n/* ------------------------------------------------------------------------ */\n\nexport interface TokenUsage {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n}\n\nfunction numOrUndef(v: unknown): number | undefined {\n return typeof v === \"number\" && Number.isFinite(v) ? v : undefined;\n}\n\nfunction firstGenerationMessage(\n response: LLMResultLike | null | undefined,\n): BaseMessageLike | undefined {\n const gens = response?.generations;\n if (Array.isArray(gens) && gens.length > 0 && Array.isArray(gens[0]) && gens[0]!.length > 0) {\n return gens[0]![0]!.message;\n }\n return undefined;\n}\n\n/**\n * Returns token usage across the provider shapes LangChain JS integrations\n * use in practice. Field names below are snake_case because — unlike most\n * of the JS ecosystem — `@langchain/core`'s `usage_metadata` /\n * `response_metadata` fields ARE snake_case (verified against\n * `@langchain/core/dist/messages/ai.d.ts`), matching the Python SDK 1:1.\n * `llmOutput` is a free-form provider bag; we also check the camelCase\n * `tokenUsage` key the existing `../langgraph/` adapter established.\n */\nexport function extractTokenUsage(response: LLMResultLike | null | undefined): TokenUsage {\n try {\n const msg = firstGenerationMessage(response);\n if (msg) {\n const um = msg.usage_metadata;\n if (um && (um.input_tokens !== undefined || um.output_tokens !== undefined)) {\n const details = um.input_token_details ?? {};\n const cached = details.cache_read ?? details.cache_creation;\n return {\n inputTokens: numOrUndef(um.input_tokens),\n outputTokens: numOrUndef(um.output_tokens),\n totalTokens: numOrUndef(um.total_tokens),\n cachedInputTokens: numOrUndef(cached),\n };\n }\n const tokenUsage = msg.response_metadata?.token_usage;\n if (tokenUsage) {\n return {\n inputTokens: numOrUndef(tokenUsage.prompt_tokens ?? tokenUsage.input_tokens),\n outputTokens: numOrUndef(tokenUsage.completion_tokens ?? tokenUsage.output_tokens),\n totalTokens: numOrUndef(tokenUsage.total_tokens),\n };\n }\n }\n } catch {\n // fall through to llmOutput-based extraction\n }\n\n const llmOutput = response?.llmOutput ?? {};\n const tokenUsage = (llmOutput.tokenUsage ?? llmOutput.token_usage) as\n | Record<string, unknown>\n | undefined;\n if (tokenUsage && Object.keys(tokenUsage).length > 0) {\n return {\n inputTokens: numOrUndef(\n tokenUsage.promptTokens ??\n tokenUsage.prompt_tokens ??\n tokenUsage.inputTokens ??\n tokenUsage.input_tokens,\n ),\n outputTokens: numOrUndef(\n tokenUsage.completionTokens ??\n tokenUsage.completion_tokens ??\n tokenUsage.outputTokens ??\n tokenUsage.output_tokens,\n ),\n totalTokens: numOrUndef(tokenUsage.totalTokens ?? tokenUsage.total_tokens),\n };\n }\n\n const usage = llmOutput.usage as Record<string, unknown> | undefined;\n if (usage && Object.keys(usage).length > 0) {\n return {\n inputTokens: numOrUndef(usage.input_tokens),\n outputTokens: numOrUndef(usage.output_tokens),\n totalTokens: numOrUndef(usage.total_tokens),\n cachedInputTokens: numOrUndef(usage.cache_read_input_tokens),\n };\n }\n\n return {};\n}\n\n/** Best-effort model-name extraction from an `LLMResult`. */\nexport function extractModel(response: LLMResultLike | null | undefined): string | undefined {\n try {\n const msg = firstGenerationMessage(response);\n const meta = msg?.response_metadata;\n const model = meta?.model_name ?? meta?.model;\n if (typeof model === \"string\" && model.length > 0) return model;\n } catch {\n // fall through\n }\n const llmOutput = response?.llmOutput ?? {};\n const model = llmOutput.model_name ?? llmOutput.model;\n return typeof model === \"string\" && model.length > 0 ? model : undefined;\n}\n\n/** Best-effort output-text extraction from an `LLMResult`, for `output_data.text`. */\nexport function extractOutputText(response: LLMResultLike | null | undefined): string {\n try {\n const gens = response?.generations;\n if (Array.isArray(gens) && gens.length > 0 && Array.isArray(gens[0]) && gens[0]!.length > 0) {\n const first = gens[0]![0]!;\n if (typeof first.text === \"string\" && first.text.length > 0) return first.text;\n const content = first.message?.content;\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block === \"string\") {\n parts.push(block);\n } else if (\n block &&\n typeof block === \"object\" &&\n typeof (block as Record<string, unknown>).text === \"string\"\n ) {\n parts.push((block as Record<string, unknown>).text as string);\n }\n }\n return parts.join(\"\\n\");\n }\n }\n } catch {\n // fall through\n }\n return \"\";\n}\n\n/* ------------------------------------------------------------------------ */\n/* MorseCallbackHandler */\n/* ------------------------------------------------------------------------ */\n\nexport class MorseCallbackHandler implements CallbackHandlerSurface {\n /** Required by LangChain's `BaseCallbackHandler` interface. */\n public readonly name: string = HANDLER_NAME;\n\n public readonly agentName: string;\n\n /** Map of `runId` → open `SpanHandle`, spanning chain/llm/tool/retriever\n * spans together (mirrors Python's single `_span_stack` dict). */\n private readonly spanStack: Map<string, SpanHandle> = new Map();\n\n constructor(options?: MorseCallbackHandlerOptions) {\n this.agentName =\n options?.agentName && options.agentName.length > 0 ? options.agentName : DEFAULT_AGENT_NAME;\n }\n\n /* ---------------------------------------------------------------------- */\n /* Internal helpers */\n /* ---------------------------------------------------------------------- */\n\n private openSpan(\n runId: string,\n name: string,\n type: \"agent\" | \"llm\" | \"tool\" | \"retriever\",\n inputData?: unknown,\n extraMetadata?: Record<string, unknown>,\n ): SpanHandle | null {\n if (typeof runId !== \"string\" || runId.length === 0) return null;\n const metadata: Record<string, unknown> = { ...(extraMetadata ?? {}), adapter: ADAPTER };\n const handle = startSpan({ name, type, metadata });\n if (handle === null) return null;\n const wrapped = coerceStateValue(inputData);\n if (wrapped !== undefined) handle.span.input_data = wrapped;\n this.spanStack.set(runId, handle);\n return handle;\n }\n\n private closeSpan(runId: string, outputData?: unknown, error?: unknown): void {\n const handle = this.spanStack.get(runId);\n if (handle === undefined) return;\n this.spanStack.delete(runId);\n if (outputData !== undefined) {\n const wrapped = coerceStateValue(outputData);\n if (wrapped !== undefined) handle.span.output_data = wrapped;\n }\n if (error !== undefined) {\n handle.end(error);\n } else {\n handle.end();\n }\n }\n\n /* ---------------------------------------------------------------------- */\n /* Chain callbacks */\n /* ---------------------------------------------------------------------- */\n\n // NOTE: trailing `runType`/`runName` parameters from\n // `CallbackHandlerSurface` are intentionally omitted below (not just\n // underscore-prefixed) — this adapter doesn't use them, and TypeScript\n // structural typing allows an implementing function to declare fewer\n // parameters than its interface signature. Declaring-then-ignoring\n // trailing unused params trips `@typescript-eslint/no-unused-vars`'s\n // default `args: \"after-used\"` mode (only params before the last *used*\n // one are exempt); omitting them entirely is both lint-clean and reads\n // as \"these truly aren't consulted.\" `metadata` IS consulted as of\n // MHQ-1029, so it and the params before it are declared.\n\n handleChainStart(\n chain: SerializedLike,\n inputs: Record<string, unknown>,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n metadata?: Record<string, unknown>,\n ): void {\n _handleChainStart(this, chain, inputs, runId, metadata);\n }\n\n handleChainEnd(outputs: Record<string, unknown>, runId: string): void {\n _handleChainEnd(this, outputs, runId);\n }\n\n handleChainError(err: unknown, runId: string): void {\n _handleChainError(this, err, runId);\n }\n\n /* ---------------------------------------------------------------------- */\n /* LLM callbacks */\n /* ---------------------------------------------------------------------- */\n\n handleLLMStart(\n llm: SerializedLike,\n prompts: string[],\n runId: string,\n _parentRunId?: string,\n extraParams?: Record<string, unknown>,\n ): void {\n _handleLLMStart(this, llm, prompts, runId, extraParams);\n }\n\n handleChatModelStart(\n llm: SerializedLike,\n messages: BaseMessageLike[][],\n runId: string,\n _parentRunId?: string,\n extraParams?: Record<string, unknown>,\n ): void {\n // Chat models ARE LLMs — same span type as handleLLMStart (mirrors\n // Python's LangGraph override; the plain-LangChain adapter treats both\n // identically since it has no chat-model-specific behavior to add).\n // MHQ-750: also decompose the flattened messages (+ bound tools, if\n // any) into context_segments — mirrors `../langgraph/`'s\n // handleChatModelStart wiring via the same shared decomposer.\n _handleChatModelStart(this, llm, messages, runId, extraParams);\n }\n\n handleLLMEnd(output: LLMResultLike, runId: string): void {\n _handleLLMEnd(this, output, runId);\n }\n\n handleLLMError(err: unknown, runId: string): void {\n _handleLLMError(this, err, runId);\n }\n\n /* ---------------------------------------------------------------------- */\n /* Tool callbacks */\n /* ---------------------------------------------------------------------- */\n\n handleToolStart(tool: SerializedLike, input: string, runId: string): void {\n _handleToolStart(this, tool, input, runId);\n }\n\n handleToolEnd(output: unknown, runId: string): void {\n _handleToolEnd(this, output, runId);\n }\n\n handleToolError(err: unknown, runId: string): void {\n _handleToolError(this, err, runId);\n }\n\n /* ---------------------------------------------------------------------- */\n /* Retriever callbacks (@beta — subject to change before SDK v1.0) */\n /* ---------------------------------------------------------------------- */\n\n handleRetrieverStart(retriever: SerializedLike, query: string, runId: string): void {\n _handleRetrieverStart(this, retriever, query, runId);\n }\n\n handleRetrieverEnd(documents: DocumentLike[], runId: string): void {\n _handleRetrieverEnd(this, documents, runId);\n }\n\n handleRetrieverError(err: unknown, runId: string): void {\n _handleRetrieverError(this, err, runId);\n }\n\n /* ---------------------------------------------------------------------- */\n /* Internal accessors used by the absorbErrorsSync-wrapped impls */\n /* ---------------------------------------------------------------------- */\n\n /** @internal */\n _openSpan(\n runId: string,\n name: string,\n type: \"agent\" | \"llm\" | \"tool\" | \"retriever\",\n inputData?: unknown,\n extraMetadata?: Record<string, unknown>,\n ): SpanHandle | null {\n return this.openSpan(runId, name, type, inputData, extraMetadata);\n }\n\n /** @internal */\n _closeSpan(runId: string, outputData?: unknown, error?: unknown): void {\n this.closeSpan(runId, outputData, error);\n }\n\n /** @internal */\n _getSpan(runId: string): SpanHandle | undefined {\n return this.spanStack.get(runId);\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Implementation bodies (wrapped in absorbErrorsSync) */\n/* ------------------------------------------------------------------------ */\n\nconst _handleChainStart = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n chain: SerializedLike | null | undefined,\n inputs: Record<string, unknown>,\n runId: string,\n metadata?: Record<string, unknown>,\n ): void => {\n const chainName = resolveNameIdFirst(chain, \"chain\");\n self._openSpan(runId, chainName, \"agent\", inputs);\n // MHQ-1029: LangGraph copies `configurable.thread_id` onto the run\n // metadata, which is the only place a checkpointed conversation's\n // identity reaches a callback handler.\n if (metadata) adoptThreadId(metadata.thread_id ?? metadata.threadId);\n },\n { fingerprint: \"morse.langchain.handleChainStart\" },\n) as (\n self: MorseCallbackHandler,\n chain: SerializedLike | null | undefined,\n inputs: Record<string, unknown>,\n runId: string,\n metadata?: Record<string, unknown>,\n) => void;\n\nconst _handleChainEnd = absorbErrorsSync(\n (self: MorseCallbackHandler, outputs: Record<string, unknown>, runId: string): void => {\n self._closeSpan(runId, outputs);\n },\n { fingerprint: \"morse.langchain.handleChainEnd\" },\n) as (self: MorseCallbackHandler, outputs: Record<string, unknown>, runId: string) => void;\n\nconst _handleChainError = absorbErrorsSync(\n (self: MorseCallbackHandler, err: unknown, runId: string): void => {\n self._closeSpan(runId, undefined, err ?? new Error(\"langchain chain error\"));\n },\n { fingerprint: \"morse.langchain.handleChainError\" },\n) as (self: MorseCallbackHandler, err: unknown, runId: string) => void;\n\nconst _handleLLMStart = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n llm: SerializedLike | null | undefined,\n prompts: string[],\n runId: string,\n extraParams: Record<string, unknown> | undefined,\n ): void => {\n const llmName = resolveNameIdFirst(llm, \"llm\");\n const invocationParams = extraParams?.invocation_params as Record<string, unknown> | undefined;\n const modelName =\n (typeof invocationParams?.model_name === \"string\"\n ? invocationParams.model_name\n : undefined) ??\n (typeof invocationParams?.model === \"string\" ? invocationParams.model : undefined);\n const handle = self._openSpan(\n runId,\n llmName,\n \"llm\",\n prompts && prompts.length > 0 ? { prompts } : undefined,\n );\n if (handle !== null && modelName) {\n handle.span.model = modelName;\n }\n },\n { fingerprint: \"morse.langchain.handleLLMStart\" },\n) as (\n self: MorseCallbackHandler,\n llm: SerializedLike | null | undefined,\n prompts: string[],\n runId: string,\n extraParams: Record<string, unknown> | undefined,\n) => void;\n\n/**\n * `@langchain/core` passes `handleChatModelStart` a nested\n * `BaseMessage[][]` — one array per \"prompt\" in a batch call. The\n * decomposer expects a flat list, so flatten one level (mirrors\n * `../langgraph/llm-and-tool-callbacks.ts`'s `flattenMessages`, itself a\n * port of Python's `_flatten_messages` in `adapters/langgraph.py`).\n */\nfunction flattenMessages(messages: BaseMessageLike[][] | undefined): BaseMessageLike[] {\n if (!Array.isArray(messages)) return [];\n const flat: BaseMessageLike[] = [];\n for (const item of messages) {\n if (Array.isArray(item)) {\n flat.push(...item);\n } else if (item !== undefined && item !== null) {\n flat.push(item as unknown as BaseMessageLike);\n }\n }\n return flat;\n}\n\n/** Extract the bound `tools` array from `handleChatModelStart`'s `extraParams.invocation_params`. */\nfunction toolsFromExtra(extra: Record<string, unknown> | undefined): unknown {\n const invocationParams = extra?.invocation_params as Record<string, unknown> | undefined;\n return invocationParams?.tools;\n}\n\nconst _handleChatModelStart = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n llm: SerializedLike | null | undefined,\n messages: BaseMessageLike[][],\n runId: string,\n extraParams: Record<string, unknown> | undefined,\n ): void => {\n const llmName = resolveNameIdFirst(llm, \"llm\");\n const invocationParams = extraParams?.invocation_params as Record<string, unknown> | undefined;\n const modelName =\n (typeof invocationParams?.model_name === \"string\"\n ? invocationParams.model_name\n : undefined) ??\n (typeof invocationParams?.model === \"string\" ? invocationParams.model : undefined);\n const flatMessages = flattenMessages(messages);\n const contextSegments = decomposeOpenAiMessages(flatMessages, toolsFromExtra(extraParams));\n const handle = self._openSpan(runId, llmName, \"llm\", undefined);\n if (handle !== null) {\n if (modelName) handle.span.model = modelName;\n if (contextSegments.length > 0) handle.span.context_segments = contextSegments;\n }\n },\n { fingerprint: \"morse.langchain.handleChatModelStart\" },\n) as (\n self: MorseCallbackHandler,\n llm: SerializedLike | null | undefined,\n messages: BaseMessageLike[][],\n runId: string,\n extraParams: Record<string, unknown> | undefined,\n) => void;\n\nconst _handleLLMEnd = absorbErrorsSync(\n (self: MorseCallbackHandler, response: LLMResultLike, runId: string): void => {\n const handle = self._getSpan(runId);\n const outputText = extractOutputText(response);\n\n if (handle !== undefined) {\n const usage = extractTokenUsage(response);\n if (usage.inputTokens !== undefined || usage.outputTokens !== undefined) {\n handle.span.input_tokens = usage.inputTokens;\n handle.span.output_tokens = usage.outputTokens;\n handle.span.total_tokens =\n usage.totalTokens !== undefined\n ? usage.totalTokens\n : (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0) || undefined;\n if (usage.cachedInputTokens) {\n handle.span.cached_input_tokens = usage.cachedInputTokens;\n }\n }\n // Response model wins over the invocation-param model set in\n // handleLLMStart — the response carries the fully-resolved version\n // string. Mirrors Python's on_llm_end behavior.\n const resolvedModel = extractModel(response);\n if (resolvedModel) {\n handle.span.model = resolvedModel;\n }\n // NOTE: cost computation (calculate_cost / merge_provider_reported_cost\n // in the Python adapter) intentionally omitted — no TS pricing module\n // exists yet (separate MHQ-482 gap). See file-header deviation notes.\n }\n\n self._closeSpan(runId, { text: outputText });\n },\n { fingerprint: \"morse.langchain.handleLLMEnd\" },\n) as (self: MorseCallbackHandler, response: LLMResultLike, runId: string) => void;\n\nconst _handleLLMError = absorbErrorsSync(\n (self: MorseCallbackHandler, err: unknown, runId: string): void => {\n self._closeSpan(runId, undefined, err ?? new Error(\"langchain llm error\"));\n },\n { fingerprint: \"morse.langchain.handleLLMError\" },\n) as (self: MorseCallbackHandler, err: unknown, runId: string) => void;\n\nconst _handleToolStart = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n tool: SerializedLike | null | undefined,\n input: string,\n runId: string,\n ): void => {\n const toolName = resolveNameNameFirst(tool, \"tool\");\n self._openSpan(runId, toolName, \"tool\", { input });\n },\n { fingerprint: \"morse.langchain.handleToolStart\" },\n) as (\n self: MorseCallbackHandler,\n tool: SerializedLike | null | undefined,\n input: string,\n runId: string,\n) => void;\n\nconst _handleToolEnd = absorbErrorsSync(\n (self: MorseCallbackHandler, output: unknown, runId: string): void => {\n self._closeSpan(runId, { output: String(output) });\n },\n { fingerprint: \"morse.langchain.handleToolEnd\" },\n) as (self: MorseCallbackHandler, output: unknown, runId: string) => void;\n\nconst _handleToolError = absorbErrorsSync(\n (self: MorseCallbackHandler, err: unknown, runId: string): void => {\n self._closeSpan(runId, undefined, err ?? new Error(\"langchain tool error\"));\n },\n { fingerprint: \"morse.langchain.handleToolError\" },\n) as (self: MorseCallbackHandler, err: unknown, runId: string) => void;\n\nconst _handleRetrieverStart = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n retriever: SerializedLike | null | undefined,\n query: string,\n runId: string,\n ): void => {\n const idPath = retriever?.id;\n const retrieverName =\n (Array.isArray(idPath) && idPath.length > 0 ? idPath[idPath.length - 1] : undefined) ||\n \"retriever\";\n self._openSpan(runId, String(retrieverName), \"retriever\", { query });\n },\n { fingerprint: \"morse.langchain.handleRetrieverStart\" },\n) as (\n self: MorseCallbackHandler,\n retriever: SerializedLike | null | undefined,\n query: string,\n runId: string,\n) => void;\n\nconst _handleRetrieverEnd = absorbErrorsSync(\n (self: MorseCallbackHandler, documents: DocumentLike[], runId: string): void => {\n const docsOut: Array<{ content_preview: string; source?: string; score?: number }> = [];\n for (const doc of documents ?? []) {\n if (doc && typeof doc === \"object\" && typeof doc.pageContent === \"string\") {\n const entry: { content_preview: string; source?: string; score?: number } = {\n content_preview: doc.pageContent.slice(0, 200),\n };\n const meta = doc.metadata;\n if (meta) {\n if (typeof meta.source === \"string\") entry.source = meta.source;\n const score = meta.score ?? meta.relevance_score;\n if (typeof score === \"number\") entry.score = score;\n }\n docsOut.push(entry);\n } else if (doc && typeof doc === \"object\") {\n docsOut.push(\n doc as unknown as { content_preview: string; source?: string; score?: number },\n );\n }\n }\n self._closeSpan(runId, {\n docs_count: documents?.length ?? 0,\n top_score: docsOut.length > 0 ? (docsOut[0]?.score ?? null) : null,\n sources: docsOut\n .map((d) => d.source)\n .filter((s): s is string => typeof s === \"string\" && s.length > 0),\n documents: docsOut.slice(0, 10),\n });\n },\n { fingerprint: \"morse.langchain.handleRetrieverEnd\" },\n) as (self: MorseCallbackHandler, documents: DocumentLike[], runId: string) => void;\n\nconst _handleRetrieverError = absorbErrorsSync(\n (self: MorseCallbackHandler, err: unknown, runId: string): void => {\n self._closeSpan(runId, undefined, err ?? new Error(\"langchain retriever error\"));\n },\n { fingerprint: \"morse.langchain.handleRetrieverError\" },\n) as (self: MorseCallbackHandler, err: unknown, runId: string) => void;\n\n/* ------------------------------------------------------------------------ */\n/* Optional peer-dep: real BaseCallbackHandler */\n/* ------------------------------------------------------------------------ */\n\nasync function loadLangChainCoreCallbacks(): Promise<LangChainCoreCallbacksModuleLike | null> {\n try {\n // Function-eval'd dynamic import keeps bundlers from trying to resolve\n // `@langchain/core/callbacks/base` at build time when the dep isn't installed.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mod = (await (Function(\"m\", \"return import(m)\") as any)(\n \"@langchain/core/callbacks/base\",\n )) as LangChainCoreCallbacksModuleLike;\n return mod ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Best-effort: if `@langchain/core/callbacks/base` is installed at runtime,\n * return a `MorseCallbackHandler`-shaped class whose prototype chain\n * includes the real `BaseCallbackHandler` (for users relying on\n * `instanceof BaseCallbackHandler` checks). Otherwise return the duck-typed\n * `MorseCallbackHandler` defined above. Mirrors `../langgraph/callback-handler.ts`'s\n * `getCallbackHandlerClass()`.\n */\nexport async function getCallbackHandlerClass(): Promise<typeof MorseCallbackHandler> {\n const mod = await loadLangChainCoreCallbacks();\n const Base = mod?.BaseCallbackHandler;\n if (!Base) return MorseCallbackHandler;\n\n class MorseCallbackHandlerWithBase extends (Base as unknown as {\n new (...args: unknown[]): object;\n }) {\n public readonly name: string = HANDLER_NAME;\n private readonly _av: MorseCallbackHandler;\n constructor(options?: MorseCallbackHandlerOptions) {\n super();\n this._av = new MorseCallbackHandler(options);\n }\n handleChainStart(chain: SerializedLike, inputs: Record<string, unknown>, runId: string): void {\n this._av.handleChainStart(chain, inputs, runId);\n }\n handleChainEnd(outputs: Record<string, unknown>, runId: string): void {\n this._av.handleChainEnd(outputs, runId);\n }\n handleChainError(err: unknown, runId: string): void {\n this._av.handleChainError(err, runId);\n }\n handleLLMStart(\n llm: SerializedLike,\n prompts: string[],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n ): void {\n this._av.handleLLMStart(llm, prompts, runId, parentRunId, extraParams);\n }\n handleChatModelStart(\n llm: SerializedLike,\n messages: BaseMessageLike[][],\n runId: string,\n parentRunId?: string,\n extraParams?: Record<string, unknown>,\n ): void {\n this._av.handleChatModelStart(llm, messages, runId, parentRunId, extraParams);\n }\n handleLLMEnd(output: LLMResultLike, runId: string): void {\n this._av.handleLLMEnd(output, runId);\n }\n handleLLMError(err: unknown, runId: string): void {\n this._av.handleLLMError(err, runId);\n }\n handleToolStart(tool: SerializedLike, input: string, runId: string): void {\n this._av.handleToolStart(tool, input, runId);\n }\n handleToolEnd(output: unknown, runId: string): void {\n this._av.handleToolEnd(output, runId);\n }\n handleToolError(err: unknown, runId: string): void {\n this._av.handleToolError(err, runId);\n }\n handleRetrieverStart(retriever: SerializedLike, query: string, runId: string): void {\n this._av.handleRetrieverStart(retriever, query, runId);\n }\n handleRetrieverEnd(documents: DocumentLike[], runId: string): void {\n this._av.handleRetrieverEnd(documents, runId);\n }\n handleRetrieverError(err: unknown, runId: string): void {\n this._av.handleRetrieverError(err, runId);\n }\n }\n return MorseCallbackHandlerWithBase as unknown as typeof MorseCallbackHandler;\n}\n"]}
@@ -1,14 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var chunkLPLL2OXI_cjs = require('../chunk-LPLL2OXI.cjs');
4
- var chunkNMARCV3R_cjs = require('../chunk-NMARCV3R.cjs');
5
- var chunkGTPKPUAV_cjs = require('../chunk-GTPKPUAV.cjs');
6
- var chunk7HYFOHM3_cjs = require('../chunk-7HYFOHM3.cjs');
3
+ var chunkCOZFARLL_cjs = require('../chunk-COZFARLL.cjs');
4
+ var chunkWG4H5JC6_cjs = require('../chunk-WG4H5JC6.cjs');
5
+ var chunkDXTNU2KT_cjs = require('../chunk-DXTNU2KT.cjs');
6
+ var chunkESJJXXB6_cjs = require('../chunk-ESJJXXB6.cjs');
7
7
  var chunkKBWPNIH4_cjs = require('../chunk-KBWPNIH4.cjs');
8
8
  var chunkHICEJ4LV_cjs = require('../chunk-HICEJ4LV.cjs');
9
- require('../chunk-KMBKZLXH.cjs');
9
+ var chunk7DALGJL2_cjs = require('../chunk-7DALGJL2.cjs');
10
10
 
11
11
  // src/langgraph/callback-handler.ts
12
+ chunk7DALGJL2_cjs.init_tracing();
12
13
  var ADAPTER = "langgraph-js";
13
14
  var HANDLER_NAME = "morse_callback_handler";
14
15
  var DEFAULT_AGENT_NAME_FALLBACK = "langgraph-agent";
@@ -21,8 +22,8 @@ var MorseCallbackHandler = class {
21
22
  constructor(options) {
22
23
  this.defaultAgentName = options?.defaultAgentName;
23
24
  }
24
- handleChainStart(chain, _inputs, runId, _parentRunId, _tags, _metadata, _runType, runName) {
25
- _handleChainStartImpl(this, chain, runId, runName);
25
+ handleChainStart(chain, _inputs, runId, _parentRunId, _tags, metadata, _runType, runName) {
26
+ _handleChainStartImpl(this, chain, runId, runName, metadata);
26
27
  }
27
28
  handleChainEnd(_outputs, runId, parentRunId) {
28
29
  _handleChainEndImpl(this, runId);
@@ -49,24 +50,25 @@ var MorseCallbackHandler = class {
49
50
  return DEFAULT_AGENT_NAME_FALLBACK;
50
51
  }
51
52
  };
52
- var _handleChainStartImpl = chunk7HYFOHM3_cjs.absorbErrorsSync(
53
- (self, chain, runId, runName) => {
53
+ var _handleChainStartImpl = chunkESJJXXB6_cjs.absorbErrorsSync(
54
+ (self, chain, runId, runName, metadata) => {
54
55
  if (typeof runId !== "string" || runId.length === 0) return;
55
56
  if (self._takeSpan(runId)) ;
56
57
  const agentName = self._resolveAgentName(chain, runName);
57
- const handle = chunkGTPKPUAV_cjs.emitAgentSpan({ adapter: ADAPTER, agentName });
58
+ const handle = chunkDXTNU2KT_cjs.emitAgentSpan({ adapter: ADAPTER, agentName });
58
59
  if (handle) self._setSpan(runId, handle);
60
+ if (metadata) chunk7DALGJL2_cjs.adoptThreadId(metadata.thread_id ?? metadata.threadId);
59
61
  },
60
62
  { fingerprint: "morse.langgraph.handleChainStart" }
61
63
  );
62
- var _handleChainEndImpl = chunk7HYFOHM3_cjs.absorbErrorsSync(
64
+ var _handleChainEndImpl = chunkESJJXXB6_cjs.absorbErrorsSync(
63
65
  (self, runId) => {
64
66
  const handle = self._takeSpan(runId);
65
67
  if (handle) handle.end();
66
68
  },
67
69
  { fingerprint: "morse.langgraph.handleChainEnd" }
68
70
  );
69
- var _handleChainErrorImpl = chunk7HYFOHM3_cjs.absorbErrorsSync(
71
+ var _handleChainErrorImpl = chunkESJJXXB6_cjs.absorbErrorsSync(
70
72
  (self, err, runId) => {
71
73
  const handle = self._takeSpan(runId);
72
74
  if (handle) handle.end(err ?? new Error("langgraph chain error"));
@@ -205,12 +207,12 @@ function createLlmAndToolHandlers(state, options = {}) {
205
207
  const toolInputOpts = options.toolInputMaxBytes ? { maxBytes: options.toolInputMaxBytes } : void 0;
206
208
  const toolOutputOpts = options.toolOutputMaxBytes ? { maxBytes: options.toolOutputMaxBytes } : void 0;
207
209
  const _handleLLMStart = (llm, prompts, runId, _parentRunId, extraParams) => {
208
- chunkLPLL2OXI_cjs.setActiveFramework(FRAMEWORK);
209
- const handle = chunkGTPKPUAV_cjs.emitLlmSpan({
210
+ chunkCOZFARLL_cjs.setActiveFramework(FRAMEWORK);
211
+ const handle = chunkDXTNU2KT_cjs.emitLlmSpan({
210
212
  adapter: ADAPTER2,
211
213
  model: llmModelOf(llm, extraParams),
212
214
  provider: extractProvider(llm?.id),
213
- inputData: chunkLPLL2OXI_cjs.capturePrompts(prompts)
215
+ inputData: chunkCOZFARLL_cjs.capturePrompts(prompts)
214
216
  });
215
217
  if (handle !== null) {
216
218
  state.llmSpans.set(runId, handle);
@@ -219,13 +221,13 @@ function createLlmAndToolHandlers(state, options = {}) {
219
221
  const _handleChatModelStart = (llm, messages, runId, _parentRunId, extraParams) => {
220
222
  const flatMessages = flattenMessages(messages);
221
223
  const contextSegments = chunkHICEJ4LV_cjs.decomposeOpenAiMessages(flatMessages, toolsFromExtra(extraParams));
222
- chunkLPLL2OXI_cjs.setActiveFramework(FRAMEWORK);
223
- const handle = chunkGTPKPUAV_cjs.emitLlmSpan({
224
+ chunkCOZFARLL_cjs.setActiveFramework(FRAMEWORK);
225
+ const handle = chunkDXTNU2KT_cjs.emitLlmSpan({
224
226
  adapter: ADAPTER2,
225
227
  model: llmModelOf(llm, extraParams),
226
228
  provider: extractProvider(llm?.id),
227
229
  contextSegments: contextSegments.length > 0 ? contextSegments : void 0,
228
- inputData: chunkLPLL2OXI_cjs.captureLangChainMessages(flatMessages)
230
+ inputData: chunkCOZFARLL_cjs.captureLangChainMessages(flatMessages)
229
231
  });
230
232
  if (handle !== null) {
231
233
  state.llmSpans.set(runId, handle);
@@ -234,7 +236,7 @@ function createLlmAndToolHandlers(state, options = {}) {
234
236
  const _handleLLMEnd = (output, runId) => {
235
237
  popAndEnd(state.llmSpans, runId, void 0, (handle) => {
236
238
  applyTokenUsage(handle, output);
237
- const outputText = chunkLPLL2OXI_cjs.extractLangChainOutputText(output?.generations);
239
+ const outputText = chunkCOZFARLL_cjs.extractLangChainOutputText(output?.generations);
238
240
  if (outputText !== void 0) handle.span.output_data = { content: outputText };
239
241
  });
240
242
  };
@@ -242,10 +244,10 @@ function createLlmAndToolHandlers(state, options = {}) {
242
244
  popAndEnd(state.llmSpans, runId, err);
243
245
  };
244
246
  const _handleToolStart = (tool, input, runId) => {
245
- const handle = chunkGTPKPUAV_cjs.emitToolSpan({
247
+ const handle = chunkDXTNU2KT_cjs.emitToolSpan({
246
248
  adapter: ADAPTER2,
247
249
  toolName: toolNameOf(tool),
248
- inputSummary: chunkNMARCV3R_cjs.summarizeToolInput(input, toolInputOpts)
250
+ inputSummary: chunkWG4H5JC6_cjs.summarizeToolInput(input, toolInputOpts)
249
251
  });
250
252
  if (handle !== null) {
251
253
  state.toolSpans.set(runId, handle);
@@ -254,7 +256,7 @@ function createLlmAndToolHandlers(state, options = {}) {
254
256
  const _handleToolEnd = (output, runId) => {
255
257
  popAndEnd(state.toolSpans, runId, void 0, (handle) => {
256
258
  const md = handle.span.metadata ??= {};
257
- md.tool_output_summary = chunkNMARCV3R_cjs.summarizeToolOutput(output, toolOutputOpts);
259
+ md.tool_output_summary = chunkWG4H5JC6_cjs.summarizeToolOutput(output, toolOutputOpts);
258
260
  md.success = true;
259
261
  });
260
262
  };
@@ -266,15 +268,15 @@ function createLlmAndToolHandlers(state, options = {}) {
266
268
  };
267
269
  const fp = "morse.adapters.langgraph.llm-and-tool";
268
270
  return {
269
- handleLLMStart: chunk7HYFOHM3_cjs.absorbErrorsSync(_handleLLMStart, { fingerprint: `${fp}.handleLLMStart` }),
270
- handleChatModelStart: chunk7HYFOHM3_cjs.absorbErrorsSync(_handleChatModelStart, {
271
+ handleLLMStart: chunkESJJXXB6_cjs.absorbErrorsSync(_handleLLMStart, { fingerprint: `${fp}.handleLLMStart` }),
272
+ handleChatModelStart: chunkESJJXXB6_cjs.absorbErrorsSync(_handleChatModelStart, {
271
273
  fingerprint: `${fp}.handleChatModelStart`
272
274
  }),
273
- handleLLMEnd: chunk7HYFOHM3_cjs.absorbErrorsSync(_handleLLMEnd, { fingerprint: `${fp}.handleLLMEnd` }),
274
- handleLLMError: chunk7HYFOHM3_cjs.absorbErrorsSync(_handleLLMError, { fingerprint: `${fp}.handleLLMError` }),
275
- handleToolStart: chunk7HYFOHM3_cjs.absorbErrorsSync(_handleToolStart, { fingerprint: `${fp}.handleToolStart` }),
276
- handleToolEnd: chunk7HYFOHM3_cjs.absorbErrorsSync(_handleToolEnd, { fingerprint: `${fp}.handleToolEnd` }),
277
- handleToolError: chunk7HYFOHM3_cjs.absorbErrorsSync(_handleToolError, { fingerprint: `${fp}.handleToolError` })
275
+ handleLLMEnd: chunkESJJXXB6_cjs.absorbErrorsSync(_handleLLMEnd, { fingerprint: `${fp}.handleLLMEnd` }),
276
+ handleLLMError: chunkESJJXXB6_cjs.absorbErrorsSync(_handleLLMError, { fingerprint: `${fp}.handleLLMError` }),
277
+ handleToolStart: chunkESJJXXB6_cjs.absorbErrorsSync(_handleToolStart, { fingerprint: `${fp}.handleToolStart` }),
278
+ handleToolEnd: chunkESJJXXB6_cjs.absorbErrorsSync(_handleToolEnd, { fingerprint: `${fp}.handleToolEnd` }),
279
+ handleToolError: chunkESJJXXB6_cjs.absorbErrorsSync(_handleToolError, { fingerprint: `${fp}.handleToolError` })
278
280
  };
279
281
  }
280
282
 
@@ -282,7 +284,7 @@ function createLlmAndToolHandlers(state, options = {}) {
282
284
  var ADAPTER_FINGERPRINT = "langgraph.streaming";
283
285
  function createStreamingHandlers(state, options) {
284
286
  const trackStreamingTokens = options?.trackStreamingTokens ?? true;
285
- const handleLLMNewToken = chunk7HYFOHM3_cjs.absorbErrorsSync(
287
+ const handleLLMNewToken = chunkESJJXXB6_cjs.absorbErrorsSync(
286
288
  (_token, _idx, runId) => {
287
289
  if (!trackStreamingTokens) return;
288
290
  const handle = state.llmSpans.get(runId);