@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/langgraph/callback-handler.ts","../../../src/langgraph/llm-and-tool-callbacks.ts","../../../src/langgraph/streaming-and-checkpoint.ts","../../../src/langgraph/index.ts"],"names":["ADAPTER","MorseCallbackHandler"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * `@morsehq-dev/sdk/langgraph` — `MorseCallbackHandler` (W2-L.1).\n *\n * The handler is registered by LangGraph users via:\n *\n * ```ts\n * import { MorseCallbackHandler } from \"@morsehq-dev/sdk/langgraph\";\n * await app.invoke(input, { callbacks: [new MorseCallbackHandler()] });\n * ```\n *\n * LangGraph type-checks handlers structurally (by method presence on the\n * instance), not via `instanceof BaseCallbackHandler`. We therefore:\n *\n * 1. Always export a duck-typed class implementing `CallbackHandlerSurface`\n * — works without `@langchain/core` installed.\n * 2. Provide `getCallbackHandlerClass()` for users who rely on\n * `instanceof BaseCallbackHandler` — it dynamically loads\n * `@langchain/core/callbacks/base` (optional peer dep) and returns a\n * subclass whose prototype chain includes the real base class.\n *\n * Scope of THIS file (W2-L.1): chain spans only. `handleChainStart` opens\n * an `agent` span (the LangGraph chain IS the agent run); `handleChainEnd`\n * / `handleChainError` closes it. Nested chains nest via the per-runId\n * span map — LangGraph guarantees well-ordered start/end pairs so the\n * tracing-state span stack handles `parent_span_id` linkage for us.\n *\n * `handleLLMStart/End`, `handleToolStart/End`, and streaming callbacks\n * are implemented in W2-L.2 / W2-L.3 as separate methods on the same\n * class (composed in Wave 3-L).\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport { emitAgentSpan } from \"../_agent-sdk-common/span-emitter\";\nimport type {\n CallbackHandlerSurface,\n LangChainCoreCallbacksModuleLike,\n SerializedLike,\n} from \"./types\";\n\n/* ------------------------------------------------------------------------ */\n/* Public surface */\n/* ------------------------------------------------------------------------ */\n\nexport interface MorseCallbackHandlerOptions {\n /**\n * Override the agent name on the outer chain span. Falls back, in order,\n * to: `runName` (LangGraph-supplied per-invocation name), `chain.name`\n * (the serialized class name), then `\"langgraph-agent\"`.\n */\n defaultAgentName?: string;\n}\n\nconst ADAPTER = \"langgraph-js\";\nconst HANDLER_NAME = \"morse_callback_handler\";\nconst DEFAULT_AGENT_NAME_FALLBACK = \"langgraph-agent\";\n\n/**\n * Duck-typed LangGraph `BaseCallbackHandler`. Implements `CallbackHandlerSurface`\n * with chain-start / chain-end / chain-error wired to the Morse trace.\n *\n * LangGraph routes callbacks to instance methods by name; it does NOT require\n * an `instanceof` check against the real `BaseCallbackHandler`. Users who\n * need that (rare; `instanceof` checks in custom middleware) should obtain\n * the class via `getCallbackHandlerClass()` instead.\n */\nexport class MorseCallbackHandler implements CallbackHandlerSurface {\n /** Required by LangGraph's `BaseCallbackHandler` interface. */\n public readonly name: string = HANDLER_NAME;\n\n private readonly defaultAgentName: string | undefined;\n\n /** Open chain spans, keyed by LangGraph `runId`. */\n private readonly chainSpans: Map<string, SpanHandle> = new Map();\n\n constructor(options?: MorseCallbackHandlerOptions) {\n this.defaultAgentName = options?.defaultAgentName;\n }\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 _runType?: string,\n runName?: string,\n ): void {\n _handleChainStartImpl(this, chain, runId, runName);\n }\n\n handleChainEnd(_outputs: Record<string, unknown>, runId: string, parentRunId?: string): void {\n void parentRunId;\n _handleChainEndImpl(this, runId);\n }\n\n handleChainError(err: unknown, runId: string, parentRunId?: string): void {\n void parentRunId;\n _handleChainErrorImpl(this, err, runId);\n }\n\n /* ------ Internal accessors used by the absorbErrorsSync-wrapped impls ----- */\n\n /** @internal */\n _setSpan(runId: string, handle: SpanHandle): void {\n this.chainSpans.set(runId, handle);\n }\n\n /** @internal */\n _takeSpan(runId: string): SpanHandle | undefined {\n const handle = this.chainSpans.get(runId);\n if (handle) this.chainSpans.delete(runId);\n return handle;\n }\n\n /** @internal */\n _resolveAgentName(chain: SerializedLike | undefined, runName: string | undefined): string {\n if (typeof runName === \"string\" && runName.length > 0) return runName;\n if (chain && typeof chain.name === \"string\" && chain.name.length > 0) return chain.name;\n if (this.defaultAgentName && this.defaultAgentName.length > 0) return this.defaultAgentName;\n return DEFAULT_AGENT_NAME_FALLBACK;\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Implementation bodies (wrapped in absorbErrorsSync) */\n/* ------------------------------------------------------------------------ */\n\nconst _handleChainStartImpl: (\n self: MorseCallbackHandler,\n chain: SerializedLike | undefined,\n runId: string,\n runName: string | undefined,\n) => void = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n chain: SerializedLike | undefined,\n runId: string,\n runName: string | undefined,\n ) => {\n if (typeof runId !== \"string\" || runId.length === 0) return;\n // Defensive: if LangGraph re-fires start for the same runId, leak nothing.\n if (self._takeSpan(runId)) {\n // (we just popped it — drop on the floor; the dangling end will be a no-op)\n }\n const agentName = self._resolveAgentName(chain, runName);\n const handle = emitAgentSpan({ adapter: ADAPTER, agentName });\n if (handle) self._setSpan(runId, handle);\n },\n { fingerprint: \"morse.langgraph.handleChainStart\" },\n) as (\n self: MorseCallbackHandler,\n chain: SerializedLike | undefined,\n runId: string,\n runName: string | undefined,\n) => void;\n\nconst _handleChainEndImpl: (self: MorseCallbackHandler, runId: string) => void = absorbErrorsSync(\n (self: MorseCallbackHandler, runId: string) => {\n const handle = self._takeSpan(runId);\n if (handle) handle.end();\n },\n { fingerprint: \"morse.langgraph.handleChainEnd\" },\n) as (self: MorseCallbackHandler, runId: string) => void;\n\nconst _handleChainErrorImpl: (self: MorseCallbackHandler, err: unknown, runId: string) => void =\n absorbErrorsSync(\n (self: MorseCallbackHandler, err: unknown, runId: string) => {\n const handle = self._takeSpan(runId);\n if (handle) handle.end(err ?? new Error(\"langgraph chain error\"));\n },\n { fingerprint: \"morse.langgraph.handleChainError\" },\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 an `MorseCallbackHandler`-shaped class whose prototype chain\n * includes the real `BaseCallbackHandler` (for users relying on\n * `instanceof BaseCallbackHandler` checks). Otherwise return the\n * duck-typed `MorseCallbackHandler` defined above.\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 // Build a subclass that mixes the real Base class into the prototype chain\n // while preserving the chain-span behavior. We do this lazily so that\n // simply importing this module does NOT require `@langchain/core`.\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(\n chain: SerializedLike,\n inputs: Record<string, unknown>,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runType?: string,\n runName?: string,\n ): void {\n this._av.handleChainStart(\n chain,\n inputs,\n runId,\n parentRunId,\n tags,\n metadata,\n runType,\n runName,\n );\n }\n handleChainEnd(outputs: Record<string, unknown>, runId: string, parentRunId?: string): void {\n this._av.handleChainEnd(outputs, runId, parentRunId);\n }\n handleChainError(err: unknown, runId: string, parentRunId?: string): void {\n this._av.handleChainError(err, runId, parentRunId);\n }\n }\n return MorseCallbackHandlerWithBase as unknown as typeof MorseCallbackHandler;\n}\n","/**\n * `langgraph/llm-and-tool-callbacks.ts` — W2-L.2.\n *\n * LangGraph JS callback handler fragment that owns the llm + tool surface\n * of `BaseCallbackHandler`. The class shell (constructor + chain methods)\n * is owned by W2-L.1 (`callback-handler.ts`); streaming + checkpoint by\n * W2-L.3 (`streaming-and-checkpoint.ts`). All three are composed together\n * by W3-L (`langgraph/index.ts`).\n *\n * To stay file-disjoint across the three W2-L tasks, each fragment exports\n * a `createX` factory that returns plain method implementations operating\n * on a shared mutable `LangGraphRunState`. The host class threads its\n * `state` reference through each factory in its constructor and copies the\n * methods onto its prototype/instance.\n *\n * Logical span mapping (per design.md §LangGraph JS):\n * handleLLMStart / handleChatModelStart → open `type=llm` span\n * handleLLMEnd / handleLLMError → close active llm span\n * handleToolStart → open `type=tool` span\n * handleToolEnd / handleToolError → close active tool span\n *\n * MHQ-750: `handleChatModelStart` also decomposes the flattened messages\n * (+ any bound `tools`) into `context_segments` via the shared\n * `_agent-sdk-common/context-decomposer`, mirroring the Python adapter's\n * `on_chat_model_start` (`adapters/langgraph.py`), which calls the same\n * `decompose_openai_messages` for the same reason: LangGraph JS messages\n * are `@langchain/core` `BaseMessage`s, which decompose cleanly under the\n * OpenAI-chat-format decomposer's `_getType()`/`.type` duck-typing.\n *\n * All bodies are wrapped in `absorbErrorsSync` so telemetry can never\n * throw at the host LangGraph runtime.\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport { calculateCost } from \"../_internal/pricing\";\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport { emitLlmSpan, emitToolSpan } from \"../_agent-sdk-common/span-emitter\";\nimport { setActiveFramework } from \"../_internal/active-framework\";\nimport {\n captureLangChainMessages,\n capturePrompts,\n extractLangChainOutputText,\n} from \"../_internal/llm-io\";\nimport { summarizeToolInput, summarizeToolOutput } from \"../_agent-sdk-common/redaction\";\nimport { decomposeOpenAiMessages } from \"../_agent-sdk-common/context-decomposer\";\nimport type {\n BaseMessageLike,\n CallbackHandlerSurface,\n LLMResultLike,\n SerializedLike,\n} from \"./types\";\n\nconst ADAPTER = \"langgraph-js\" as const;\n// MHQ-859: the framework label is cross-language and must match Python's\n// `langgraph.py::_framework_name` exactly — it is what the server groups on,\n// so \"langgraph-js\" here would split one framework into two.\nconst FRAMEWORK = \"langgraph\" as const;\n\n/* ------------------------------------------------------------------------ */\n/* Shared run state */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Shared per-instance state for the composed `MorseCallbackHandler`.\n * Owned/instantiated by W3-L (`langgraph/index.ts`); each W2-L fragment\n * mutates it in place.\n */\nexport interface LangGraphRunState {\n /** Map of runId → SpanHandle for open llm spans. */\n llmSpans: Map<string, SpanHandle>;\n /** Map of runId → SpanHandle for open tool spans. */\n toolSpans: Map<string, SpanHandle>;\n /** Map of runId → SpanHandle for open chain spans (populated by W2-L.1). */\n chainSpans: Map<string, SpanHandle>;\n}\n\nexport interface LlmAndToolHandlerOptions {\n /** Max bytes for tool input summary. Falls through to module default if unset. */\n toolInputMaxBytes?: number;\n /** Max bytes for tool output summary. Falls through to module default if unset. */\n toolOutputMaxBytes?: number;\n}\n\n/** Convenient public type alias for the slice of methods this file owns. */\nexport type LlmAndToolHandlers = Pick<\n CallbackHandlerSurface,\n | \"handleLLMStart\"\n | \"handleChatModelStart\"\n | \"handleLLMEnd\"\n | \"handleLLMError\"\n | \"handleToolStart\"\n | \"handleToolEnd\"\n | \"handleToolError\"\n>;\n\n/* ------------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Extract a provider hint from the `id` path produced by LangChain's\n * `Serializable` machinery. The first segment is usually the package name\n * (`langchain_openai`, `langchain_anthropic`, `langchain_google_vertexai`,\n * etc.). We strip the `langchain_` prefix when present and return the\n * remainder; otherwise we return the first segment verbatim. Returns\n * `undefined` when no identifying segment is available.\n */\nfunction extractProvider(id: string[] | undefined): string | undefined {\n if (!Array.isArray(id) || id.length === 0) return undefined;\n const first = id[0];\n if (typeof first !== \"string\" || first.length === 0) return undefined;\n if (first.startsWith(\"langchain_\")) {\n const tail = first.slice(\"langchain_\".length);\n return tail.length > 0 ? tail : undefined;\n }\n return first;\n}\n\n/**\n * MHQ-788: `llm.name` is LangChain's `Serializable` class name (e.g.\n * `\"ChatOpenAI\"`), never the actual model string — it was always the wrong\n * field, and empty in practice for the real `@langchain/openai` callback\n * invocation this bug was found against. The real model lives in\n * `extraParams.invocation_params.model` (see `chat_models.cjs`'s\n * `invocationParams()` — every provider's chat model puts its model field\n * there before calling `handleChatModelStart`/`handleLLMStart`).\n * `llm.name` is kept only as a last-resort fallback for providers that\n * don't populate `invocation_params.model` for some reason.\n */\nfunction llmModelOf(\n llm: SerializedLike | undefined,\n extraParams?: Record<string, unknown>,\n): string {\n const invocationParams = extraParams?.invocation_params;\n if (invocationParams && typeof invocationParams === \"object\") {\n const model =\n (invocationParams as { model?: unknown; model_name?: unknown }).model ??\n (invocationParams as { model?: unknown; model_name?: unknown }).model_name;\n if (typeof model === \"string\" && model.length > 0) return model;\n }\n if (llm !== undefined && typeof llm.name === \"string\" && llm.name.length > 0) {\n return llm.name;\n }\n return \"unknown\";\n}\n\nfunction toolNameOf(tool: SerializedLike | undefined): string {\n if (tool !== undefined && typeof tool.name === \"string\" && tool.name.length > 0) {\n return tool.name;\n }\n return \"unknown\";\n}\n\n/**\n * LangChain JS passes `handleChatModelStart` a nested `BaseMessage[][]` —\n * one array per \"prompt\" in a batch call. The decomposer expects a flat\n * list of message objects, so flatten one level (mirrors Python's\n * `_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 `extra.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\nfunction applyTokenUsage(handle: SpanHandle, output: LLMResultLike | undefined): void {\n const usage = output?.llmOutput?.tokenUsage;\n if (!usage || typeof usage !== \"object\") return;\n const prompt = (usage as Record<string, unknown>).promptTokens;\n const completion = (usage as Record<string, unknown>).completionTokens;\n const total = (usage as Record<string, unknown>).totalTokens;\n if (typeof prompt === \"number\" && Number.isFinite(prompt)) {\n handle.span.input_tokens = prompt;\n }\n if (typeof completion === \"number\" && Number.isFinite(completion)) {\n handle.span.output_tokens = completion;\n }\n if (typeof total === \"number\" && Number.isFinite(total)) {\n handle.span.total_tokens = total;\n } else if (\n typeof handle.span.input_tokens === \"number\" &&\n typeof handle.span.output_tokens === \"number\"\n ) {\n handle.span.total_tokens = handle.span.input_tokens + handle.span.output_tokens;\n }\n if (\n handle.span.cost_usd === undefined &&\n handle.span.model &&\n (typeof handle.span.input_tokens === \"number\" || typeof handle.span.output_tokens === \"number\")\n ) {\n const cost = calculateCost({\n inputTokens: handle.span.input_tokens ?? 0,\n outputTokens: handle.span.output_tokens ?? 0,\n model: handle.span.model,\n });\n if (cost !== undefined) handle.span.cost_usd = cost;\n }\n}\n\nfunction popAndEnd(\n map: Map<string, SpanHandle>,\n runId: string,\n err?: unknown,\n mutate?: (handle: SpanHandle) => void,\n): void {\n const handle = map.get(runId);\n if (handle === undefined) return;\n map.delete(runId);\n if (mutate !== undefined) {\n mutate(handle);\n }\n if (err !== undefined) {\n handle.end(err);\n } else {\n handle.end();\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Factory */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Build the llm + tool slice of an `MorseCallbackHandler`. The\n * returned object can be merged onto the host class instance (W3-L); each\n * method mutates `state` in place so all three fragments share the same\n * `runId → SpanHandle` maps.\n *\n * Every method body is wrapped in `absorbErrorsSync` — telemetry never\n * throws into the LangGraph runtime.\n */\nexport function createLlmAndToolHandlers(\n state: LangGraphRunState,\n options: LlmAndToolHandlerOptions = {},\n): LlmAndToolHandlers {\n const toolInputOpts = options.toolInputMaxBytes\n ? { maxBytes: options.toolInputMaxBytes }\n : undefined;\n const toolOutputOpts = options.toolOutputMaxBytes\n ? { maxBytes: options.toolOutputMaxBytes }\n : undefined;\n\n const _handleLLMStart = (\n llm: SerializedLike,\n prompts: string[],\n runId: string,\n _parentRunId?: string,\n extraParams?: Record<string, unknown>,\n ): void => {\n setActiveFramework(FRAMEWORK);\n const handle = emitLlmSpan({\n adapter: ADAPTER,\n model: llmModelOf(llm, extraParams),\n provider: extractProvider(llm?.id),\n inputData: capturePrompts(prompts),\n });\n if (handle !== null) {\n state.llmSpans.set(runId, handle);\n }\n };\n\n const _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 — emit a `type=llm` span, same as handleLLMStart.\n // MHQ-750: also decompose the flattened messages (+ bound tools, if\n // any) into context_segments so the dashboard shows context\n // composition for LangGraph JS spans without extra customer config.\n const flatMessages = flattenMessages(messages);\n const contextSegments = decomposeOpenAiMessages(flatMessages, toolsFromExtra(extraParams));\n setActiveFramework(FRAMEWORK);\n const handle = emitLlmSpan({\n adapter: ADAPTER,\n model: llmModelOf(llm, extraParams),\n provider: extractProvider(llm?.id),\n contextSegments: contextSegments.length > 0 ? contextSegments : undefined,\n inputData: captureLangChainMessages(flatMessages),\n });\n if (handle !== null) {\n state.llmSpans.set(runId, handle);\n }\n };\n\n const _handleLLMEnd = (output: LLMResultLike, runId: string): void => {\n popAndEnd(state.llmSpans, runId, undefined, (handle) => {\n applyTokenUsage(handle, output);\n // MHQ-858: the response text is only available at end-of-call, so\n // output_data is set here rather than on the emitLlmSpan above.\n const outputText = extractLangChainOutputText(output?.generations);\n if (outputText !== undefined) handle.span.output_data = { content: outputText };\n });\n };\n\n const _handleLLMError = (err: unknown, runId: string): void => {\n popAndEnd(state.llmSpans, runId, err);\n };\n\n const _handleToolStart = (tool: SerializedLike, input: string, runId: string): void => {\n const handle = emitToolSpan({\n adapter: ADAPTER,\n toolName: toolNameOf(tool),\n inputSummary: summarizeToolInput(input, toolInputOpts),\n });\n if (handle !== null) {\n state.toolSpans.set(runId, handle);\n }\n };\n\n const _handleToolEnd = (output: string, runId: string): void => {\n popAndEnd(state.toolSpans, runId, undefined, (handle) => {\n const md = (handle.span.metadata ??= {} as Record<string, unknown>);\n md.tool_output_summary = summarizeToolOutput(output, toolOutputOpts);\n md.success = true;\n });\n };\n\n const _handleToolError = (err: unknown, runId: string): void => {\n popAndEnd(state.toolSpans, runId, err, (handle) => {\n const md = (handle.span.metadata ??= {} as Record<string, unknown>);\n md.success = false;\n });\n };\n\n const fp = \"morse.adapters.langgraph.llm-and-tool\";\n\n return {\n handleLLMStart: absorbErrorsSync(_handleLLMStart, { fingerprint: `${fp}.handleLLMStart` }),\n handleChatModelStart: absorbErrorsSync(_handleChatModelStart, {\n fingerprint: `${fp}.handleChatModelStart`,\n }),\n handleLLMEnd: absorbErrorsSync(_handleLLMEnd, { fingerprint: `${fp}.handleLLMEnd` }),\n handleLLMError: absorbErrorsSync(_handleLLMError, { fingerprint: `${fp}.handleLLMError` }),\n handleToolStart: absorbErrorsSync(_handleToolStart, { fingerprint: `${fp}.handleToolStart` }),\n handleToolEnd: absorbErrorsSync(_handleToolEnd, { fingerprint: `${fp}.handleToolEnd` }),\n handleToolError: absorbErrorsSync(_handleToolError, { fingerprint: `${fp}.handleToolError` }),\n };\n}\n","/**\n * `langgraph/streaming-and-checkpoint.ts` — Phase 13 W2-L.3.\n *\n * Implements streaming-token aggregation for LangGraph JS. Per the design\n * doc, streaming tokens fire `handleLLMNewToken` at very high frequency —\n * we do NOT emit a span per token (would explode volume). Instead we\n * aggregate them onto the parent llm span's `metadata.tokens_streamed`\n * counter so downstream consumers can observe streaming activity without\n * the cardinality blowup.\n *\n * Checkpoint hooks (PostgresSaver / SqliteSaver / MemorySaver) are\n * deferred to v1.5 per the design doc. The surface is left empty here;\n * W3-L composes this module with the others and may add checkpoint\n * instrumentation in a follow-up wave without touching the wiring.\n *\n * All wrappers route through `absorbErrorsSync` — telemetry MUST NOT\n * throw at the caller.\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport type { CallbackHandlerSurface } from \"./types\";\n\nconst ADAPTER_FINGERPRINT = \"langgraph.streaming\" as const;\n\n/** State carried across streaming-token events for an in-flight chain run. */\nexport interface StreamingState {\n /** Map of `runId` → SpanHandle (the in-flight llm span W2-L.2 opened). */\n llmSpans: Map<string, SpanHandle>;\n}\n\nexport interface StreamingHandlerOptions {\n /**\n * If true, emit a single `tokens_streamed` metadata count on the parent\n * llm span; default true. If false, the handler is a no-op (useful when\n * the host already tracks streaming elsewhere or wants to minimise\n * mutation under hot streaming loops).\n */\n trackStreamingTokens?: boolean;\n}\n\n/**\n * Returns the streaming-related callback method implementations.\n *\n * Currently exposes only `handleLLMNewToken`. Checkpoint methods\n * (`handleCheckpointStart` / `handleCheckpointEnd`) are not on the\n * `CallbackHandlerSurface` for v1 — they will land in v1.5 when we wire\n * the PostgresSaver/SqliteSaver hooks. Keeping this module in place\n * means W3-L's composition does not change shape when those land.\n */\nexport function createStreamingHandlers(\n state: StreamingState,\n options?: StreamingHandlerOptions,\n): Pick<CallbackHandlerSurface, \"handleLLMNewToken\"> {\n const trackStreamingTokens = options?.trackStreamingTokens ?? true;\n\n const handleLLMNewToken = absorbErrorsSync(\n (_token: string, _idx: { prompt: number; completion: number }, runId: string): void => {\n if (!trackStreamingTokens) return;\n const handle = state.llmSpans.get(runId);\n if (handle === undefined) {\n // No matching llm span — happens when the host fires tokens\n // before `handleLLMStart` or after `handleLLMEnd`, or when the\n // runId is unknown (orphan event). Drop silently.\n return;\n }\n const md = (handle.span.metadata ?? {}) as Record<string, unknown>;\n const prev = typeof md.tokens_streamed === \"number\" ? md.tokens_streamed : 0;\n md.tokens_streamed = prev + 1;\n handle.span.metadata = md;\n },\n { fingerprint: ADAPTER_FINGERPRINT },\n );\n\n return { handleLLMNewToken };\n}\n","/**\n * `@morsehq-dev/sdk/langgraph` — adapter for `@langchain/langgraph` (langgraphjs).\n *\n * W3-L: composes the three W2-L surfaces into a single\n * `MorseCallbackHandler` class exposing the full\n * `BaseCallbackHandler` shape LangGraph requires:\n *\n * - chain start/end/error — from W2-L.1 (`callback-handler.ts`)\n * - llm + tool start/end/error — from W2-L.2 (`llm-and-tool-callbacks.ts`)\n * - llm new-token streaming — from W2-L.3 (`streaming-and-checkpoint.ts`)\n *\n * Users get a single class to register with LangGraph:\n *\n * ```ts\n * import { MorseCallbackHandler } from \"@morsehq-dev/sdk/langgraph\";\n * await app.invoke(input, { callbacks: [new MorseCallbackHandler()] });\n * ```\n *\n * The W2-L.1 base class keeps its own private map of open chain spans\n * (since it predates the shared `LangGraphRunState`). To keep things\n * coherent for advanced consumers reading `state`, the composed class\n * overrides `handleChainStart` / `handleChainEnd` / `handleChainError`\n * to ALSO maintain `state.chainSpans` in addition to calling the\n * super-class method. The base-class behavior is unchanged.\n */\n\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport {\n MorseCallbackHandler as BaseMorseCallbackHandler,\n type MorseCallbackHandlerOptions,\n getCallbackHandlerClass,\n} from \"./callback-handler\";\nimport {\n createLlmAndToolHandlers,\n type LangGraphRunState,\n type LlmAndToolHandlerOptions,\n} from \"./llm-and-tool-callbacks\";\nimport { createStreamingHandlers, type StreamingHandlerOptions } from \"./streaming-and-checkpoint\";\nimport type { CallbackHandlerSurface, SerializedLike } from \"./types\";\n\n/** Combined options for the composed handler. */\nexport type ComposedMorseCallbackHandlerOptions = MorseCallbackHandlerOptions &\n LlmAndToolHandlerOptions &\n StreamingHandlerOptions;\n\n/**\n * Composed `MorseCallbackHandler` — the user-facing class.\n *\n * Inherits chain handlers from `BaseMorseCallbackHandler` (W2-L.1)\n * and attaches the W2-L.2 llm/tool methods and W2-L.3 streaming method\n * onto each instance. All four sources share a single\n * `LangGraphRunState` so future cross-method correlation can read\n * llm/tool/chain maps from one place.\n */\nexport class MorseCallbackHandler\n extends BaseMorseCallbackHandler\n implements CallbackHandlerSurface\n{\n private readonly _state: LangGraphRunState;\n\n // The slotted methods from W2-L.2 / W2-L.3 — `!` because they are\n // assigned in the constructor via `Object.assign`-style copy.\n public handleLLMStart!: NonNullable<CallbackHandlerSurface[\"handleLLMStart\"]>;\n public handleChatModelStart!: NonNullable<CallbackHandlerSurface[\"handleChatModelStart\"]>;\n public handleLLMEnd!: NonNullable<CallbackHandlerSurface[\"handleLLMEnd\"]>;\n public handleLLMError!: NonNullable<CallbackHandlerSurface[\"handleLLMError\"]>;\n public handleToolStart!: NonNullable<CallbackHandlerSurface[\"handleToolStart\"]>;\n public handleToolEnd!: NonNullable<CallbackHandlerSurface[\"handleToolEnd\"]>;\n public handleToolError!: NonNullable<CallbackHandlerSurface[\"handleToolError\"]>;\n public handleLLMNewToken!: NonNullable<CallbackHandlerSurface[\"handleLLMNewToken\"]>;\n\n constructor(options?: ComposedMorseCallbackHandlerOptions) {\n super(options);\n\n this._state = {\n llmSpans: new Map<string, SpanHandle>(),\n toolSpans: new Map<string, SpanHandle>(),\n chainSpans: new Map<string, SpanHandle>(),\n };\n\n const llmAndTool = createLlmAndToolHandlers(this._state, {\n toolInputMaxBytes: options?.toolInputMaxBytes,\n toolOutputMaxBytes: options?.toolOutputMaxBytes,\n });\n const streaming = createStreamingHandlers(this._state, {\n trackStreamingTokens: options?.trackStreamingTokens,\n });\n\n // Copy method implementations onto the instance so LangGraph (which\n // looks up handlers via `typeof handler[method] === \"function\"` on\n // the instance) sees them. Use non-null assertions because the\n // factories always return defined methods.\n this.handleLLMStart = llmAndTool.handleLLMStart!;\n this.handleChatModelStart = llmAndTool.handleChatModelStart!;\n this.handleLLMEnd = llmAndTool.handleLLMEnd!;\n this.handleLLMError = llmAndTool.handleLLMError!;\n this.handleToolStart = llmAndTool.handleToolStart!;\n this.handleToolEnd = llmAndTool.handleToolEnd!;\n this.handleToolError = llmAndTool.handleToolError!;\n this.handleLLMNewToken = streaming.handleLLMNewToken!;\n }\n\n /**\n * The W2-L.1 base maintains its own private chain-span map. We\n * mirror chain handles into the shared `LangGraphRunState` so future\n * cross-fragment logic can correlate by runId. Never throws — the\n * map mutation is in-process and the super method already absorbs\n * errors via `absorbErrorsSync`.\n */\n override handleChainStart(\n chain: SerializedLike,\n inputs: Record<string, unknown>,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runType?: string,\n runName?: string,\n ): void {\n super.handleChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, runName);\n // Mirror — read the now-open span from the base via the internal\n // accessor used in tests, then re-insert it (the base `_takeSpan`\n // deletes on read, so we'd break the base if we used it here).\n // Instead reach into the base via the public-ish `_setSpan` would\n // double-insert; safer to keep our own shadow keyed off the same\n // runId.\n this._shadowSetChainSpan(runId);\n }\n\n override handleChainEnd(\n outputs: Record<string, unknown>,\n runId: string,\n parentRunId?: string,\n ): void {\n super.handleChainEnd(outputs, runId, parentRunId);\n this._state.chainSpans.delete(runId);\n }\n\n override handleChainError(err: unknown, runId: string, parentRunId?: string): void {\n super.handleChainError(err, runId, parentRunId);\n this._state.chainSpans.delete(runId);\n }\n\n /**\n * Marker insertion for the shared chainSpans map. The W2-L.1 base\n * holds the real `SpanHandle` privately; for the shared map we just\n * need *presence* keyed by runId so downstream fragments can detect\n * an in-flight chain. We stash a sentinel handle whose `end()` is a\n * no-op — the base owns the real lifecycle.\n */\n private _shadowSetChainSpan(runId: string): void {\n if (typeof runId !== \"string\" || runId.length === 0) return;\n const sentinel: SpanHandle = {\n // The base owns the real SpanData — for the shadow we use a\n // minimal stand-in. Downstream readers only check map membership,\n // not field access on this object.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n span: {} as any,\n end(): void {\n /* no-op */\n },\n };\n this._state.chainSpans.set(runId, sentinel);\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Re-exports */\n/* ------------------------------------------------------------------------ */\n\n// Low-level pieces for advanced users who want to compose their own\n// handler shape.\nexport { BaseMorseCallbackHandler };\nexport { getCallbackHandlerClass };\nexport { createLlmAndToolHandlers } from \"./llm-and-tool-callbacks\";\nexport { createStreamingHandlers } from \"./streaming-and-checkpoint\";\n\nexport type {\n MorseCallbackHandlerOptions,\n LangGraphRunState,\n LlmAndToolHandlerOptions,\n StreamingHandlerOptions,\n};\n\nexport type {\n BaseMessageLike,\n CallbackHandlerSurface,\n LangChainCoreCallbacksModuleLike,\n LLMResultLike,\n SerializedLike,\n} from \"./types\";\n"]}
1
+ {"version":3,"sources":["../../../src/langgraph/callback-handler.ts","../../../src/langgraph/llm-and-tool-callbacks.ts","../../../src/langgraph/streaming-and-checkpoint.ts","../../../src/langgraph/index.ts"],"names":["ADAPTER","MorseCallbackHandler"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * `@morsehq-dev/sdk/langgraph` — `MorseCallbackHandler` (W2-L.1).\n *\n * The handler is registered by LangGraph users via:\n *\n * ```ts\n * import { MorseCallbackHandler } from \"@morsehq-dev/sdk/langgraph\";\n * await app.invoke(input, { callbacks: [new MorseCallbackHandler()] });\n * ```\n *\n * LangGraph type-checks handlers structurally (by method presence on the\n * instance), not via `instanceof BaseCallbackHandler`. We therefore:\n *\n * 1. Always export a duck-typed class implementing `CallbackHandlerSurface`\n * — works without `@langchain/core` installed.\n * 2. Provide `getCallbackHandlerClass()` for users who rely on\n * `instanceof BaseCallbackHandler` — it dynamically loads\n * `@langchain/core/callbacks/base` (optional peer dep) and returns a\n * subclass whose prototype chain includes the real base class.\n *\n * Scope of THIS file (W2-L.1): chain spans only. `handleChainStart` opens\n * an `agent` span (the LangGraph chain IS the agent run); `handleChainEnd`\n * / `handleChainError` closes it. Nested chains nest via the per-runId\n * span map — LangGraph guarantees well-ordered start/end pairs so the\n * tracing-state span stack handles `parent_span_id` linkage for us.\n *\n * `handleLLMStart/End`, `handleToolStart/End`, and streaming callbacks\n * are implemented in W2-L.2 / W2-L.3 as separate methods on the same\n * class (composed in Wave 3-L).\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport { adoptThreadId } from \"../_internal/tracing\";\nimport { emitAgentSpan } from \"../_agent-sdk-common/span-emitter\";\nimport type {\n CallbackHandlerSurface,\n LangChainCoreCallbacksModuleLike,\n SerializedLike,\n} from \"./types\";\n\n/* ------------------------------------------------------------------------ */\n/* Public surface */\n/* ------------------------------------------------------------------------ */\n\nexport interface MorseCallbackHandlerOptions {\n /**\n * Override the agent name on the outer chain span. Falls back, in order,\n * to: `runName` (LangGraph-supplied per-invocation name), `chain.name`\n * (the serialized class name), then `\"langgraph-agent\"`.\n */\n defaultAgentName?: string;\n}\n\nconst ADAPTER = \"langgraph-js\";\nconst HANDLER_NAME = \"morse_callback_handler\";\nconst DEFAULT_AGENT_NAME_FALLBACK = \"langgraph-agent\";\n\n/**\n * Duck-typed LangGraph `BaseCallbackHandler`. Implements `CallbackHandlerSurface`\n * with chain-start / chain-end / chain-error wired to the Morse trace.\n *\n * LangGraph routes callbacks to instance methods by name; it does NOT require\n * an `instanceof` check against the real `BaseCallbackHandler`. Users who\n * need that (rare; `instanceof` checks in custom middleware) should obtain\n * the class via `getCallbackHandlerClass()` instead.\n */\nexport class MorseCallbackHandler implements CallbackHandlerSurface {\n /** Required by LangGraph's `BaseCallbackHandler` interface. */\n public readonly name: string = HANDLER_NAME;\n\n private readonly defaultAgentName: string | undefined;\n\n /** Open chain spans, keyed by LangGraph `runId`. */\n private readonly chainSpans: Map<string, SpanHandle> = new Map();\n\n constructor(options?: MorseCallbackHandlerOptions) {\n this.defaultAgentName = options?.defaultAgentName;\n }\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 _runType?: string,\n runName?: string,\n ): void {\n _handleChainStartImpl(this, chain, runId, runName, metadata);\n }\n\n handleChainEnd(_outputs: Record<string, unknown>, runId: string, parentRunId?: string): void {\n void parentRunId;\n _handleChainEndImpl(this, runId);\n }\n\n handleChainError(err: unknown, runId: string, parentRunId?: string): void {\n void parentRunId;\n _handleChainErrorImpl(this, err, runId);\n }\n\n /* ------ Internal accessors used by the absorbErrorsSync-wrapped impls ----- */\n\n /** @internal */\n _setSpan(runId: string, handle: SpanHandle): void {\n this.chainSpans.set(runId, handle);\n }\n\n /** @internal */\n _takeSpan(runId: string): SpanHandle | undefined {\n const handle = this.chainSpans.get(runId);\n if (handle) this.chainSpans.delete(runId);\n return handle;\n }\n\n /** @internal */\n _resolveAgentName(chain: SerializedLike | undefined, runName: string | undefined): string {\n if (typeof runName === \"string\" && runName.length > 0) return runName;\n if (chain && typeof chain.name === \"string\" && chain.name.length > 0) return chain.name;\n if (this.defaultAgentName && this.defaultAgentName.length > 0) return this.defaultAgentName;\n return DEFAULT_AGENT_NAME_FALLBACK;\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Implementation bodies (wrapped in absorbErrorsSync) */\n/* ------------------------------------------------------------------------ */\n\nconst _handleChainStartImpl: (\n self: MorseCallbackHandler,\n chain: SerializedLike | undefined,\n runId: string,\n runName: string | undefined,\n metadata?: Record<string, unknown>,\n) => void = absorbErrorsSync(\n (\n self: MorseCallbackHandler,\n chain: SerializedLike | undefined,\n runId: string,\n runName: string | undefined,\n metadata?: Record<string, unknown>,\n ) => {\n if (typeof runId !== \"string\" || runId.length === 0) return;\n // Defensive: if LangGraph re-fires start for the same runId, leak nothing.\n if (self._takeSpan(runId)) {\n // (we just popped it — drop on the floor; the dangling end will be a no-op)\n }\n const agentName = self._resolveAgentName(chain, runName);\n const handle = emitAgentSpan({ adapter: ADAPTER, agentName });\n if (handle) self._setSpan(runId, handle);\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.langgraph.handleChainStart\" },\n) as (\n self: MorseCallbackHandler,\n chain: SerializedLike | undefined,\n runId: string,\n runName: string | undefined,\n metadata?: Record<string, unknown>,\n) => void;\n\nconst _handleChainEndImpl: (self: MorseCallbackHandler, runId: string) => void = absorbErrorsSync(\n (self: MorseCallbackHandler, runId: string) => {\n const handle = self._takeSpan(runId);\n if (handle) handle.end();\n },\n { fingerprint: \"morse.langgraph.handleChainEnd\" },\n) as (self: MorseCallbackHandler, runId: string) => void;\n\nconst _handleChainErrorImpl: (self: MorseCallbackHandler, err: unknown, runId: string) => void =\n absorbErrorsSync(\n (self: MorseCallbackHandler, err: unknown, runId: string) => {\n const handle = self._takeSpan(runId);\n if (handle) handle.end(err ?? new Error(\"langgraph chain error\"));\n },\n { fingerprint: \"morse.langgraph.handleChainError\" },\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 an `MorseCallbackHandler`-shaped class whose prototype chain\n * includes the real `BaseCallbackHandler` (for users relying on\n * `instanceof BaseCallbackHandler` checks). Otherwise return the\n * duck-typed `MorseCallbackHandler` defined above.\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 // Build a subclass that mixes the real Base class into the prototype chain\n // while preserving the chain-span behavior. We do this lazily so that\n // simply importing this module does NOT require `@langchain/core`.\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(\n chain: SerializedLike,\n inputs: Record<string, unknown>,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runType?: string,\n runName?: string,\n ): void {\n this._av.handleChainStart(\n chain,\n inputs,\n runId,\n parentRunId,\n tags,\n metadata,\n runType,\n runName,\n );\n }\n handleChainEnd(outputs: Record<string, unknown>, runId: string, parentRunId?: string): void {\n this._av.handleChainEnd(outputs, runId, parentRunId);\n }\n handleChainError(err: unknown, runId: string, parentRunId?: string): void {\n this._av.handleChainError(err, runId, parentRunId);\n }\n }\n return MorseCallbackHandlerWithBase as unknown as typeof MorseCallbackHandler;\n}\n","/**\n * `langgraph/llm-and-tool-callbacks.ts` — W2-L.2.\n *\n * LangGraph JS callback handler fragment that owns the llm + tool surface\n * of `BaseCallbackHandler`. The class shell (constructor + chain methods)\n * is owned by W2-L.1 (`callback-handler.ts`); streaming + checkpoint by\n * W2-L.3 (`streaming-and-checkpoint.ts`). All three are composed together\n * by W3-L (`langgraph/index.ts`).\n *\n * To stay file-disjoint across the three W2-L tasks, each fragment exports\n * a `createX` factory that returns plain method implementations operating\n * on a shared mutable `LangGraphRunState`. The host class threads its\n * `state` reference through each factory in its constructor and copies the\n * methods onto its prototype/instance.\n *\n * Logical span mapping (per design.md §LangGraph JS):\n * handleLLMStart / handleChatModelStart → open `type=llm` span\n * handleLLMEnd / handleLLMError → close active llm span\n * handleToolStart → open `type=tool` span\n * handleToolEnd / handleToolError → close active tool span\n *\n * MHQ-750: `handleChatModelStart` also decomposes the flattened messages\n * (+ any bound `tools`) into `context_segments` via the shared\n * `_agent-sdk-common/context-decomposer`, mirroring the Python adapter's\n * `on_chat_model_start` (`adapters/langgraph.py`), which calls the same\n * `decompose_openai_messages` for the same reason: LangGraph JS messages\n * are `@langchain/core` `BaseMessage`s, which decompose cleanly under the\n * OpenAI-chat-format decomposer's `_getType()`/`.type` duck-typing.\n *\n * All bodies are wrapped in `absorbErrorsSync` so telemetry can never\n * throw at the host LangGraph runtime.\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport { calculateCost } from \"../_internal/pricing\";\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport { emitLlmSpan, emitToolSpan } from \"../_agent-sdk-common/span-emitter\";\nimport { setActiveFramework } from \"../_internal/active-framework\";\nimport {\n captureLangChainMessages,\n capturePrompts,\n extractLangChainOutputText,\n} from \"../_internal/llm-io\";\nimport { summarizeToolInput, summarizeToolOutput } from \"../_agent-sdk-common/redaction\";\nimport { decomposeOpenAiMessages } from \"../_agent-sdk-common/context-decomposer\";\nimport type {\n BaseMessageLike,\n CallbackHandlerSurface,\n LLMResultLike,\n SerializedLike,\n} from \"./types\";\n\nconst ADAPTER = \"langgraph-js\" as const;\n// MHQ-859: the framework label is cross-language and must match Python's\n// `langgraph.py::_framework_name` exactly — it is what the server groups on,\n// so \"langgraph-js\" here would split one framework into two.\nconst FRAMEWORK = \"langgraph\" as const;\n\n/* ------------------------------------------------------------------------ */\n/* Shared run state */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Shared per-instance state for the composed `MorseCallbackHandler`.\n * Owned/instantiated by W3-L (`langgraph/index.ts`); each W2-L fragment\n * mutates it in place.\n */\nexport interface LangGraphRunState {\n /** Map of runId → SpanHandle for open llm spans. */\n llmSpans: Map<string, SpanHandle>;\n /** Map of runId → SpanHandle for open tool spans. */\n toolSpans: Map<string, SpanHandle>;\n /** Map of runId → SpanHandle for open chain spans (populated by W2-L.1). */\n chainSpans: Map<string, SpanHandle>;\n}\n\nexport interface LlmAndToolHandlerOptions {\n /** Max bytes for tool input summary. Falls through to module default if unset. */\n toolInputMaxBytes?: number;\n /** Max bytes for tool output summary. Falls through to module default if unset. */\n toolOutputMaxBytes?: number;\n}\n\n/** Convenient public type alias for the slice of methods this file owns. */\nexport type LlmAndToolHandlers = Pick<\n CallbackHandlerSurface,\n | \"handleLLMStart\"\n | \"handleChatModelStart\"\n | \"handleLLMEnd\"\n | \"handleLLMError\"\n | \"handleToolStart\"\n | \"handleToolEnd\"\n | \"handleToolError\"\n>;\n\n/* ------------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Extract a provider hint from the `id` path produced by LangChain's\n * `Serializable` machinery. The first segment is usually the package name\n * (`langchain_openai`, `langchain_anthropic`, `langchain_google_vertexai`,\n * etc.). We strip the `langchain_` prefix when present and return the\n * remainder; otherwise we return the first segment verbatim. Returns\n * `undefined` when no identifying segment is available.\n */\nfunction extractProvider(id: string[] | undefined): string | undefined {\n if (!Array.isArray(id) || id.length === 0) return undefined;\n const first = id[0];\n if (typeof first !== \"string\" || first.length === 0) return undefined;\n if (first.startsWith(\"langchain_\")) {\n const tail = first.slice(\"langchain_\".length);\n return tail.length > 0 ? tail : undefined;\n }\n return first;\n}\n\n/**\n * MHQ-788: `llm.name` is LangChain's `Serializable` class name (e.g.\n * `\"ChatOpenAI\"`), never the actual model string — it was always the wrong\n * field, and empty in practice for the real `@langchain/openai` callback\n * invocation this bug was found against. The real model lives in\n * `extraParams.invocation_params.model` (see `chat_models.cjs`'s\n * `invocationParams()` — every provider's chat model puts its model field\n * there before calling `handleChatModelStart`/`handleLLMStart`).\n * `llm.name` is kept only as a last-resort fallback for providers that\n * don't populate `invocation_params.model` for some reason.\n */\nfunction llmModelOf(\n llm: SerializedLike | undefined,\n extraParams?: Record<string, unknown>,\n): string {\n const invocationParams = extraParams?.invocation_params;\n if (invocationParams && typeof invocationParams === \"object\") {\n const model =\n (invocationParams as { model?: unknown; model_name?: unknown }).model ??\n (invocationParams as { model?: unknown; model_name?: unknown }).model_name;\n if (typeof model === \"string\" && model.length > 0) return model;\n }\n if (llm !== undefined && typeof llm.name === \"string\" && llm.name.length > 0) {\n return llm.name;\n }\n return \"unknown\";\n}\n\nfunction toolNameOf(tool: SerializedLike | undefined): string {\n if (tool !== undefined && typeof tool.name === \"string\" && tool.name.length > 0) {\n return tool.name;\n }\n return \"unknown\";\n}\n\n/**\n * LangChain JS passes `handleChatModelStart` a nested `BaseMessage[][]` —\n * one array per \"prompt\" in a batch call. The decomposer expects a flat\n * list of message objects, so flatten one level (mirrors Python's\n * `_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 `extra.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\nfunction applyTokenUsage(handle: SpanHandle, output: LLMResultLike | undefined): void {\n const usage = output?.llmOutput?.tokenUsage;\n if (!usage || typeof usage !== \"object\") return;\n const prompt = (usage as Record<string, unknown>).promptTokens;\n const completion = (usage as Record<string, unknown>).completionTokens;\n const total = (usage as Record<string, unknown>).totalTokens;\n if (typeof prompt === \"number\" && Number.isFinite(prompt)) {\n handle.span.input_tokens = prompt;\n }\n if (typeof completion === \"number\" && Number.isFinite(completion)) {\n handle.span.output_tokens = completion;\n }\n if (typeof total === \"number\" && Number.isFinite(total)) {\n handle.span.total_tokens = total;\n } else if (\n typeof handle.span.input_tokens === \"number\" &&\n typeof handle.span.output_tokens === \"number\"\n ) {\n handle.span.total_tokens = handle.span.input_tokens + handle.span.output_tokens;\n }\n if (\n handle.span.cost_usd === undefined &&\n handle.span.model &&\n (typeof handle.span.input_tokens === \"number\" || typeof handle.span.output_tokens === \"number\")\n ) {\n const cost = calculateCost({\n inputTokens: handle.span.input_tokens ?? 0,\n outputTokens: handle.span.output_tokens ?? 0,\n model: handle.span.model,\n });\n if (cost !== undefined) handle.span.cost_usd = cost;\n }\n}\n\nfunction popAndEnd(\n map: Map<string, SpanHandle>,\n runId: string,\n err?: unknown,\n mutate?: (handle: SpanHandle) => void,\n): void {\n const handle = map.get(runId);\n if (handle === undefined) return;\n map.delete(runId);\n if (mutate !== undefined) {\n mutate(handle);\n }\n if (err !== undefined) {\n handle.end(err);\n } else {\n handle.end();\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Factory */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Build the llm + tool slice of an `MorseCallbackHandler`. The\n * returned object can be merged onto the host class instance (W3-L); each\n * method mutates `state` in place so all three fragments share the same\n * `runId → SpanHandle` maps.\n *\n * Every method body is wrapped in `absorbErrorsSync` — telemetry never\n * throws into the LangGraph runtime.\n */\nexport function createLlmAndToolHandlers(\n state: LangGraphRunState,\n options: LlmAndToolHandlerOptions = {},\n): LlmAndToolHandlers {\n const toolInputOpts = options.toolInputMaxBytes\n ? { maxBytes: options.toolInputMaxBytes }\n : undefined;\n const toolOutputOpts = options.toolOutputMaxBytes\n ? { maxBytes: options.toolOutputMaxBytes }\n : undefined;\n\n const _handleLLMStart = (\n llm: SerializedLike,\n prompts: string[],\n runId: string,\n _parentRunId?: string,\n extraParams?: Record<string, unknown>,\n ): void => {\n setActiveFramework(FRAMEWORK);\n const handle = emitLlmSpan({\n adapter: ADAPTER,\n model: llmModelOf(llm, extraParams),\n provider: extractProvider(llm?.id),\n inputData: capturePrompts(prompts),\n });\n if (handle !== null) {\n state.llmSpans.set(runId, handle);\n }\n };\n\n const _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 — emit a `type=llm` span, same as handleLLMStart.\n // MHQ-750: also decompose the flattened messages (+ bound tools, if\n // any) into context_segments so the dashboard shows context\n // composition for LangGraph JS spans without extra customer config.\n const flatMessages = flattenMessages(messages);\n const contextSegments = decomposeOpenAiMessages(flatMessages, toolsFromExtra(extraParams));\n setActiveFramework(FRAMEWORK);\n const handle = emitLlmSpan({\n adapter: ADAPTER,\n model: llmModelOf(llm, extraParams),\n provider: extractProvider(llm?.id),\n contextSegments: contextSegments.length > 0 ? contextSegments : undefined,\n inputData: captureLangChainMessages(flatMessages),\n });\n if (handle !== null) {\n state.llmSpans.set(runId, handle);\n }\n };\n\n const _handleLLMEnd = (output: LLMResultLike, runId: string): void => {\n popAndEnd(state.llmSpans, runId, undefined, (handle) => {\n applyTokenUsage(handle, output);\n // MHQ-858: the response text is only available at end-of-call, so\n // output_data is set here rather than on the emitLlmSpan above.\n const outputText = extractLangChainOutputText(output?.generations);\n if (outputText !== undefined) handle.span.output_data = { content: outputText };\n });\n };\n\n const _handleLLMError = (err: unknown, runId: string): void => {\n popAndEnd(state.llmSpans, runId, err);\n };\n\n const _handleToolStart = (tool: SerializedLike, input: string, runId: string): void => {\n const handle = emitToolSpan({\n adapter: ADAPTER,\n toolName: toolNameOf(tool),\n inputSummary: summarizeToolInput(input, toolInputOpts),\n });\n if (handle !== null) {\n state.toolSpans.set(runId, handle);\n }\n };\n\n const _handleToolEnd = (output: string, runId: string): void => {\n popAndEnd(state.toolSpans, runId, undefined, (handle) => {\n const md = (handle.span.metadata ??= {} as Record<string, unknown>);\n md.tool_output_summary = summarizeToolOutput(output, toolOutputOpts);\n md.success = true;\n });\n };\n\n const _handleToolError = (err: unknown, runId: string): void => {\n popAndEnd(state.toolSpans, runId, err, (handle) => {\n const md = (handle.span.metadata ??= {} as Record<string, unknown>);\n md.success = false;\n });\n };\n\n const fp = \"morse.adapters.langgraph.llm-and-tool\";\n\n return {\n handleLLMStart: absorbErrorsSync(_handleLLMStart, { fingerprint: `${fp}.handleLLMStart` }),\n handleChatModelStart: absorbErrorsSync(_handleChatModelStart, {\n fingerprint: `${fp}.handleChatModelStart`,\n }),\n handleLLMEnd: absorbErrorsSync(_handleLLMEnd, { fingerprint: `${fp}.handleLLMEnd` }),\n handleLLMError: absorbErrorsSync(_handleLLMError, { fingerprint: `${fp}.handleLLMError` }),\n handleToolStart: absorbErrorsSync(_handleToolStart, { fingerprint: `${fp}.handleToolStart` }),\n handleToolEnd: absorbErrorsSync(_handleToolEnd, { fingerprint: `${fp}.handleToolEnd` }),\n handleToolError: absorbErrorsSync(_handleToolError, { fingerprint: `${fp}.handleToolError` }),\n };\n}\n","/**\n * `langgraph/streaming-and-checkpoint.ts` — Phase 13 W2-L.3.\n *\n * Implements streaming-token aggregation for LangGraph JS. Per the design\n * doc, streaming tokens fire `handleLLMNewToken` at very high frequency —\n * we do NOT emit a span per token (would explode volume). Instead we\n * aggregate them onto the parent llm span's `metadata.tokens_streamed`\n * counter so downstream consumers can observe streaming activity without\n * the cardinality blowup.\n *\n * Checkpoint hooks (PostgresSaver / SqliteSaver / MemorySaver) are\n * deferred to v1.5 per the design doc. The surface is left empty here;\n * W3-L composes this module with the others and may add checkpoint\n * instrumentation in a follow-up wave without touching the wiring.\n *\n * All wrappers route through `absorbErrorsSync` — telemetry MUST NOT\n * throw at the caller.\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport type { CallbackHandlerSurface } from \"./types\";\n\nconst ADAPTER_FINGERPRINT = \"langgraph.streaming\" as const;\n\n/** State carried across streaming-token events for an in-flight chain run. */\nexport interface StreamingState {\n /** Map of `runId` → SpanHandle (the in-flight llm span W2-L.2 opened). */\n llmSpans: Map<string, SpanHandle>;\n}\n\nexport interface StreamingHandlerOptions {\n /**\n * If true, emit a single `tokens_streamed` metadata count on the parent\n * llm span; default true. If false, the handler is a no-op (useful when\n * the host already tracks streaming elsewhere or wants to minimise\n * mutation under hot streaming loops).\n */\n trackStreamingTokens?: boolean;\n}\n\n/**\n * Returns the streaming-related callback method implementations.\n *\n * Currently exposes only `handleLLMNewToken`. Checkpoint methods\n * (`handleCheckpointStart` / `handleCheckpointEnd`) are not on the\n * `CallbackHandlerSurface` for v1 — they will land in v1.5 when we wire\n * the PostgresSaver/SqliteSaver hooks. Keeping this module in place\n * means W3-L's composition does not change shape when those land.\n */\nexport function createStreamingHandlers(\n state: StreamingState,\n options?: StreamingHandlerOptions,\n): Pick<CallbackHandlerSurface, \"handleLLMNewToken\"> {\n const trackStreamingTokens = options?.trackStreamingTokens ?? true;\n\n const handleLLMNewToken = absorbErrorsSync(\n (_token: string, _idx: { prompt: number; completion: number }, runId: string): void => {\n if (!trackStreamingTokens) return;\n const handle = state.llmSpans.get(runId);\n if (handle === undefined) {\n // No matching llm span — happens when the host fires tokens\n // before `handleLLMStart` or after `handleLLMEnd`, or when the\n // runId is unknown (orphan event). Drop silently.\n return;\n }\n const md = (handle.span.metadata ?? {}) as Record<string, unknown>;\n const prev = typeof md.tokens_streamed === \"number\" ? md.tokens_streamed : 0;\n md.tokens_streamed = prev + 1;\n handle.span.metadata = md;\n },\n { fingerprint: ADAPTER_FINGERPRINT },\n );\n\n return { handleLLMNewToken };\n}\n","/**\n * `@morsehq-dev/sdk/langgraph` — adapter for `@langchain/langgraph` (langgraphjs).\n *\n * W3-L: composes the three W2-L surfaces into a single\n * `MorseCallbackHandler` class exposing the full\n * `BaseCallbackHandler` shape LangGraph requires:\n *\n * - chain start/end/error — from W2-L.1 (`callback-handler.ts`)\n * - llm + tool start/end/error — from W2-L.2 (`llm-and-tool-callbacks.ts`)\n * - llm new-token streaming — from W2-L.3 (`streaming-and-checkpoint.ts`)\n *\n * Users get a single class to register with LangGraph:\n *\n * ```ts\n * import { MorseCallbackHandler } from \"@morsehq-dev/sdk/langgraph\";\n * await app.invoke(input, { callbacks: [new MorseCallbackHandler()] });\n * ```\n *\n * The W2-L.1 base class keeps its own private map of open chain spans\n * (since it predates the shared `LangGraphRunState`). To keep things\n * coherent for advanced consumers reading `state`, the composed class\n * overrides `handleChainStart` / `handleChainEnd` / `handleChainError`\n * to ALSO maintain `state.chainSpans` in addition to calling the\n * super-class method. The base-class behavior is unchanged.\n */\n\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport {\n MorseCallbackHandler as BaseMorseCallbackHandler,\n type MorseCallbackHandlerOptions,\n getCallbackHandlerClass,\n} from \"./callback-handler\";\nimport {\n createLlmAndToolHandlers,\n type LangGraphRunState,\n type LlmAndToolHandlerOptions,\n} from \"./llm-and-tool-callbacks\";\nimport { createStreamingHandlers, type StreamingHandlerOptions } from \"./streaming-and-checkpoint\";\nimport type { CallbackHandlerSurface, SerializedLike } from \"./types\";\n\n/** Combined options for the composed handler. */\nexport type ComposedMorseCallbackHandlerOptions = MorseCallbackHandlerOptions &\n LlmAndToolHandlerOptions &\n StreamingHandlerOptions;\n\n/**\n * Composed `MorseCallbackHandler` — the user-facing class.\n *\n * Inherits chain handlers from `BaseMorseCallbackHandler` (W2-L.1)\n * and attaches the W2-L.2 llm/tool methods and W2-L.3 streaming method\n * onto each instance. All four sources share a single\n * `LangGraphRunState` so future cross-method correlation can read\n * llm/tool/chain maps from one place.\n */\nexport class MorseCallbackHandler\n extends BaseMorseCallbackHandler\n implements CallbackHandlerSurface\n{\n private readonly _state: LangGraphRunState;\n\n // The slotted methods from W2-L.2 / W2-L.3 — `!` because they are\n // assigned in the constructor via `Object.assign`-style copy.\n public handleLLMStart!: NonNullable<CallbackHandlerSurface[\"handleLLMStart\"]>;\n public handleChatModelStart!: NonNullable<CallbackHandlerSurface[\"handleChatModelStart\"]>;\n public handleLLMEnd!: NonNullable<CallbackHandlerSurface[\"handleLLMEnd\"]>;\n public handleLLMError!: NonNullable<CallbackHandlerSurface[\"handleLLMError\"]>;\n public handleToolStart!: NonNullable<CallbackHandlerSurface[\"handleToolStart\"]>;\n public handleToolEnd!: NonNullable<CallbackHandlerSurface[\"handleToolEnd\"]>;\n public handleToolError!: NonNullable<CallbackHandlerSurface[\"handleToolError\"]>;\n public handleLLMNewToken!: NonNullable<CallbackHandlerSurface[\"handleLLMNewToken\"]>;\n\n constructor(options?: ComposedMorseCallbackHandlerOptions) {\n super(options);\n\n this._state = {\n llmSpans: new Map<string, SpanHandle>(),\n toolSpans: new Map<string, SpanHandle>(),\n chainSpans: new Map<string, SpanHandle>(),\n };\n\n const llmAndTool = createLlmAndToolHandlers(this._state, {\n toolInputMaxBytes: options?.toolInputMaxBytes,\n toolOutputMaxBytes: options?.toolOutputMaxBytes,\n });\n const streaming = createStreamingHandlers(this._state, {\n trackStreamingTokens: options?.trackStreamingTokens,\n });\n\n // Copy method implementations onto the instance so LangGraph (which\n // looks up handlers via `typeof handler[method] === \"function\"` on\n // the instance) sees them. Use non-null assertions because the\n // factories always return defined methods.\n this.handleLLMStart = llmAndTool.handleLLMStart!;\n this.handleChatModelStart = llmAndTool.handleChatModelStart!;\n this.handleLLMEnd = llmAndTool.handleLLMEnd!;\n this.handleLLMError = llmAndTool.handleLLMError!;\n this.handleToolStart = llmAndTool.handleToolStart!;\n this.handleToolEnd = llmAndTool.handleToolEnd!;\n this.handleToolError = llmAndTool.handleToolError!;\n this.handleLLMNewToken = streaming.handleLLMNewToken!;\n }\n\n /**\n * The W2-L.1 base maintains its own private chain-span map. We\n * mirror chain handles into the shared `LangGraphRunState` so future\n * cross-fragment logic can correlate by runId. Never throws — the\n * map mutation is in-process and the super method already absorbs\n * errors via `absorbErrorsSync`.\n */\n override handleChainStart(\n chain: SerializedLike,\n inputs: Record<string, unknown>,\n runId: string,\n parentRunId?: string,\n tags?: string[],\n metadata?: Record<string, unknown>,\n runType?: string,\n runName?: string,\n ): void {\n super.handleChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, runName);\n // Mirror — read the now-open span from the base via the internal\n // accessor used in tests, then re-insert it (the base `_takeSpan`\n // deletes on read, so we'd break the base if we used it here).\n // Instead reach into the base via the public-ish `_setSpan` would\n // double-insert; safer to keep our own shadow keyed off the same\n // runId.\n this._shadowSetChainSpan(runId);\n }\n\n override handleChainEnd(\n outputs: Record<string, unknown>,\n runId: string,\n parentRunId?: string,\n ): void {\n super.handleChainEnd(outputs, runId, parentRunId);\n this._state.chainSpans.delete(runId);\n }\n\n override handleChainError(err: unknown, runId: string, parentRunId?: string): void {\n super.handleChainError(err, runId, parentRunId);\n this._state.chainSpans.delete(runId);\n }\n\n /**\n * Marker insertion for the shared chainSpans map. The W2-L.1 base\n * holds the real `SpanHandle` privately; for the shared map we just\n * need *presence* keyed by runId so downstream fragments can detect\n * an in-flight chain. We stash a sentinel handle whose `end()` is a\n * no-op — the base owns the real lifecycle.\n */\n private _shadowSetChainSpan(runId: string): void {\n if (typeof runId !== \"string\" || runId.length === 0) return;\n const sentinel: SpanHandle = {\n // The base owns the real SpanData — for the shadow we use a\n // minimal stand-in. Downstream readers only check map membership,\n // not field access on this object.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n span: {} as any,\n end(): void {\n /* no-op */\n },\n };\n this._state.chainSpans.set(runId, sentinel);\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Re-exports */\n/* ------------------------------------------------------------------------ */\n\n// Low-level pieces for advanced users who want to compose their own\n// handler shape.\nexport { BaseMorseCallbackHandler };\nexport { getCallbackHandlerClass };\nexport { createLlmAndToolHandlers } from \"./llm-and-tool-callbacks\";\nexport { createStreamingHandlers } from \"./streaming-and-checkpoint\";\n\nexport type {\n MorseCallbackHandlerOptions,\n LangGraphRunState,\n LlmAndToolHandlerOptions,\n StreamingHandlerOptions,\n};\n\nexport type {\n BaseMessageLike,\n CallbackHandlerSurface,\n LangChainCoreCallbacksModuleLike,\n LLMResultLike,\n SerializedLike,\n} from \"./types\";\n"]}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkTV7TRP5O_cjs = require('../chunk-TV7TRP5O.cjs');
3
+ var chunk3I7IGP3P_cjs = require('../chunk-3I7IGP3P.cjs');
4
4
  var chunkSWQOPFE4_cjs = require('../chunk-SWQOPFE4.cjs');
5
5
  var chunkRBNCTHK3_cjs = require('../chunk-RBNCTHK3.cjs');
6
- var chunk6BNMYEMW_cjs = require('../chunk-6BNMYEMW.cjs');
6
+ var chunk4IUHXUCJ_cjs = require('../chunk-4IUHXUCJ.cjs');
7
7
 
8
8
  // src/openai/index.ts
9
- chunk6BNMYEMW_cjs.init_tracing();
10
- chunk6BNMYEMW_cjs.init_diagnostics();
9
+ chunk4IUHXUCJ_cjs.init_tracing();
10
+ chunk4IUHXUCJ_cjs.init_diagnostics();
11
11
  var WRAPPED_CLIENT = /* @__PURE__ */ Symbol.for("morse.openai.wrapped");
12
12
  function wrapOpenAI(client, options = {}) {
13
13
  if (!client || typeof client !== "object") return client;
@@ -49,10 +49,10 @@ function isOpenAiWrapped(client) {
49
49
  function buildPatchedCreate(original, options) {
50
50
  const agentName = options.defaultAgentName ?? "openai.chat.completions.create";
51
51
  return async function patchedCreate(params, callOptions) {
52
- const inTrace = chunk6BNMYEMW_cjs.getActiveTraceState() !== null;
52
+ const inTrace = chunk4IUHXUCJ_cjs.getActiveTraceState() !== null;
53
53
  const work = async () => {
54
- chunkTV7TRP5O_cjs.setActiveFramework("openai");
55
- const handle = chunk6BNMYEMW_cjs.startSpan({
54
+ chunk3I7IGP3P_cjs.setActiveFramework("openai");
55
+ const handle = chunk4IUHXUCJ_cjs.startSpan({
56
56
  name: "openai.chat.completions.create",
57
57
  type: "llm",
58
58
  metadata: { model: params?.model }
@@ -88,9 +88,9 @@ function buildPatchedCreate(original, options) {
88
88
  if (cost !== void 0) handle.span.cost_usd = cost;
89
89
  }
90
90
  handle.span.context_segments = segments;
91
- const inputData = chunkTV7TRP5O_cjs.captureInputMessages(params?.messages);
91
+ const inputData = chunk3I7IGP3P_cjs.captureInputMessages(params?.messages);
92
92
  if (inputData !== void 0) handle.span.input_data = inputData;
93
- const outputText = chunkTV7TRP5O_cjs.extractOpenAiOutputText(response?.choices);
93
+ const outputText = chunk3I7IGP3P_cjs.extractOpenAiOutputText(response?.choices);
94
94
  if (outputText !== void 0) handle.span.output_data = { content: outputText };
95
95
  }
96
96
  } catch (err) {
@@ -104,7 +104,7 @@ function buildPatchedCreate(original, options) {
104
104
  }
105
105
  let result;
106
106
  let thrown;
107
- await chunk6BNMYEMW_cjs.runAsync({ agentName }, async (runHandle) => {
107
+ await chunk4IUHXUCJ_cjs.runAsync({ agentName }, async (runHandle) => {
108
108
  runHandle.setOutcome(true);
109
109
  try {
110
110
  result = await work();
@@ -128,7 +128,7 @@ function safeExtractSegments(params) {
128
128
  }
129
129
  function reportSwallowed(err, fingerprint) {
130
130
  try {
131
- chunk6BNMYEMW_cjs.report(err, { fingerprint });
131
+ chunk4IUHXUCJ_cjs.report(err, { fingerprint });
132
132
  } catch {
133
133
  }
134
134
  }
@@ -1,7 +1,7 @@
1
- import { setActiveFramework, captureInputMessages, extractOpenAiOutputText } from '../chunk-VIOT3AOP.js';
1
+ import { setActiveFramework, captureInputMessages, extractOpenAiOutputText } from '../chunk-6JHMFFPE.js';
2
2
  import { calculateCost } from '../chunk-4FALQMOZ.js';
3
3
  import { decomposeOpenAiMessages } from '../chunk-MLDVXMQD.js';
4
- import { init_tracing, init_diagnostics, getActiveTraceState, runAsync, startSpan, report } from '../chunk-6T6ZPOKZ.js';
4
+ import { init_tracing, init_diagnostics, getActiveTraceState, runAsync, startSpan, report } from '../chunk-PXHTLCEU.js';
5
5
 
6
6
  // src/openai/index.ts
7
7
  init_tracing();
@@ -1,14 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var chunkBIP66M44_cjs = require('../chunk-BIP66M44.cjs');
4
- var chunk52JTU4LH_cjs = require('../chunk-52JTU4LH.cjs');
5
- var chunk4CMVMTFB_cjs = require('../chunk-4CMVMTFB.cjs');
3
+ var chunkFKYI3N5N_cjs = require('../chunk-FKYI3N5N.cjs');
4
+ var chunkIDKQZ4X5_cjs = require('../chunk-IDKQZ4X5.cjs');
5
+ var chunkPSNZZBQJ_cjs = require('../chunk-PSNZZBQJ.cjs');
6
6
  var chunkSWQOPFE4_cjs = require('../chunk-SWQOPFE4.cjs');
7
7
  var chunkRBNCTHK3_cjs = require('../chunk-RBNCTHK3.cjs');
8
- var chunk6BNMYEMW_cjs = require('../chunk-6BNMYEMW.cjs');
8
+ var chunk4IUHXUCJ_cjs = require('../chunk-4IUHXUCJ.cjs');
9
9
 
10
10
  // src/openai-agents/runner-wrapper.ts
11
- chunk6BNMYEMW_cjs.init_tracing();
11
+ chunk4IUHXUCJ_cjs.init_tracing();
12
12
  var WRAPPED_RUNNER = /* @__PURE__ */ Symbol.for("morse.openai-agents.wrapped");
13
13
  var INSTALL_SENTINEL = /* @__PURE__ */ Symbol.for("morse.openai-agents.installed");
14
14
  var ORIGINALS_SENTINEL = /* @__PURE__ */ Symbol.for("morse.openai-agents.originals");
@@ -34,7 +34,7 @@ function wrapRunner(runner, options = {}) {
34
34
  });
35
35
  return wrapper;
36
36
  }
37
- var instrumentOpenAIAgents = chunk4CMVMTFB_cjs.absorbErrorsAsync(
37
+ var instrumentOpenAIAgents = chunkPSNZZBQJ_cjs.absorbErrorsAsync(
38
38
  async (runnerOrOptions = void 0, maybeOptions = {}) => {
39
39
  if (runnerOrOptions && isRunner(runnerOrOptions)) {
40
40
  const opts2 = maybeOptions ?? {};
@@ -67,7 +67,7 @@ var instrumentOpenAIAgents = chunk4CMVMTFB_cjs.absorbErrorsAsync(
67
67
  },
68
68
  { fingerprint: "morse.adapters.openai-agents.install" }
69
69
  );
70
- var uninstallOpenAIAgents = chunk4CMVMTFB_cjs.absorbErrorsSync(
70
+ var uninstallOpenAIAgents = chunkPSNZZBQJ_cjs.absorbErrorsSync(
71
71
  (openaiAgentsModule) => {
72
72
  if (!openaiAgentsModule || typeof openaiAgentsModule !== "object") return;
73
73
  const mod = openaiAgentsModule;
@@ -114,13 +114,34 @@ function stringifyModel(m) {
114
114
  if (m && typeof m === "object" && typeof m.id === "string" && m.id.length > 0) return m.id;
115
115
  return void 0;
116
116
  }
117
+ function resolveThreadId(callOptions) {
118
+ if (!callOptions) return void 0;
119
+ try {
120
+ const session = callOptions.session;
121
+ if (session) {
122
+ const sid = session.sessionId ?? session.session_id;
123
+ if (sid) return sid;
124
+ }
125
+ if (callOptions.conversationId) return callOptions.conversationId;
126
+ const ctx = callOptions.context;
127
+ if (!ctx || typeof ctx !== "object") return void 0;
128
+ const threadPk = ctx.thread?.id;
129
+ if (threadPk) return threadPk;
130
+ for (const key of ["threadId", "thread_id", "sessionId", "session_id", "conversationId"]) {
131
+ if (ctx[key]) return ctx[key];
132
+ }
133
+ } catch {
134
+ }
135
+ return void 0;
136
+ }
117
137
  function buildPatchedRun(original, options) {
118
138
  return function patchedRun(agent, input, callOptions) {
119
139
  const boundOriginal = (a, i, o) => original.call(this, a, i, o);
120
140
  const agentName = (agent && typeof agent === "object" && typeof agent.name === "string" && agent.name.length > 0 ? agent.name : void 0) ?? options.defaultAgentName ?? "openai-agent";
121
141
  const model = stringifyModel(agent?.model);
122
142
  const runWithSpan = async () => {
123
- const handle = chunk52JTU4LH_cjs.emitAgentSpan({
143
+ chunk4IUHXUCJ_cjs.adoptThreadId(resolveThreadId(callOptions));
144
+ const handle = chunkIDKQZ4X5_cjs.emitAgentSpan({
124
145
  adapter: "openai-agents",
125
146
  agentName,
126
147
  model
@@ -138,13 +159,13 @@ function buildPatchedRun(original, options) {
138
159
  throw err;
139
160
  }
140
161
  };
141
- if (chunk6BNMYEMW_cjs.getActiveTraceState() !== null) {
162
+ if (chunk4IUHXUCJ_cjs.getActiveTraceState() !== null) {
142
163
  return runWithSpan();
143
164
  }
144
165
  return (async () => {
145
166
  let captured;
146
167
  let caughtErr;
147
- const runResult = await chunk6BNMYEMW_cjs.runAsync({ agentName }, async (runHandle) => {
168
+ const runResult = await chunk4IUHXUCJ_cjs.runAsync({ agentName }, async (runHandle) => {
148
169
  try {
149
170
  captured = await runWithSpan();
150
171
  runHandle.setOutcome(true);
@@ -173,10 +194,10 @@ function installLlmAndToolInstrumentation(runner, options) {
173
194
  const opts = options ?? {};
174
195
  const llmStack = [];
175
196
  const toolStack = [];
176
- const onLlmStart = chunk4CMVMTFB_cjs.absorbErrorsSync(
197
+ const onLlmStart = chunkPSNZZBQJ_cjs.absorbErrorsSync(
177
198
  (event) => {
178
199
  const contextSegments = chunkRBNCTHK3_cjs.decomposeOpenAiMessages(event.llm?.messages, event.llm?.tools);
179
- const handle = chunk52JTU4LH_cjs.emitLlmSpan({
200
+ const handle = chunkIDKQZ4X5_cjs.emitLlmSpan({
180
201
  adapter: ADAPTER,
181
202
  model: typeof event.llm?.model === "string" && event.llm.model.length > 0 ? event.llm.model : "unknown",
182
203
  provider: typeof event.llm?.provider === "string" ? event.llm.provider : void 0,
@@ -186,7 +207,7 @@ function installLlmAndToolInstrumentation(runner, options) {
186
207
  },
187
208
  { fingerprint: "morse.openai-agents.llm_call_start" }
188
209
  );
189
- const onLlmEnd = chunk4CMVMTFB_cjs.absorbErrorsSync(
210
+ const onLlmEnd = chunkPSNZZBQJ_cjs.absorbErrorsSync(
190
211
  (event) => {
191
212
  const handle = llmStack.shift();
192
213
  if (handle === void 0) return;
@@ -218,14 +239,14 @@ function installLlmAndToolInstrumentation(runner, options) {
218
239
  },
219
240
  { fingerprint: "morse.openai-agents.llm_call_end" }
220
241
  );
221
- const onToolStart = chunk4CMVMTFB_cjs.absorbErrorsSync(
242
+ const onToolStart = chunkPSNZZBQJ_cjs.absorbErrorsSync(
222
243
  (event) => {
223
244
  const toolName = typeof event.tool?.name === "string" && event.tool.name.length > 0 ? event.tool.name : "unknown";
224
- const inputSummary = chunkBIP66M44_cjs.summarizeToolInput(
245
+ const inputSummary = chunkFKYI3N5N_cjs.summarizeToolInput(
225
246
  event.tool?.input,
226
247
  opts.toolInputMaxBytes !== void 0 ? { maxBytes: opts.toolInputMaxBytes } : void 0
227
248
  );
228
- const handle = chunk52JTU4LH_cjs.emitToolSpan({
249
+ const handle = chunkIDKQZ4X5_cjs.emitToolSpan({
229
250
  adapter: ADAPTER,
230
251
  toolName,
231
252
  inputSummary
@@ -234,11 +255,11 @@ function installLlmAndToolInstrumentation(runner, options) {
234
255
  },
235
256
  { fingerprint: "morse.openai-agents.tool_call_start" }
236
257
  );
237
- const onToolEnd = chunk4CMVMTFB_cjs.absorbErrorsSync(
258
+ const onToolEnd = chunkPSNZZBQJ_cjs.absorbErrorsSync(
238
259
  (event) => {
239
260
  const handle = toolStack.shift();
240
261
  if (handle === void 0) return;
241
- const outputSummary = chunkBIP66M44_cjs.summarizeToolOutput(
262
+ const outputSummary = chunkFKYI3N5N_cjs.summarizeToolOutput(
242
263
  event.tool?.output,
243
264
  opts.toolOutputMaxBytes !== void 0 ? { maxBytes: opts.toolOutputMaxBytes } : void 0
244
265
  );
@@ -288,11 +309,18 @@ var _handleHandoffEvent = (event) => {
288
309
  if (typeof from !== "string" || from.length === 0) return;
289
310
  if (typeof to !== "string" || to.length === 0) return;
290
311
  const reason = typeof handoff.reason === "string" && handoff.reason.length > 0 ? handoff.reason : void 0;
312
+ chunkIDKQZ4X5_cjs.emitHandoffSpan({
313
+ adapter: "openai-agents",
314
+ fromAgent: from,
315
+ toAgent: to,
316
+ reason
317
+ })?.end();
291
318
  const attributes = {
292
- handoff_from: from
319
+ handoff_from: from,
320
+ askl_handoff_from: from
293
321
  };
294
322
  if (reason !== void 0) attributes.handoff_reason = reason;
295
- const handle = chunk52JTU4LH_cjs.emitSubagentSpan({
323
+ const handle = chunkIDKQZ4X5_cjs.emitSubagentSpan({
296
324
  adapter: "openai-agents",
297
325
  parentAgentName: from,
298
326
  subagentName: to,
@@ -301,7 +329,7 @@ var _handleHandoffEvent = (event) => {
301
329
  });
302
330
  handle?.end();
303
331
  };
304
- var handleHandoffEvent = chunk4CMVMTFB_cjs.absorbErrorsSync(_handleHandoffEvent, {
332
+ var handleHandoffEvent = chunkPSNZZBQJ_cjs.absorbErrorsSync(_handleHandoffEvent, {
305
333
  fingerprint: "morse.adapters.openai-agents.handoff.listener"
306
334
  });
307
335
  function installHandoffInstrumentation(runner) {
@@ -338,7 +366,7 @@ var _handleGuardrailEvent = (payload) => {
338
366
  const guardrailMeta = { passed };
339
367
  if (name !== void 0) guardrailMeta.name = name;
340
368
  if (reason !== void 0) guardrailMeta.reason = reason;
341
- const handle = chunk52JTU4LH_cjs.emitToolSpan({
369
+ const handle = chunkIDKQZ4X5_cjs.emitToolSpan({
342
370
  adapter: "openai-agents",
343
371
  toolName: `guardrail.${name ?? "anon"}`,
344
372
  success: passed
@@ -355,7 +383,7 @@ var _handleGuardrailEvent = (payload) => {
355
383
  handle.end(new Error(`guardrail failed: ${reason ?? "no reason"}`));
356
384
  }
357
385
  };
358
- var handleGuardrailEvent = chunk4CMVMTFB_cjs.absorbErrorsSync(
386
+ var handleGuardrailEvent = chunkPSNZZBQJ_cjs.absorbErrorsSync(
359
387
  _handleGuardrailEvent,
360
388
  { fingerprint: "morse.openai-agents.guardrail.handle" }
361
389
  );
@@ -384,7 +412,7 @@ function installGuardrailInstrumentation(runner) {
384
412
  }
385
413
 
386
414
  // src/openai-agents/trace-processor.ts
387
- chunk6BNMYEMW_cjs.init_diagnostics();
415
+ chunk4IUHXUCJ_cjs.init_diagnostics();
388
416
  var ADAPTER2 = "openai-agents";
389
417
  function safe(fn) {
390
418
  try {
@@ -503,32 +531,32 @@ var MorseTraceProcessor = class {
503
531
  const name = typeof d.name === "string" && d.name.length > 0 ? d.name : void 0;
504
532
  switch (type) {
505
533
  case "agent":
506
- return chunk52JTU4LH_cjs.emitAgentSpan({
534
+ return chunkIDKQZ4X5_cjs.emitAgentSpan({
507
535
  adapter: ADAPTER2,
508
536
  agentName: name ?? "openai-agent"
509
537
  });
510
538
  case "generation":
511
539
  case "response": {
512
540
  const model = typeof d.model === "string" && d.model.length > 0 ? d.model : "unknown";
513
- return chunk52JTU4LH_cjs.emitLlmSpan({ adapter: ADAPTER2, model });
541
+ return chunkIDKQZ4X5_cjs.emitLlmSpan({ adapter: ADAPTER2, model });
514
542
  }
515
543
  case "function": {
516
544
  const inputOpts = this.options.toolInputMaxBytes ? { maxBytes: this.options.toolInputMaxBytes } : void 0;
517
- return chunk52JTU4LH_cjs.emitToolSpan({
545
+ return chunkIDKQZ4X5_cjs.emitToolSpan({
518
546
  adapter: ADAPTER2,
519
547
  toolName: name ?? "function",
520
- inputSummary: d.input !== void 0 ? chunkBIP66M44_cjs.summarizeToolInput(d.input, inputOpts) : void 0
548
+ inputSummary: d.input !== void 0 ? chunkFKYI3N5N_cjs.summarizeToolInput(d.input, inputOpts) : void 0
521
549
  });
522
550
  }
523
551
  case "handoff":
524
- return chunk52JTU4LH_cjs.emitSubagentSpan({
552
+ return chunkIDKQZ4X5_cjs.emitSubagentSpan({
525
553
  adapter: ADAPTER2,
526
554
  parentAgentName: typeof d.from_agent === "string" ? d.from_agent : "unknown",
527
555
  subagentName: typeof d.to_agent === "string" ? d.to_agent : name ?? "unknown",
528
556
  taskDescription: typeof d.reason === "string" ? d.reason : void 0
529
557
  });
530
558
  case "guardrail": {
531
- const handle = chunk52JTU4LH_cjs.emitToolSpan({
559
+ const handle = chunkIDKQZ4X5_cjs.emitToolSpan({
532
560
  adapter: ADAPTER2,
533
561
  toolName: `guardrail.${name ?? "anon"}`
534
562
  });
@@ -546,17 +574,17 @@ var MorseTraceProcessor = class {
546
574
  return handle;
547
575
  }
548
576
  case "mcp_list_tools":
549
- return chunk52JTU4LH_cjs.emitToolSpan({
577
+ return chunkIDKQZ4X5_cjs.emitToolSpan({
550
578
  adapter: ADAPTER2,
551
579
  toolName: `mcp.list_tools.${name ?? "anon"}`
552
580
  });
553
581
  case "custom":
554
- return chunk52JTU4LH_cjs.emitToolSpan({
582
+ return chunkIDKQZ4X5_cjs.emitToolSpan({
555
583
  adapter: ADAPTER2,
556
584
  toolName: `custom.${name ?? "anon"}`
557
585
  });
558
586
  default:
559
- return chunk52JTU4LH_cjs.emitToolSpan({
587
+ return chunkIDKQZ4X5_cjs.emitToolSpan({
560
588
  adapter: ADAPTER2,
561
589
  toolName: `${type || "unknown"}.${name ?? "anon"}`
562
590
  });
@@ -585,7 +613,7 @@ var MorseTraceProcessor = class {
585
613
  const outputOpts = this.options.toolOutputMaxBytes ? { maxBytes: this.options.toolOutputMaxBytes } : void 0;
586
614
  handle.span.metadata = {
587
615
  ...handle.span.metadata ?? {},
588
- tool_output_summary: chunkBIP66M44_cjs.summarizeToolOutput(d.output, outputOpts)
616
+ tool_output_summary: chunkFKYI3N5N_cjs.summarizeToolOutput(d.output, outputOpts)
589
617
  };
590
618
  }
591
619
  }
@@ -621,7 +649,7 @@ function safeEnd(handle, err) {
621
649
  }
622
650
  function reportSwallowed(err, fingerprint) {
623
651
  try {
624
- chunk6BNMYEMW_cjs.report(err, { fingerprint });
652
+ chunk4IUHXUCJ_cjs.report(err, { fingerprint });
625
653
  } catch {
626
654
  }
627
655
  }