@morsehq-dev/sdk 0.5.1-rc.1 → 0.6.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/dist/anthropic/index.cjs +11 -11
  2. package/dist/anthropic/index.d.cts +1 -1
  3. package/dist/anthropic/index.d.ts +1 -1
  4. package/dist/anthropic/index.js +4 -4
  5. package/dist/anthropic-agent-sdk/index.cjs +44 -40
  6. package/dist/anthropic-agent-sdk/index.cjs.map +1 -1
  7. package/dist/anthropic-agent-sdk/index.d.cts +1 -1
  8. package/dist/anthropic-agent-sdk/index.d.ts +1 -1
  9. package/dist/anthropic-agent-sdk/index.js +10 -6
  10. package/dist/anthropic-agent-sdk/index.js.map +1 -1
  11. package/dist/browser/anthropic/index.cjs +11 -11
  12. package/dist/browser/anthropic/index.js +4 -4
  13. package/dist/browser/anthropic-agent-sdk/index.cjs +44 -40
  14. package/dist/browser/anthropic-agent-sdk/index.cjs.map +1 -1
  15. package/dist/browser/anthropic-agent-sdk/index.js +10 -6
  16. package/dist/browser/anthropic-agent-sdk/index.js.map +1 -1
  17. package/dist/browser/{chunk-ZOOYJTDT.cjs → chunk-33WDUUKZ.cjs} +18 -18
  18. package/dist/browser/{chunk-ZOOYJTDT.cjs.map → chunk-33WDUUKZ.cjs.map} +1 -1
  19. package/dist/browser/{chunk-E6WORBIU.cjs → chunk-3I7IGP3P.cjs} +5 -5
  20. package/dist/browser/chunk-3I7IGP3P.cjs.map +1 -0
  21. package/dist/{chunk-FHQGPQFR.js → browser/chunk-3OYHDDOJ.js} +27 -5
  22. package/dist/browser/chunk-3OYHDDOJ.js.map +1 -0
  23. package/dist/browser/{chunk-HJTUPXNE.cjs → chunk-4IUHXUCJ.cjs} +21 -4
  24. package/dist/browser/chunk-4IUHXUCJ.cjs.map +1 -0
  25. package/dist/browser/{chunk-AX6NEG6X.js → chunk-5TYTCLKA.js} +4 -4
  26. package/dist/browser/{chunk-AX6NEG6X.js.map → chunk-5TYTCLKA.js.map} +1 -1
  27. package/dist/browser/{chunk-5IMBYZUB.js → chunk-6JHMFFPE.js} +3 -3
  28. package/dist/browser/chunk-6JHMFFPE.js.map +1 -0
  29. package/dist/{chunk-2UFTRWUS.cjs → browser/chunk-FKYI3N5N.cjs} +7 -7
  30. package/dist/browser/{chunk-FYIQARMI.cjs.map → chunk-FKYI3N5N.cjs.map} +1 -1
  31. package/dist/browser/{chunk-TIMAH323.js → chunk-FPTUHYDJ.js} +3 -3
  32. package/dist/browser/{chunk-TIMAH323.js.map → chunk-FPTUHYDJ.js.map} +1 -1
  33. package/dist/browser/{chunk-YXCWAU36.cjs → chunk-IDKQZ4X5.cjs} +38 -15
  34. package/dist/browser/chunk-IDKQZ4X5.cjs.map +1 -0
  35. package/dist/browser/{chunk-HNOHWDK3.cjs → chunk-LIP3XCTK.cjs} +12 -12
  36. package/dist/browser/{chunk-HNOHWDK3.cjs.map → chunk-LIP3XCTK.cjs.map} +1 -1
  37. package/dist/browser/{chunk-RDNSY73W.js → chunk-OUQAH27A.js} +3 -3
  38. package/dist/browser/{chunk-RDNSY73W.js.map → chunk-OUQAH27A.js.map} +1 -1
  39. package/dist/browser/{chunk-Z26QGUMP.cjs → chunk-PSNZZBQJ.cjs} +6 -6
  40. package/dist/browser/{chunk-Z26QGUMP.cjs.map → chunk-PSNZZBQJ.cjs.map} +1 -1
  41. package/dist/browser/{chunk-7G266PKE.js → chunk-PXHTLCEU.js} +21 -5
  42. package/dist/browser/chunk-PXHTLCEU.js.map +1 -0
  43. package/dist/browser/{chunk-VSHCKROM.js → chunk-TRVACYUN.js} +5 -5
  44. package/dist/browser/{chunk-VSHCKROM.js.map → chunk-TRVACYUN.js.map} +1 -1
  45. package/dist/browser/index.cjs +99 -99
  46. package/dist/browser/index.js +8 -8
  47. package/dist/browser/integrations/pino.cjs +4 -4
  48. package/dist/browser/integrations/pino.js +3 -3
  49. package/dist/browser/langchain/index.cjs +28 -26
  50. package/dist/browser/langchain/index.cjs.map +1 -1
  51. package/dist/browser/langchain/index.js +13 -11
  52. package/dist/browser/langchain/index.js.map +1 -1
  53. package/dist/browser/langgraph/index.cjs +32 -30
  54. package/dist/browser/langgraph/index.cjs.map +1 -1
  55. package/dist/browser/langgraph/index.js +10 -8
  56. package/dist/browser/langgraph/index.js.map +1 -1
  57. package/dist/browser/openai/index.cjs +11 -11
  58. package/dist/browser/openai/index.js +2 -2
  59. package/dist/browser/openai-agents/index.cjs +63 -35
  60. package/dist/browser/openai-agents/index.cjs.map +1 -1
  61. package/dist/browser/openai-agents/index.js +33 -5
  62. package/dist/browser/openai-agents/index.js.map +1 -1
  63. package/dist/browser/vercel-ai/index.cjs +14 -14
  64. package/dist/browser/vercel-ai/index.js +3 -3
  65. package/dist/{chunk-ZTBAMSCC.cjs → chunk-7DALGJL2.cjs} +72 -20
  66. package/dist/chunk-7DALGJL2.cjs.map +1 -0
  67. package/dist/{chunk-KALB7HJ5.cjs → chunk-B7TGG62X.cjs} +12 -12
  68. package/dist/{chunk-KALB7HJ5.cjs.map → chunk-B7TGG62X.cjs.map} +1 -1
  69. package/dist/{chunk-GATTHW3X.cjs → chunk-COZFARLL.cjs} +5 -5
  70. package/dist/chunk-COZFARLL.cjs.map +1 -0
  71. package/dist/{chunk-XBI4AMCW.cjs → chunk-DXTNU2KT.cjs} +38 -15
  72. package/dist/chunk-DXTNU2KT.cjs.map +1 -0
  73. package/dist/{chunk-5MJS5ECA.js → chunk-ERH3TNXZ.js} +3 -3
  74. package/dist/{chunk-5MJS5ECA.js.map → chunk-ERH3TNXZ.js.map} +1 -1
  75. package/dist/{chunk-QLJAATBR.cjs → chunk-ESJJXXB6.cjs} +6 -6
  76. package/dist/{chunk-QLJAATBR.cjs.map → chunk-ESJJXXB6.cjs.map} +1 -1
  77. package/dist/{chunk-HCN6Z56N.cjs → chunk-ETRNCI5Z.cjs} +18 -18
  78. package/dist/{chunk-HCN6Z56N.cjs.map → chunk-ETRNCI5Z.cjs.map} +1 -1
  79. package/dist/{browser/chunk-PIZVCAW7.js → chunk-GULJAURY.js} +27 -5
  80. package/dist/chunk-GULJAURY.js.map +1 -0
  81. package/dist/{chunk-YGKEP2GY.js → chunk-HJV35HWL.js} +72 -21
  82. package/dist/chunk-HJV35HWL.js.map +1 -0
  83. package/dist/{chunk-ZMRXUZ5L.js → chunk-L7AD4KUD.js} +3 -3
  84. package/dist/chunk-L7AD4KUD.js.map +1 -0
  85. package/dist/{chunk-GQVNZPRF.js → chunk-QBDTQTMN.js} +3 -3
  86. package/dist/{chunk-GQVNZPRF.js.map → chunk-QBDTQTMN.js.map} +1 -1
  87. package/dist/{browser/chunk-FYIQARMI.cjs → chunk-WG4H5JC6.cjs} +7 -7
  88. package/dist/{chunk-2UFTRWUS.cjs.map → chunk-WG4H5JC6.cjs.map} +1 -1
  89. package/dist/{chunk-62FWHZXN.js → chunk-XS4P7XPV.js} +5 -5
  90. package/dist/{chunk-62FWHZXN.js.map → chunk-XS4P7XPV.js.map} +1 -1
  91. package/dist/{chunk-4WUG3RMJ.js → chunk-YVLEDBN7.js} +4 -4
  92. package/dist/{chunk-4WUG3RMJ.js.map → chunk-YVLEDBN7.js.map} +1 -1
  93. package/dist/index.cjs +106 -106
  94. package/dist/index.cjs.map +1 -1
  95. package/dist/index.d.cts +2 -2
  96. package/dist/index.d.ts +2 -2
  97. package/dist/index.js +9 -9
  98. package/dist/index.js.map +1 -1
  99. package/dist/integrations/pino.cjs +4 -4
  100. package/dist/integrations/pino.js +3 -3
  101. package/dist/langchain/index.cjs +28 -26
  102. package/dist/langchain/index.cjs.map +1 -1
  103. package/dist/langchain/index.d.cts +3 -3
  104. package/dist/langchain/index.d.ts +3 -3
  105. package/dist/langchain/index.js +13 -11
  106. package/dist/langchain/index.js.map +1 -1
  107. package/dist/langgraph/index.cjs +32 -30
  108. package/dist/langgraph/index.cjs.map +1 -1
  109. package/dist/langgraph/index.d.cts +3 -3
  110. package/dist/langgraph/index.d.ts +3 -3
  111. package/dist/langgraph/index.js +10 -8
  112. package/dist/langgraph/index.js.map +1 -1
  113. package/dist/openai/index.cjs +11 -11
  114. package/dist/openai/index.js +2 -2
  115. package/dist/openai-agents/index.cjs +63 -35
  116. package/dist/openai-agents/index.cjs.map +1 -1
  117. package/dist/openai-agents/index.d.cts +13 -4
  118. package/dist/openai-agents/index.d.ts +13 -4
  119. package/dist/openai-agents/index.js +33 -5
  120. package/dist/openai-agents/index.js.map +1 -1
  121. package/dist/{spans-DZtMuBvc.d.cts → spans-CBMWNg2C.d.cts} +1 -0
  122. package/dist/{spans-DZtMuBvc.d.ts → spans-CBMWNg2C.d.ts} +1 -0
  123. package/dist/{tracing-J8ZgxVzU.d.ts → tracing-BMWTyexr.d.ts} +1 -1
  124. package/dist/{tracing-CNlre8TK.d.cts → tracing-Bh-cbvr6.d.cts} +1 -1
  125. package/dist/vercel-ai/index.cjs +14 -14
  126. package/dist/vercel-ai/index.js +3 -3
  127. package/package.json +1 -1
  128. package/dist/browser/chunk-5IMBYZUB.js.map +0 -1
  129. package/dist/browser/chunk-7G266PKE.js.map +0 -1
  130. package/dist/browser/chunk-E6WORBIU.cjs.map +0 -1
  131. package/dist/browser/chunk-HJTUPXNE.cjs.map +0 -1
  132. package/dist/browser/chunk-PIZVCAW7.js.map +0 -1
  133. package/dist/browser/chunk-YXCWAU36.cjs.map +0 -1
  134. package/dist/chunk-FHQGPQFR.js.map +0 -1
  135. package/dist/chunk-GATTHW3X.cjs.map +0 -1
  136. package/dist/chunk-XBI4AMCW.cjs.map +0 -1
  137. package/dist/chunk-YGKEP2GY.js.map +0 -1
  138. package/dist/chunk-ZMRXUZ5L.js.map +0 -1
  139. package/dist/chunk-ZTBAMSCC.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/anthropic/index.ts"],"names":["init_spans","init_tracing","absorbErrorsAsync","opts","absorbErrorsSync","getActiveTraceState","setActiveFramework","startSpan","calculateCost","captureInputMessages","extractAnthropicOutputText","runAsync","nowIso","generateSpanId"],"mappings":"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","file":"chunk-HCN6Z56N.cjs","sourcesContent":["/**\n * `@morsehq-dev/sdk/anthropic` — Anthropic SDK instrumentation.\n *\n * Wraps `@anthropic-ai/sdk` `client.messages.create` so every Claude call\n * emits an `llm` span carrying pre-segmented `context_segments`. The\n * server-side classifier then skips its own messages-array partitioning\n * and persists the SDK-supplied segments verbatim.\n *\n * Two entry points:\n *\n * - `wrapAnthropic(client)` — returns a Proxy-like wrapper that\n * intercepts `messages.create`. Always succeeds. The customer keeps\n * using the wrapper as if it were the real client.\n *\n * - `instrumentAnthropic(client?)` — top-level helper. If a client is\n * passed, returns the wrapped form. If no client is passed AND the\n * `@anthropic-ai/sdk` package can be loaded, attempts to patch\n * `Messages.prototype.create` so every fresh `new Anthropic()` is\n * instrumented automatically. The prototype path is best-effort —\n * it is documented as fragile across Anthropic SDK versions, and\n * `wrapAnthropic` is the recommended public entry.\n *\n * Idempotent. `uninstallAnthropic()` restores the prototype and clears\n * the install sentinel.\n *\n * Wrapped under `absorbErrors*` so a tracing failure can never break the\n * customer's Anthropic call — at worst, calls go untraced.\n *\n * Mirrors `apps/sdk/typescript/src/vercel-ai/index.ts` in shape and\n * `openspec/changes/.../specs/observability/spec.md` (CTX-08) in\n * segmentation contract.\n */\n\nimport { absorbErrorsAsync, absorbErrorsSync } from \"../_internal/errors\";\nimport { calculateCost } from \"../_internal/pricing\";\nimport type { ContextSegment, SpanData } from \"../_internal/spans\";\nimport { generateSpanId, nowIso } from \"../_internal/spans\";\nimport { setActiveFramework } from \"../_internal/active-framework\";\nimport { captureInputMessages, extractAnthropicOutputText } from \"../_internal/llm-io\";\nimport { getActiveTraceState, runAsync as _runAsync, startSpan } from \"../_internal/tracing\";\n\n/* ------------------------------------------------------------------------ */\n/* Public types — minimal structural shapes, NOT a hard dep on `@anthropic-ai/sdk` */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Subset of `@anthropic-ai/sdk`'s `MessageCreateParams` we read from. We\n * deliberately decline to import the real types so the SDK works even when\n * `@anthropic-ai/sdk` isn't installed (it's an optional peer dep).\n */\nexport interface AnthropicMessageCreateParams {\n model: string;\n max_tokens?: number;\n system?: string | AnthropicTextBlockParam[];\n messages: AnthropicMessageParam[];\n tools?: AnthropicToolParam[];\n tool_choice?: unknown;\n // Allow forward-compat fields without complaint.\n [key: string]: unknown;\n}\n\nexport interface AnthropicTextBlockParam {\n type: \"text\";\n text: string;\n cache_control?: { type: \"ephemeral\" } | null;\n}\n\nexport interface AnthropicToolUseBlockParam {\n type: \"tool_use\";\n id: string;\n name: string;\n input: unknown;\n}\n\nexport interface AnthropicToolResultBlockParam {\n type: \"tool_result\";\n tool_use_id: string;\n content: string | Array<{ type: string; text?: string; [k: string]: unknown }>;\n is_error?: boolean;\n}\n\nexport type AnthropicContentBlockParam =\n | AnthropicTextBlockParam\n | AnthropicToolUseBlockParam\n | AnthropicToolResultBlockParam\n | { type: string; [k: string]: unknown };\n\nexport interface AnthropicMessageParam {\n role: \"user\" | \"assistant\" | string;\n content: string | AnthropicContentBlockParam[];\n}\n\nexport interface AnthropicToolParam {\n name: string;\n description?: string;\n input_schema?: unknown;\n // Anthropic supports custom tool types — let through.\n [key: string]: unknown;\n}\n\nexport interface AnthropicUsage {\n input_tokens?: number;\n output_tokens?: number;\n cache_creation_input_tokens?: number;\n cache_read_input_tokens?: number;\n [key: string]: unknown;\n}\n\nexport interface AnthropicMessageResponse {\n id?: string;\n model?: string;\n usage?: AnthropicUsage;\n content?: Array<{ type: string; text?: string; [k: string]: unknown }>;\n [key: string]: unknown;\n}\n\n/**\n * Structural shape of the Anthropic client we wrap. We only require that\n * `client.messages.create` is a function returning a Promise.\n */\nexport interface AnthropicClientLike {\n messages: {\n create(\n params: AnthropicMessageCreateParams,\n options?: unknown,\n ): Promise<AnthropicMessageResponse>;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Module-level install sentinels */\n/* ------------------------------------------------------------------------ */\n\nconst WRAPPED_CLIENT = Symbol.for(\"morse.anthropic.wrapped\");\nconst INSTALL_SENTINEL = Symbol.for(\"morse.anthropic.installed\");\nconst ORIGINALS_SENTINEL = Symbol.for(\"morse.anthropic.originals\");\n\n/**\n * True once `instrumentAnthropic()` has successfully patched\n * `Messages.prototype.create` globally (called directly, or via\n * `_internal/auto-detect.ts`'s zero-config scan). Mirrors the Python SDK's\n * `wrap()` check on `anthropic._morse_ai_installed` (AGE-240 dogfood fix):\n * without this guard, a customer who lets auto-detect patch the prototype\n * AND then calls `wrapAnthropic(client)` manually on an instance would\n * record every `messages.create` call twice — once via the global patch,\n * once via the per-instance Proxy. `wrapAnthropic()` checks this flag and\n * returns the client unmodified when a global install is already active,\n * leaving the global patch as the sole recorder.\n */\nlet globalInstallActive = false;\n\ninterface OriginalsBag {\n protoCreate?: unknown;\n protoCarrier?: { prototype: { create: unknown } };\n}\n\ninterface InstalledModule {\n [INSTALL_SENTINEL]?: boolean;\n [ORIGINALS_SENTINEL]?: OriginalsBag;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------------ */\n\nexport interface InstrumentAnthropicOptions {\n /**\n * When provided, used as the parent agent span's name. Defaults to\n * `\"anthropic.messages.create\"`.\n */\n defaultAgentName?: string;\n /**\n * If a fresh Anthropic *module* import is passed (e.g.,\n * `await import(\"@anthropic-ai/sdk\")`), the adapter will best-effort\n * patch `Messages.prototype.create`. Most users should prefer\n * `wrapAnthropic(client)` instead.\n */\n anthropicModule?: unknown;\n /**\n * When `true` (MEM-11), every wrapped `messages.create` call also\n * emits a sibling `memory`-type span with\n * `metadata.memory_op_type=\"consolidate\"`, `parent_span_id` linking\n * back to the LLM span (server treats this as `producer_span_id`),\n * `metadata.summary_token_count` from the response's output_tokens,\n * and `metadata.summary_content_hash` (SHA-256 of the response's\n * first text block).\n *\n * Use this flag when the customer is calling Claude to summarize\n * their own conversation context (the customer-side compaction\n * pattern). Default `false` — existing callers see zero behavior change.\n *\n * Opt-in only. The adapter never auto-detects summarization from\n * system-prompt content (too many false positives).\n */\n summarize?: boolean;\n}\n\n/**\n * Wrap an Anthropic client so every `messages.create` call records an\n * `llm` span with `context_segments`. The wrapper preserves the rest of\n * the client's surface (other resources, helpers, etc.) via a Proxy.\n *\n * Idempotent — a previously wrapped client is returned as-is.\n */\nexport function wrapAnthropic<C extends AnthropicClientLike>(\n client: C,\n options: InstrumentAnthropicOptions = {},\n): C {\n if (!client || typeof client !== \"object\") return client;\n // Already wrapped? Pass through.\n if ((client as Record<string | symbol, unknown>)[WRAPPED_CLIENT]) return client;\n // A global install (manual `instrumentAnthropic()` or auto-detect) is\n // already recording every call at the prototype level — see\n // `globalInstallActive` doc comment above.\n if (globalInstallActive) return client;\n\n const originalCreate = client.messages?.create?.bind(client.messages);\n if (typeof originalCreate !== \"function\") return client;\n\n const patchedCreate = buildPatchedCreate(originalCreate, options);\n\n // We construct a new `messages` object that proxies to the original\n // for any non-`create` access, then a top-level proxy that returns\n // our patched `messages` while passing every other property through.\n const patchedMessages = new Proxy(client.messages, {\n get(target, prop, receiver) {\n if (prop === \"create\") return patchedCreate;\n const value = Reflect.get(target, prop, receiver);\n // Bind methods so `this` continues to point at the original.\n if (typeof value === \"function\") return (value as (...a: unknown[]) => unknown).bind(target);\n return value;\n },\n });\n\n const wrapper = new Proxy(client, {\n get(target, prop, receiver) {\n if (prop === WRAPPED_CLIENT) return true;\n if (prop === \"messages\") return patchedMessages;\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") return (value as (...a: unknown[]) => unknown).bind(target);\n return value;\n },\n });\n\n return wrapper as C;\n}\n\n/**\n * Top-level installer. Two modes:\n *\n * - `instrumentAnthropic(client)` — equivalent to `wrapAnthropic(client)`.\n * - `instrumentAnthropic({ anthropicModule: mod })` — best-effort\n * prototype patch. Prefer the wrap form when possible.\n *\n * Always returns the wrapped client, or `undefined` if patching failed.\n * Errors are absorbed; this function never throws back at the caller.\n */\nexport const instrumentAnthropic = absorbErrorsAsync(\n async <C extends AnthropicClientLike>(\n clientOrOptions?: C | InstrumentAnthropicOptions,\n maybeOptions?: InstrumentAnthropicOptions,\n ): Promise<C | boolean> => {\n // Disambiguate the overloads.\n if (clientOrOptions && isClient(clientOrOptions)) {\n const opts = maybeOptions ?? {};\n return wrapAnthropic(clientOrOptions as C, opts);\n }\n const opts = (clientOrOptions as InstrumentAnthropicOptions | undefined) ?? {};\n const mod = await loadAnthropicModule(opts.anthropicModule);\n if (!mod) return false;\n const installed = (mod as InstalledModule)[INSTALL_SENTINEL] === true;\n if (installed) {\n globalInstallActive = true;\n return true;\n }\n\n const carrier = findMessagesPrototypeCarrier(mod);\n if (!carrier) return false;\n const originalCreate = carrier.prototype.create;\n if (typeof originalCreate !== \"function\") return false;\n\n const patchedCreate = buildPatchedCreate(function (\n this: unknown,\n params: AnthropicMessageCreateParams,\n callOptions?: unknown,\n ) {\n return (originalCreate as (...args: unknown[]) => Promise<AnthropicMessageResponse>).call(\n this,\n params,\n callOptions,\n );\n }, opts);\n carrier.prototype.create = patchedCreate as unknown as typeof carrier.prototype.create;\n (mod as InstalledModule)[ORIGINALS_SENTINEL] = {\n protoCreate: originalCreate,\n protoCarrier: carrier,\n };\n (mod as InstalledModule)[INSTALL_SENTINEL] = true;\n globalInstallActive = true;\n return true;\n },\n { fingerprint: \"morse.adapters.anthropic.install\" },\n);\n\n/**\n * Restore the prototype patch and clear the install sentinel.\n *\n * Pass the same module reference that was given to `instrumentAnthropic`\n * (or omit and the function will try to dynamic-import it). Calling\n * `uninstallAnthropic()` on a wrapped client (vs. a module) is a no-op —\n * just discard the wrapped client.\n */\nexport const uninstallAnthropic = absorbErrorsSync(\n (anthropicModule?: unknown): void => {\n if (!anthropicModule || typeof anthropicModule !== \"object\") return;\n const mod = anthropicModule as InstalledModule;\n if (!mod[INSTALL_SENTINEL]) return;\n const originals = mod[ORIGINALS_SENTINEL];\n if (originals?.protoCarrier && originals.protoCreate !== undefined) {\n originals.protoCarrier.prototype.create =\n originals.protoCreate as typeof originals.protoCarrier.prototype.create;\n }\n mod[ORIGINALS_SENTINEL] = undefined;\n mod[INSTALL_SENTINEL] = false;\n globalInstallActive = false;\n },\n { fingerprint: \"morse.adapters.anthropic.uninstall\" },\n);\n\n/**\n * Reset module-level install state for tests. Not part of the public API.\n * @internal\n */\nexport function _resetAnthropicInstallStateForTesting(): void {\n globalInstallActive = false;\n}\n\n/** True when a wrapped Anthropic client is passed in. */\nexport function isAnthropicWrapped(client: unknown): boolean {\n if (!client || typeof client !== \"object\") return false;\n return (client as Record<string | symbol, unknown>)[WRAPPED_CLIENT] === true;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Internals — module discovery */\n/* ------------------------------------------------------------------------ */\n\nfunction isClient(x: unknown): x is AnthropicClientLike {\n if (!x || typeof x !== \"object\") return false;\n const messages = (x as { messages?: { create?: unknown } }).messages;\n return !!messages && typeof messages.create === \"function\";\n}\n\nasync function loadAnthropicModule(explicit?: unknown): Promise<unknown | null> {\n if (explicit && typeof explicit === \"object\") return explicit;\n try {\n // Function-eval'd dynamic import keeps bundlers from trying to resolve\n // `@anthropic-ai/sdk` at build time when the dep isn't installed.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return await (Function(\"m\", \"return import(m)\") as any)(\"@anthropic-ai/sdk\");\n } catch {\n return null;\n }\n}\n\n/**\n * Locate the Messages class prototype on the Anthropic SDK module.\n * The SDK has historically exposed it at slightly different paths across\n * versions; we try the most common shapes.\n */\nfunction findMessagesPrototypeCarrier(mod: unknown): { prototype: { create: unknown } } | null {\n if (!mod || typeof mod !== \"object\") return null;\n const m = mod as Record<string, unknown>;\n\n // Strategy 1: `mod.Anthropic.Messages` (default-export class with static).\n const Default = m.default ?? m.Anthropic ?? m;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const candidates: any[] = [\n (Default as Record<string, unknown> | undefined)?.Messages,\n (m as Record<string, unknown>).Messages,\n (Default as { resources?: { Messages?: unknown } } | undefined)?.resources?.Messages,\n ];\n for (const c of candidates) {\n if (c && typeof c === \"function\" && c.prototype && typeof c.prototype.create === \"function\") {\n return c as { prototype: { create: unknown } };\n }\n }\n return null;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Internals — wrapper that records an `llm` span */\n/* ------------------------------------------------------------------------ */\n\nfunction buildPatchedCreate(\n original: (\n params: AnthropicMessageCreateParams,\n options?: unknown,\n ) => Promise<AnthropicMessageResponse>,\n options: InstrumentAnthropicOptions,\n): (params: AnthropicMessageCreateParams, options?: unknown) => Promise<AnthropicMessageResponse> {\n const agentName = options.defaultAgentName ?? \"anthropic.messages.create\";\n const summarizeMode = options.summarize === true;\n\n return async function patchedCreate(\n this: unknown,\n params: AnthropicMessageCreateParams,\n callOptions?: unknown,\n ): Promise<AnthropicMessageResponse> {\n const inTrace = getActiveTraceState() !== null;\n\n const work = async (): Promise<AnthropicMessageResponse> => {\n setActiveFramework(\"anthropic\");\n const handle = startSpan({\n name: \"anthropic.messages.create\",\n type: \"llm\",\n metadata: { model: params?.model, max_tokens: params?.max_tokens },\n });\n let response: AnthropicMessageResponse | undefined;\n try {\n response = await original.call(this, params, callOptions);\n } catch (err) {\n handle?.end(err);\n throw err;\n }\n\n // Recording is best-effort — never let it throw at the caller.\n try {\n if (handle) {\n const segments = safeExtractSegments(params, response);\n const usage = response?.usage ?? {};\n const inputTokens =\n (usage.input_tokens ?? 0) +\n (usage.cache_creation_input_tokens ?? 0) +\n (usage.cache_read_input_tokens ?? 0);\n const outputTokens = usage.output_tokens ?? 0;\n handle.span.model = response?.model ?? params?.model;\n if (inputTokens > 0) handle.span.input_tokens = inputTokens;\n if (outputTokens > 0) handle.span.output_tokens = outputTokens;\n const cacheWrite = usage.cache_creation_input_tokens ?? 0;\n const cacheRead = usage.cache_read_input_tokens ?? 0;\n if (cacheWrite > 0) handle.span.cache_write_tokens = cacheWrite;\n if (cacheRead > 0) handle.span.cached_input_tokens = cacheRead;\n if (inputTokens > 0 || outputTokens > 0) {\n handle.span.total_tokens = inputTokens + outputTokens;\n }\n if (\n handle.span.cost_usd === undefined &&\n handle.span.model &&\n (inputTokens > 0 || outputTokens > 0)\n ) {\n const cost = calculateCost({\n inputTokens,\n outputTokens,\n model: handle.span.model,\n cachedInputTokens: cacheRead,\n cacheWriteTokens: cacheWrite,\n });\n if (cost !== undefined) handle.span.cost_usd = cost;\n }\n handle.span.context_segments = segments;\n // MHQ-858: prompt/response capture, parity with Python's\n // `_safe_input_messages` / `_extract_output_text`.\n const inputData = captureInputMessages(params?.messages, params?.system);\n if (inputData !== undefined) handle.span.input_data = inputData;\n const outputText = extractAnthropicOutputText(response?.content);\n if (outputText !== undefined) handle.span.output_data = { content: outputText };\n }\n } catch {\n // swallow — telemetry must never break the caller\n }\n handle?.end();\n\n // MEM-11: emit sibling memory span when summarize mode is enabled.\n // Sequenced AFTER the LLM span closes so its span_id is final.\n if (summarizeMode && handle) {\n try {\n emitSummarizeMemorySpan(handle.span, response);\n } catch {\n // swallow — telemetry must never break the caller\n }\n }\n return response;\n };\n\n if (inTrace) {\n return work();\n }\n\n // No active trace — open a fresh agent span around the call so the\n // llm span has a parent. We can't return work()'s Promise from inside\n // _runAsync's callback while preserving the LLM result's typing AND\n // having the fresh trace own the lifecycle, so we wrap explicitly.\n let result: AnthropicMessageResponse | undefined;\n let thrown: unknown;\n await _runAsync({ agentName }, async (runHandle) => {\n runHandle.setOutcome(true);\n try {\n result = await work();\n } catch (err) {\n thrown = err;\n throw err;\n }\n return null;\n });\n if (thrown !== undefined) throw thrown;\n // result is set unless work() threw, in which case we already rethrew.\n return result as AnthropicMessageResponse;\n };\n}\n\n/* ------------------------------------------------------------------------ */\n/* Public: deterministic segment extraction */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Maximum bytes of `content` we ship per segment. Long blobs are truncated\n * with `content_truncated: true`. The server further enforces its own\n * cap; we keep the SDK floor lower to stay friendly to mobile networks.\n */\nexport const MAX_SEGMENT_CONTENT_BYTES = 4096;\n\n/**\n * Extract `ContextSegment[]` from an Anthropic `messages.create` request\n * + response. The ordering is:\n *\n * 1. `tools` → one `tool_descriptions` segment, position 0.\n * 2. `system` → `system_prompt` segment.\n * 3. Each prior `user` / `assistant` message → `chat_history` segment.\n * `tool_result` blocks (always inside `user.content`) become their\n * own `tool_observation` segments.\n * `tool_use` blocks (assistant-emitted) roll into the parent\n * assistant `chat_history` segment as part of the JSON content.\n * 4. The final `user` message → `current_input`.\n *\n * Cache state heuristic:\n * - `system` blocks with `cache_control.type === \"ephemeral\"` →\n * `cache_write`.\n * - If the response reports `cache_read_input_tokens > 0`, mark the\n * `system_prompt` and `tool_descriptions` segments as `cache_hit`\n * (overrides `cache_write` — the cache HIT is more informative\n * than the cache write attempt).\n *\n * `tokens` is intentionally left undefined — the server tokenizes.\n */\nexport function extractAnthropicSegments(\n params: AnthropicMessageCreateParams,\n response?: AnthropicMessageResponse,\n): ContextSegment[] {\n const segments: ContextSegment[] = [];\n let position = 0;\n\n // 1. Tools → tool_descriptions.\n if (Array.isArray(params.tools) && params.tools.length > 0) {\n const content = canonicalJsonStringify(params.tools);\n segments.push(makeSegment(position++, \"tool_descriptions\", content));\n }\n\n // 2. System.\n let systemHadEphemeral = false;\n if (params.system !== undefined && params.system !== null) {\n let text = \"\";\n if (typeof params.system === \"string\") {\n text = params.system;\n } else if (Array.isArray(params.system)) {\n const parts: string[] = [];\n for (const block of params.system) {\n if (block && typeof block === \"object\" && block.type === \"text\") {\n parts.push(typeof block.text === \"string\" ? block.text : \"\");\n if (\n block.cache_control &&\n typeof block.cache_control === \"object\" &&\n (block.cache_control as { type?: string }).type === \"ephemeral\"\n ) {\n systemHadEphemeral = true;\n }\n }\n }\n text = parts.join(\"\\n\");\n }\n const seg = makeSegment(position++, \"system_prompt\", text);\n if (systemHadEphemeral) seg.cache_state = \"cache_write\";\n segments.push(seg);\n }\n\n // 3 + 4. Walk messages.\n const messages = Array.isArray(params.messages) ? params.messages : [];\n // Identify the index of the LAST user message so we can route only it\n // to current_input. Earlier user messages are chat_history.\n let lastUserIdx = -1;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i]?.role === \"user\") {\n lastUserIdx = i;\n break;\n }\n }\n\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i];\n if (!msg) continue;\n const blocks = normalizeContent(msg.content);\n // Tool-result blocks always emit their own tool_observation segments.\n const toolResults = blocks.filter(\n (b) => b.type === \"tool_result\",\n ) as AnthropicToolResultBlockParam[];\n const nonToolResults = blocks.filter((b) => b.type !== \"tool_result\");\n\n // The non-tool-result remainder belongs to either current_input,\n // chat_history, or, if empty, nothing.\n if (nonToolResults.length > 0) {\n const text = renderBlocksAsText(nonToolResults, msg.role);\n let source: string;\n if (msg.role === \"user\" && i === lastUserIdx) {\n source = \"current_input\";\n } else {\n source = \"chat_history\";\n }\n segments.push(makeSegment(position++, source, text));\n } else if (\n typeof msg.content === \"string\" &&\n msg.role === \"user\" &&\n i === lastUserIdx &&\n msg.content.length > 0\n ) {\n // Edge case: pure-string user message that's also the last user.\n segments.push(makeSegment(position++, \"current_input\", msg.content));\n }\n\n // Each tool_result emits its own segment, in order.\n for (const tr of toolResults) {\n const text = renderToolResult(tr);\n const seg = makeSegment(position++, \"tool_observation\", text);\n seg.attrs = { tool_use_id: tr.tool_use_id };\n if (tr.is_error) {\n (seg.attrs as Record<string, unknown>).is_error = true;\n }\n segments.push(seg);\n }\n }\n\n // Cache hit override.\n const cacheRead = response?.usage?.cache_read_input_tokens ?? 0;\n if (cacheRead > 0) {\n for (const seg of segments) {\n if (seg.source === \"system_prompt\" || seg.source === \"tool_descriptions\") {\n seg.cache_state = \"cache_hit\";\n }\n }\n }\n\n return segments;\n}\n\nfunction safeExtractSegments(\n params: AnthropicMessageCreateParams,\n response?: AnthropicMessageResponse,\n): ContextSegment[] {\n try {\n return extractAnthropicSegments(params, response);\n } catch {\n return [];\n }\n}\n\n/**\n * MEM-11 — emit a sibling `memory`-type span linked to the given LLM span.\n *\n * The memory span:\n * - `type = \"memory\"`\n * - `parent_span_id = llmSpan.span_id` (server stores as producer_span_id)\n * - `metadata.memory_op_type = \"consolidate\"`\n * - `metadata.summary_token_count = response.usage.output_tokens`\n * - `metadata.summary_content_hash = SHA-256 of response.content[0].text`\n *\n * Caller is responsible for catching exceptions — telemetry must never\n * break the customer's Anthropic call.\n */\nfunction emitSummarizeMemorySpan(llmSpan: SpanData, response?: AnthropicMessageResponse): void {\n const state = getActiveTraceState();\n if (state === null) return;\n\n const summaryText = extractFirstTextBlock(response);\n const summaryHash = sha256Hex(summaryText);\n const summaryTokens = response?.usage?.output_tokens ?? 0;\n\n const startedAt = llmSpan.ended_at ?? llmSpan.started_at ?? nowIso();\n const memorySpan: SpanData = {\n trace_id: state.traceId,\n span_id: generateSpanId(),\n type: \"memory\",\n name: \"anthropic.summarize\",\n parent_span_id: llmSpan.span_id,\n started_at: startedAt,\n ended_at: startedAt,\n duration_ms: 0,\n status: \"completed\",\n metadata: {\n memory_op_type: \"consolidate\",\n summary_token_count: summaryTokens,\n summary_content_hash: summaryHash,\n },\n };\n state.completedSpans.push(memorySpan);\n}\n\n/**\n * Return the first text block of an Anthropic message response, or \"\" if\n * there is none. Best-effort; never throws.\n */\nfunction extractFirstTextBlock(response?: AnthropicMessageResponse): string {\n try {\n const content = response?.content;\n if (!Array.isArray(content)) return \"\";\n for (const block of content) {\n if (block && typeof block === \"object\" && block.type === \"text\") {\n const t = (block as { text?: unknown }).text;\n if (typeof t === \"string\" && t.length > 0) return t;\n }\n }\n return \"\";\n } catch {\n return \"\";\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Helpers — segment construction */\n/* ------------------------------------------------------------------------ */\n\nfunction makeSegment(position: number, source: string, rawContent: string): ContextSegment {\n const fullHash = sha256Hex(rawContent);\n const truncated = truncateToBytes(rawContent, MAX_SEGMENT_CONTENT_BYTES);\n const seg: ContextSegment = {\n position,\n source,\n content_hash: fullHash,\n content: truncated.text,\n cache_state: \"cold\",\n };\n if (truncated.truncated) seg.content_truncated = true;\n return seg;\n}\n\nfunction normalizeContent(content: AnthropicMessageParam[\"content\"]): AnthropicContentBlockParam[] {\n if (typeof content === \"string\") {\n return [{ type: \"text\", text: content }];\n }\n if (Array.isArray(content)) {\n return content.filter((b): b is AnthropicContentBlockParam => !!b && typeof b === \"object\");\n }\n return [];\n}\n\nfunction renderBlocksAsText(blocks: AnthropicContentBlockParam[], role: string): string {\n // For chat_history / current_input we want a deterministic, hashable\n // string. Plain `text` blocks render as their text. `tool_use` blocks\n // render as a stable JSON marker so two equivalent calls hash the same.\n const out: string[] = [];\n for (const b of blocks) {\n if (!b || typeof b !== \"object\") continue;\n if (b.type === \"text\") {\n const text = (b as AnthropicTextBlockParam).text;\n if (typeof text === \"string\") out.push(text);\n } else if (b.type === \"tool_use\") {\n const tu = b as AnthropicToolUseBlockParam;\n out.push(`[tool_use:${tu.name}:${tu.id}] ${canonicalJsonStringify(tu.input ?? null)}`);\n } else {\n // Unknown block type — best-effort serialize.\n out.push(canonicalJsonStringify(b));\n }\n }\n // Prefix with role for disambiguation in chat_history; keeps the\n // segment self-describing without bloating the hash too much.\n if (role === \"assistant\") {\n return out.length === 1 && out[0] !== undefined ? out[0] : out.join(\"\\n\");\n }\n return out.length === 1 && out[0] !== undefined ? out[0] : out.join(\"\\n\");\n}\n\nfunction renderToolResult(tr: AnthropicToolResultBlockParam): string {\n if (typeof tr.content === \"string\") return tr.content;\n if (Array.isArray(tr.content)) {\n const parts: string[] = [];\n for (const b of tr.content) {\n if (b && typeof b === \"object\") {\n if (b.type === \"text\" && typeof b.text === \"string\") parts.push(b.text);\n else parts.push(canonicalJsonStringify(b));\n }\n }\n return parts.join(\"\\n\");\n }\n return \"\";\n}\n\n/* ------------------------------------------------------------------------ */\n/* Helpers — hashing + JSON canonicalization + byte truncation */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Stringify with stable key ordering so equivalent objects hash to the\n * same content_hash regardless of property insertion order.\n */\nfunction canonicalJsonStringify(value: unknown): string {\n return JSON.stringify(value, function replacer(_key, val) {\n if (val && typeof val === \"object\" && !Array.isArray(val)) {\n const obj = val as Record<string, unknown>;\n const sorted: Record<string, unknown> = {};\n for (const k of Object.keys(obj).sort()) {\n sorted[k] = obj[k];\n }\n return sorted;\n }\n return val;\n });\n}\n\n/**\n * Compute SHA-256 of `text` and return it hex-encoded. Tries Node's\n * `node:crypto` first (synchronous + zero-dep), falls back to a tiny\n * pure-TS impl when neither Node nor a Web Crypto sync API is available.\n *\n * NOTE: Web Crypto's `digest()` is async, but the segment-construction\n * path is sync. We therefore only use the Node sync API here. On the\n * browser we fall back to the pure-TS impl, which is fine for the\n * relatively short strings we hash (system prompts, tool defs, single\n * messages).\n */\nfunction sha256Hex(text: string): string {\n // Strategy 1: Node's crypto.createHash. Sync and dep-free.\n try {\n if (typeof process !== \"undefined\" && process.versions?.node) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dynamicRequire = Function(\"m\", \"return require(m)\") as any as (m: string) => unknown;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cryptoMod = dynamicRequire(\"node:crypto\") as any;\n if (cryptoMod?.createHash) {\n return cryptoMod.createHash(\"sha256\").update(text).digest(\"hex\");\n }\n }\n } catch {\n // fall through\n }\n // Strategy 2: pure-TS sha256 (used in browsers).\n return purejsSha256(text);\n}\n\nfunction truncateToBytes(text: string, maxBytes: number): { text: string; truncated: boolean } {\n // Fast path: cheap upper bound. 1 char ≤ 4 bytes UTF-8.\n if (text.length <= maxBytes / 4) return { text, truncated: false };\n // Build the encoded bytes once.\n const bytes = utf8Encode(text);\n if (bytes.length <= maxBytes) return { text, truncated: false };\n // Find the largest character boundary <= maxBytes.\n let cut = maxBytes;\n // Don't split a multi-byte sequence: walk back until we're at a\n // codepoint boundary (a byte where the top two bits aren't `10`).\n while (cut > 0 && (bytes[cut]! & 0xc0) === 0x80) {\n cut--;\n }\n return { text: utf8Decode(bytes.subarray(0, cut)), truncated: true };\n}\n\nfunction utf8Encode(text: string): Uint8Array {\n if (typeof TextEncoder !== \"undefined\") {\n return new TextEncoder().encode(text);\n }\n // Pure-JS fallback. Should never trigger on Node 18+ or modern browsers.\n const out: number[] = [];\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i);\n if (code < 0x80) {\n out.push(code);\n } else if (code < 0x800) {\n out.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f));\n } else {\n out.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f));\n }\n }\n return new Uint8Array(out);\n}\n\nfunction utf8Decode(bytes: Uint8Array): string {\n if (typeof TextDecoder !== \"undefined\") {\n return new TextDecoder(\"utf-8\").decode(bytes);\n }\n let out = \"\";\n for (let i = 0; i < bytes.length; ) {\n const b = bytes[i]!;\n if (b < 0x80) {\n out += String.fromCharCode(b);\n i++;\n } else if (b < 0xe0) {\n out += String.fromCharCode(((b & 0x1f) << 6) | (bytes[i + 1]! & 0x3f));\n i += 2;\n } else {\n out += String.fromCharCode(\n ((b & 0x0f) << 12) | ((bytes[i + 1]! & 0x3f) << 6) | (bytes[i + 2]! & 0x3f),\n );\n i += 3;\n }\n }\n return out;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Pure-JS SHA-256 (used only when node:crypto is unavailable) */\n/* ------------------------------------------------------------------------ */\n\nfunction purejsSha256(text: string): string {\n const K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n ];\n const H = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n ];\n\n // Pad message.\n const msg = utf8Encode(text);\n const msgLen = msg.length;\n const bitLen = msgLen * 8;\n const padded = new Uint8Array(((msgLen + 9 + 63) >> 6) << 6);\n padded.set(msg);\n padded[msgLen] = 0x80;\n // 64-bit big-endian length. JS bitwise ops are 32-bit, so split lo/hi via /.\n const lo = (bitLen & 0xffffffff) >>> 0;\n const hi = Math.floor(bitLen / 0x100000000) >>> 0;\n padded[padded.length - 8] = (hi >>> 24) & 0xff;\n padded[padded.length - 7] = (hi >>> 16) & 0xff;\n padded[padded.length - 6] = (hi >>> 8) & 0xff;\n padded[padded.length - 5] = hi & 0xff;\n padded[padded.length - 4] = (lo >>> 24) & 0xff;\n padded[padded.length - 3] = (lo >>> 16) & 0xff;\n padded[padded.length - 2] = (lo >>> 8) & 0xff;\n padded[padded.length - 1] = lo & 0xff;\n\n const W = new Uint32Array(64);\n for (let chunk = 0; chunk < padded.length; chunk += 64) {\n for (let i = 0; i < 16; i++) {\n // `>>> 0` forces unsigned — `(byte << 24)` otherwise produces a signed\n // int when the high bit is set, which corrupts the schedule on bytes ≥ 0x80.\n W[i] =\n ((padded[chunk + i * 4]! << 24) |\n (padded[chunk + i * 4 + 1]! << 16) |\n (padded[chunk + i * 4 + 2]! << 8) |\n padded[chunk + i * 4 + 3]!) >>>\n 0;\n }\n for (let i = 16; i < 64; i++) {\n const s0 = rotr(W[i - 15]!, 7) ^ rotr(W[i - 15]!, 18) ^ (W[i - 15]! >>> 3);\n const s1 = rotr(W[i - 2]!, 17) ^ rotr(W[i - 2]!, 19) ^ (W[i - 2]! >>> 10);\n W[i] = (W[i - 16]! + s0 + W[i - 7]! + s1) >>> 0;\n }\n\n let [a, b, c, d, e, f, g, h] = H;\n\n for (let i = 0; i < 64; i++) {\n const S1 = rotr(e!, 6) ^ rotr(e!, 11) ^ rotr(e!, 25);\n const ch = (e! & f!) ^ (~e! & g!);\n const temp1 = (h! + S1 + ch + K[i]! + W[i]!) >>> 0;\n const S0 = rotr(a!, 2) ^ rotr(a!, 13) ^ rotr(a!, 22);\n const maj = (a! & b!) ^ (a! & c!) ^ (b! & c!);\n const temp2 = (S0 + maj) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d! + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n\n H[0] = (H[0]! + a!) >>> 0;\n H[1] = (H[1]! + b!) >>> 0;\n H[2] = (H[2]! + c!) >>> 0;\n H[3] = (H[3]! + d!) >>> 0;\n H[4] = (H[4]! + e!) >>> 0;\n H[5] = (H[5]! + f!) >>> 0;\n H[6] = (H[6]! + g!) >>> 0;\n H[7] = (H[7]! + h!) >>> 0;\n }\n\n let hex = \"\";\n for (const v of H) {\n hex += v.toString(16).padStart(8, \"0\");\n }\n return hex;\n}\n\nfunction rotr(x: number, n: number): number {\n return ((x >>> n) | (x << (32 - n))) >>> 0;\n}\n"]}
1
+ {"version":3,"sources":["../src/anthropic/index.ts"],"names":["init_spans","init_tracing","absorbErrorsAsync","opts","absorbErrorsSync","getActiveTraceState","setActiveFramework","startSpan","calculateCost","captureInputMessages","extractAnthropicOutputText","runAsync","nowIso","generateSpanId"],"mappings":"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","file":"chunk-ETRNCI5Z.cjs","sourcesContent":["/**\n * `@morsehq-dev/sdk/anthropic` — Anthropic SDK instrumentation.\n *\n * Wraps `@anthropic-ai/sdk` `client.messages.create` so every Claude call\n * emits an `llm` span carrying pre-segmented `context_segments`. The\n * server-side classifier then skips its own messages-array partitioning\n * and persists the SDK-supplied segments verbatim.\n *\n * Two entry points:\n *\n * - `wrapAnthropic(client)` — returns a Proxy-like wrapper that\n * intercepts `messages.create`. Always succeeds. The customer keeps\n * using the wrapper as if it were the real client.\n *\n * - `instrumentAnthropic(client?)` — top-level helper. If a client is\n * passed, returns the wrapped form. If no client is passed AND the\n * `@anthropic-ai/sdk` package can be loaded, attempts to patch\n * `Messages.prototype.create` so every fresh `new Anthropic()` is\n * instrumented automatically. The prototype path is best-effort —\n * it is documented as fragile across Anthropic SDK versions, and\n * `wrapAnthropic` is the recommended public entry.\n *\n * Idempotent. `uninstallAnthropic()` restores the prototype and clears\n * the install sentinel.\n *\n * Wrapped under `absorbErrors*` so a tracing failure can never break the\n * customer's Anthropic call — at worst, calls go untraced.\n *\n * Mirrors `apps/sdk/typescript/src/vercel-ai/index.ts` in shape and\n * `openspec/changes/.../specs/observability/spec.md` (CTX-08) in\n * segmentation contract.\n */\n\nimport { absorbErrorsAsync, absorbErrorsSync } from \"../_internal/errors\";\nimport { calculateCost } from \"../_internal/pricing\";\nimport type { ContextSegment, SpanData } from \"../_internal/spans\";\nimport { generateSpanId, nowIso } from \"../_internal/spans\";\nimport { setActiveFramework } from \"../_internal/active-framework\";\nimport { captureInputMessages, extractAnthropicOutputText } from \"../_internal/llm-io\";\nimport { getActiveTraceState, runAsync as _runAsync, startSpan } from \"../_internal/tracing\";\n\n/* ------------------------------------------------------------------------ */\n/* Public types — minimal structural shapes, NOT a hard dep on `@anthropic-ai/sdk` */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Subset of `@anthropic-ai/sdk`'s `MessageCreateParams` we read from. We\n * deliberately decline to import the real types so the SDK works even when\n * `@anthropic-ai/sdk` isn't installed (it's an optional peer dep).\n */\nexport interface AnthropicMessageCreateParams {\n model: string;\n max_tokens?: number;\n system?: string | AnthropicTextBlockParam[];\n messages: AnthropicMessageParam[];\n tools?: AnthropicToolParam[];\n tool_choice?: unknown;\n // Allow forward-compat fields without complaint.\n [key: string]: unknown;\n}\n\nexport interface AnthropicTextBlockParam {\n type: \"text\";\n text: string;\n cache_control?: { type: \"ephemeral\" } | null;\n}\n\nexport interface AnthropicToolUseBlockParam {\n type: \"tool_use\";\n id: string;\n name: string;\n input: unknown;\n}\n\nexport interface AnthropicToolResultBlockParam {\n type: \"tool_result\";\n tool_use_id: string;\n content: string | Array<{ type: string; text?: string; [k: string]: unknown }>;\n is_error?: boolean;\n}\n\nexport type AnthropicContentBlockParam =\n | AnthropicTextBlockParam\n | AnthropicToolUseBlockParam\n | AnthropicToolResultBlockParam\n | { type: string; [k: string]: unknown };\n\nexport interface AnthropicMessageParam {\n role: \"user\" | \"assistant\" | string;\n content: string | AnthropicContentBlockParam[];\n}\n\nexport interface AnthropicToolParam {\n name: string;\n description?: string;\n input_schema?: unknown;\n // Anthropic supports custom tool types — let through.\n [key: string]: unknown;\n}\n\nexport interface AnthropicUsage {\n input_tokens?: number;\n output_tokens?: number;\n cache_creation_input_tokens?: number;\n cache_read_input_tokens?: number;\n [key: string]: unknown;\n}\n\nexport interface AnthropicMessageResponse {\n id?: string;\n model?: string;\n usage?: AnthropicUsage;\n content?: Array<{ type: string; text?: string; [k: string]: unknown }>;\n [key: string]: unknown;\n}\n\n/**\n * Structural shape of the Anthropic client we wrap. We only require that\n * `client.messages.create` is a function returning a Promise.\n */\nexport interface AnthropicClientLike {\n messages: {\n create(\n params: AnthropicMessageCreateParams,\n options?: unknown,\n ): Promise<AnthropicMessageResponse>;\n [key: string]: unknown;\n };\n [key: string]: unknown;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Module-level install sentinels */\n/* ------------------------------------------------------------------------ */\n\nconst WRAPPED_CLIENT = Symbol.for(\"morse.anthropic.wrapped\");\nconst INSTALL_SENTINEL = Symbol.for(\"morse.anthropic.installed\");\nconst ORIGINALS_SENTINEL = Symbol.for(\"morse.anthropic.originals\");\n\n/**\n * True once `instrumentAnthropic()` has successfully patched\n * `Messages.prototype.create` globally (called directly, or via\n * `_internal/auto-detect.ts`'s zero-config scan). Mirrors the Python SDK's\n * `wrap()` check on `anthropic._morse_ai_installed` (AGE-240 dogfood fix):\n * without this guard, a customer who lets auto-detect patch the prototype\n * AND then calls `wrapAnthropic(client)` manually on an instance would\n * record every `messages.create` call twice — once via the global patch,\n * once via the per-instance Proxy. `wrapAnthropic()` checks this flag and\n * returns the client unmodified when a global install is already active,\n * leaving the global patch as the sole recorder.\n */\nlet globalInstallActive = false;\n\ninterface OriginalsBag {\n protoCreate?: unknown;\n protoCarrier?: { prototype: { create: unknown } };\n}\n\ninterface InstalledModule {\n [INSTALL_SENTINEL]?: boolean;\n [ORIGINALS_SENTINEL]?: OriginalsBag;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------------ */\n\nexport interface InstrumentAnthropicOptions {\n /**\n * When provided, used as the parent agent span's name. Defaults to\n * `\"anthropic.messages.create\"`.\n */\n defaultAgentName?: string;\n /**\n * If a fresh Anthropic *module* import is passed (e.g.,\n * `await import(\"@anthropic-ai/sdk\")`), the adapter will best-effort\n * patch `Messages.prototype.create`. Most users should prefer\n * `wrapAnthropic(client)` instead.\n */\n anthropicModule?: unknown;\n /**\n * When `true` (MEM-11), every wrapped `messages.create` call also\n * emits a sibling `memory`-type span with\n * `metadata.memory_op_type=\"consolidate\"`, `parent_span_id` linking\n * back to the LLM span (server treats this as `producer_span_id`),\n * `metadata.summary_token_count` from the response's output_tokens,\n * and `metadata.summary_content_hash` (SHA-256 of the response's\n * first text block).\n *\n * Use this flag when the customer is calling Claude to summarize\n * their own conversation context (the customer-side compaction\n * pattern). Default `false` — existing callers see zero behavior change.\n *\n * Opt-in only. The adapter never auto-detects summarization from\n * system-prompt content (too many false positives).\n */\n summarize?: boolean;\n}\n\n/**\n * Wrap an Anthropic client so every `messages.create` call records an\n * `llm` span with `context_segments`. The wrapper preserves the rest of\n * the client's surface (other resources, helpers, etc.) via a Proxy.\n *\n * Idempotent — a previously wrapped client is returned as-is.\n */\nexport function wrapAnthropic<C extends AnthropicClientLike>(\n client: C,\n options: InstrumentAnthropicOptions = {},\n): C {\n if (!client || typeof client !== \"object\") return client;\n // Already wrapped? Pass through.\n if ((client as Record<string | symbol, unknown>)[WRAPPED_CLIENT]) return client;\n // A global install (manual `instrumentAnthropic()` or auto-detect) is\n // already recording every call at the prototype level — see\n // `globalInstallActive` doc comment above.\n if (globalInstallActive) return client;\n\n const originalCreate = client.messages?.create?.bind(client.messages);\n if (typeof originalCreate !== \"function\") return client;\n\n const patchedCreate = buildPatchedCreate(originalCreate, options);\n\n // We construct a new `messages` object that proxies to the original\n // for any non-`create` access, then a top-level proxy that returns\n // our patched `messages` while passing every other property through.\n const patchedMessages = new Proxy(client.messages, {\n get(target, prop, receiver) {\n if (prop === \"create\") return patchedCreate;\n const value = Reflect.get(target, prop, receiver);\n // Bind methods so `this` continues to point at the original.\n if (typeof value === \"function\") return (value as (...a: unknown[]) => unknown).bind(target);\n return value;\n },\n });\n\n const wrapper = new Proxy(client, {\n get(target, prop, receiver) {\n if (prop === WRAPPED_CLIENT) return true;\n if (prop === \"messages\") return patchedMessages;\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") return (value as (...a: unknown[]) => unknown).bind(target);\n return value;\n },\n });\n\n return wrapper as C;\n}\n\n/**\n * Top-level installer. Two modes:\n *\n * - `instrumentAnthropic(client)` — equivalent to `wrapAnthropic(client)`.\n * - `instrumentAnthropic({ anthropicModule: mod })` — best-effort\n * prototype patch. Prefer the wrap form when possible.\n *\n * Always returns the wrapped client, or `undefined` if patching failed.\n * Errors are absorbed; this function never throws back at the caller.\n */\nexport const instrumentAnthropic = absorbErrorsAsync(\n async <C extends AnthropicClientLike>(\n clientOrOptions?: C | InstrumentAnthropicOptions,\n maybeOptions?: InstrumentAnthropicOptions,\n ): Promise<C | boolean> => {\n // Disambiguate the overloads.\n if (clientOrOptions && isClient(clientOrOptions)) {\n const opts = maybeOptions ?? {};\n return wrapAnthropic(clientOrOptions as C, opts);\n }\n const opts = (clientOrOptions as InstrumentAnthropicOptions | undefined) ?? {};\n const mod = await loadAnthropicModule(opts.anthropicModule);\n if (!mod) return false;\n const installed = (mod as InstalledModule)[INSTALL_SENTINEL] === true;\n if (installed) {\n globalInstallActive = true;\n return true;\n }\n\n const carrier = findMessagesPrototypeCarrier(mod);\n if (!carrier) return false;\n const originalCreate = carrier.prototype.create;\n if (typeof originalCreate !== \"function\") return false;\n\n const patchedCreate = buildPatchedCreate(function (\n this: unknown,\n params: AnthropicMessageCreateParams,\n callOptions?: unknown,\n ) {\n return (originalCreate as (...args: unknown[]) => Promise<AnthropicMessageResponse>).call(\n this,\n params,\n callOptions,\n );\n }, opts);\n carrier.prototype.create = patchedCreate as unknown as typeof carrier.prototype.create;\n (mod as InstalledModule)[ORIGINALS_SENTINEL] = {\n protoCreate: originalCreate,\n protoCarrier: carrier,\n };\n (mod as InstalledModule)[INSTALL_SENTINEL] = true;\n globalInstallActive = true;\n return true;\n },\n { fingerprint: \"morse.adapters.anthropic.install\" },\n);\n\n/**\n * Restore the prototype patch and clear the install sentinel.\n *\n * Pass the same module reference that was given to `instrumentAnthropic`\n * (or omit and the function will try to dynamic-import it). Calling\n * `uninstallAnthropic()` on a wrapped client (vs. a module) is a no-op —\n * just discard the wrapped client.\n */\nexport const uninstallAnthropic = absorbErrorsSync(\n (anthropicModule?: unknown): void => {\n if (!anthropicModule || typeof anthropicModule !== \"object\") return;\n const mod = anthropicModule as InstalledModule;\n if (!mod[INSTALL_SENTINEL]) return;\n const originals = mod[ORIGINALS_SENTINEL];\n if (originals?.protoCarrier && originals.protoCreate !== undefined) {\n originals.protoCarrier.prototype.create =\n originals.protoCreate as typeof originals.protoCarrier.prototype.create;\n }\n mod[ORIGINALS_SENTINEL] = undefined;\n mod[INSTALL_SENTINEL] = false;\n globalInstallActive = false;\n },\n { fingerprint: \"morse.adapters.anthropic.uninstall\" },\n);\n\n/**\n * Reset module-level install state for tests. Not part of the public API.\n * @internal\n */\nexport function _resetAnthropicInstallStateForTesting(): void {\n globalInstallActive = false;\n}\n\n/** True when a wrapped Anthropic client is passed in. */\nexport function isAnthropicWrapped(client: unknown): boolean {\n if (!client || typeof client !== \"object\") return false;\n return (client as Record<string | symbol, unknown>)[WRAPPED_CLIENT] === true;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Internals — module discovery */\n/* ------------------------------------------------------------------------ */\n\nfunction isClient(x: unknown): x is AnthropicClientLike {\n if (!x || typeof x !== \"object\") return false;\n const messages = (x as { messages?: { create?: unknown } }).messages;\n return !!messages && typeof messages.create === \"function\";\n}\n\nasync function loadAnthropicModule(explicit?: unknown): Promise<unknown | null> {\n if (explicit && typeof explicit === \"object\") return explicit;\n try {\n // Function-eval'd dynamic import keeps bundlers from trying to resolve\n // `@anthropic-ai/sdk` at build time when the dep isn't installed.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return await (Function(\"m\", \"return import(m)\") as any)(\"@anthropic-ai/sdk\");\n } catch {\n return null;\n }\n}\n\n/**\n * Locate the Messages class prototype on the Anthropic SDK module.\n * The SDK has historically exposed it at slightly different paths across\n * versions; we try the most common shapes.\n */\nfunction findMessagesPrototypeCarrier(mod: unknown): { prototype: { create: unknown } } | null {\n if (!mod || typeof mod !== \"object\") return null;\n const m = mod as Record<string, unknown>;\n\n // Strategy 1: `mod.Anthropic.Messages` (default-export class with static).\n const Default = m.default ?? m.Anthropic ?? m;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const candidates: any[] = [\n (Default as Record<string, unknown> | undefined)?.Messages,\n (m as Record<string, unknown>).Messages,\n (Default as { resources?: { Messages?: unknown } } | undefined)?.resources?.Messages,\n ];\n for (const c of candidates) {\n if (c && typeof c === \"function\" && c.prototype && typeof c.prototype.create === \"function\") {\n return c as { prototype: { create: unknown } };\n }\n }\n return null;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Internals — wrapper that records an `llm` span */\n/* ------------------------------------------------------------------------ */\n\nfunction buildPatchedCreate(\n original: (\n params: AnthropicMessageCreateParams,\n options?: unknown,\n ) => Promise<AnthropicMessageResponse>,\n options: InstrumentAnthropicOptions,\n): (params: AnthropicMessageCreateParams, options?: unknown) => Promise<AnthropicMessageResponse> {\n const agentName = options.defaultAgentName ?? \"anthropic.messages.create\";\n const summarizeMode = options.summarize === true;\n\n return async function patchedCreate(\n this: unknown,\n params: AnthropicMessageCreateParams,\n callOptions?: unknown,\n ): Promise<AnthropicMessageResponse> {\n const inTrace = getActiveTraceState() !== null;\n\n const work = async (): Promise<AnthropicMessageResponse> => {\n setActiveFramework(\"anthropic\");\n const handle = startSpan({\n name: \"anthropic.messages.create\",\n type: \"llm\",\n metadata: { model: params?.model, max_tokens: params?.max_tokens },\n });\n let response: AnthropicMessageResponse | undefined;\n try {\n response = await original.call(this, params, callOptions);\n } catch (err) {\n handle?.end(err);\n throw err;\n }\n\n // Recording is best-effort — never let it throw at the caller.\n try {\n if (handle) {\n const segments = safeExtractSegments(params, response);\n const usage = response?.usage ?? {};\n const inputTokens =\n (usage.input_tokens ?? 0) +\n (usage.cache_creation_input_tokens ?? 0) +\n (usage.cache_read_input_tokens ?? 0);\n const outputTokens = usage.output_tokens ?? 0;\n handle.span.model = response?.model ?? params?.model;\n if (inputTokens > 0) handle.span.input_tokens = inputTokens;\n if (outputTokens > 0) handle.span.output_tokens = outputTokens;\n const cacheWrite = usage.cache_creation_input_tokens ?? 0;\n const cacheRead = usage.cache_read_input_tokens ?? 0;\n if (cacheWrite > 0) handle.span.cache_write_tokens = cacheWrite;\n if (cacheRead > 0) handle.span.cached_input_tokens = cacheRead;\n if (inputTokens > 0 || outputTokens > 0) {\n handle.span.total_tokens = inputTokens + outputTokens;\n }\n if (\n handle.span.cost_usd === undefined &&\n handle.span.model &&\n (inputTokens > 0 || outputTokens > 0)\n ) {\n const cost = calculateCost({\n inputTokens,\n outputTokens,\n model: handle.span.model,\n cachedInputTokens: cacheRead,\n cacheWriteTokens: cacheWrite,\n });\n if (cost !== undefined) handle.span.cost_usd = cost;\n }\n handle.span.context_segments = segments;\n // MHQ-858: prompt/response capture, parity with Python's\n // `_safe_input_messages` / `_extract_output_text`.\n const inputData = captureInputMessages(params?.messages, params?.system);\n if (inputData !== undefined) handle.span.input_data = inputData;\n const outputText = extractAnthropicOutputText(response?.content);\n if (outputText !== undefined) handle.span.output_data = { content: outputText };\n }\n } catch {\n // swallow — telemetry must never break the caller\n }\n handle?.end();\n\n // MEM-11: emit sibling memory span when summarize mode is enabled.\n // Sequenced AFTER the LLM span closes so its span_id is final.\n if (summarizeMode && handle) {\n try {\n emitSummarizeMemorySpan(handle.span, response);\n } catch {\n // swallow — telemetry must never break the caller\n }\n }\n return response;\n };\n\n if (inTrace) {\n return work();\n }\n\n // No active trace — open a fresh agent span around the call so the\n // llm span has a parent. We can't return work()'s Promise from inside\n // _runAsync's callback while preserving the LLM result's typing AND\n // having the fresh trace own the lifecycle, so we wrap explicitly.\n let result: AnthropicMessageResponse | undefined;\n let thrown: unknown;\n await _runAsync({ agentName }, async (runHandle) => {\n runHandle.setOutcome(true);\n try {\n result = await work();\n } catch (err) {\n thrown = err;\n throw err;\n }\n return null;\n });\n if (thrown !== undefined) throw thrown;\n // result is set unless work() threw, in which case we already rethrew.\n return result as AnthropicMessageResponse;\n };\n}\n\n/* ------------------------------------------------------------------------ */\n/* Public: deterministic segment extraction */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Maximum bytes of `content` we ship per segment. Long blobs are truncated\n * with `content_truncated: true`. The server further enforces its own\n * cap; we keep the SDK floor lower to stay friendly to mobile networks.\n */\nexport const MAX_SEGMENT_CONTENT_BYTES = 4096;\n\n/**\n * Extract `ContextSegment[]` from an Anthropic `messages.create` request\n * + response. The ordering is:\n *\n * 1. `tools` → one `tool_descriptions` segment, position 0.\n * 2. `system` → `system_prompt` segment.\n * 3. Each prior `user` / `assistant` message → `chat_history` segment.\n * `tool_result` blocks (always inside `user.content`) become their\n * own `tool_observation` segments.\n * `tool_use` blocks (assistant-emitted) roll into the parent\n * assistant `chat_history` segment as part of the JSON content.\n * 4. The final `user` message → `current_input`.\n *\n * Cache state heuristic:\n * - `system` blocks with `cache_control.type === \"ephemeral\"` →\n * `cache_write`.\n * - If the response reports `cache_read_input_tokens > 0`, mark the\n * `system_prompt` and `tool_descriptions` segments as `cache_hit`\n * (overrides `cache_write` — the cache HIT is more informative\n * than the cache write attempt).\n *\n * `tokens` is intentionally left undefined — the server tokenizes.\n */\nexport function extractAnthropicSegments(\n params: AnthropicMessageCreateParams,\n response?: AnthropicMessageResponse,\n): ContextSegment[] {\n const segments: ContextSegment[] = [];\n let position = 0;\n\n // 1. Tools → tool_descriptions.\n if (Array.isArray(params.tools) && params.tools.length > 0) {\n const content = canonicalJsonStringify(params.tools);\n segments.push(makeSegment(position++, \"tool_descriptions\", content));\n }\n\n // 2. System.\n let systemHadEphemeral = false;\n if (params.system !== undefined && params.system !== null) {\n let text = \"\";\n if (typeof params.system === \"string\") {\n text = params.system;\n } else if (Array.isArray(params.system)) {\n const parts: string[] = [];\n for (const block of params.system) {\n if (block && typeof block === \"object\" && block.type === \"text\") {\n parts.push(typeof block.text === \"string\" ? block.text : \"\");\n if (\n block.cache_control &&\n typeof block.cache_control === \"object\" &&\n (block.cache_control as { type?: string }).type === \"ephemeral\"\n ) {\n systemHadEphemeral = true;\n }\n }\n }\n text = parts.join(\"\\n\");\n }\n const seg = makeSegment(position++, \"system_prompt\", text);\n if (systemHadEphemeral) seg.cache_state = \"cache_write\";\n segments.push(seg);\n }\n\n // 3 + 4. Walk messages.\n const messages = Array.isArray(params.messages) ? params.messages : [];\n // Identify the index of the LAST user message so we can route only it\n // to current_input. Earlier user messages are chat_history.\n let lastUserIdx = -1;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i]?.role === \"user\") {\n lastUserIdx = i;\n break;\n }\n }\n\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i];\n if (!msg) continue;\n const blocks = normalizeContent(msg.content);\n // Tool-result blocks always emit their own tool_observation segments.\n const toolResults = blocks.filter(\n (b) => b.type === \"tool_result\",\n ) as AnthropicToolResultBlockParam[];\n const nonToolResults = blocks.filter((b) => b.type !== \"tool_result\");\n\n // The non-tool-result remainder belongs to either current_input,\n // chat_history, or, if empty, nothing.\n if (nonToolResults.length > 0) {\n const text = renderBlocksAsText(nonToolResults, msg.role);\n let source: string;\n if (msg.role === \"user\" && i === lastUserIdx) {\n source = \"current_input\";\n } else {\n source = \"chat_history\";\n }\n segments.push(makeSegment(position++, source, text));\n } else if (\n typeof msg.content === \"string\" &&\n msg.role === \"user\" &&\n i === lastUserIdx &&\n msg.content.length > 0\n ) {\n // Edge case: pure-string user message that's also the last user.\n segments.push(makeSegment(position++, \"current_input\", msg.content));\n }\n\n // Each tool_result emits its own segment, in order.\n for (const tr of toolResults) {\n const text = renderToolResult(tr);\n const seg = makeSegment(position++, \"tool_observation\", text);\n seg.attrs = { tool_use_id: tr.tool_use_id };\n if (tr.is_error) {\n (seg.attrs as Record<string, unknown>).is_error = true;\n }\n segments.push(seg);\n }\n }\n\n // Cache hit override.\n const cacheRead = response?.usage?.cache_read_input_tokens ?? 0;\n if (cacheRead > 0) {\n for (const seg of segments) {\n if (seg.source === \"system_prompt\" || seg.source === \"tool_descriptions\") {\n seg.cache_state = \"cache_hit\";\n }\n }\n }\n\n return segments;\n}\n\nfunction safeExtractSegments(\n params: AnthropicMessageCreateParams,\n response?: AnthropicMessageResponse,\n): ContextSegment[] {\n try {\n return extractAnthropicSegments(params, response);\n } catch {\n return [];\n }\n}\n\n/**\n * MEM-11 — emit a sibling `memory`-type span linked to the given LLM span.\n *\n * The memory span:\n * - `type = \"memory\"`\n * - `parent_span_id = llmSpan.span_id` (server stores as producer_span_id)\n * - `metadata.memory_op_type = \"consolidate\"`\n * - `metadata.summary_token_count = response.usage.output_tokens`\n * - `metadata.summary_content_hash = SHA-256 of response.content[0].text`\n *\n * Caller is responsible for catching exceptions — telemetry must never\n * break the customer's Anthropic call.\n */\nfunction emitSummarizeMemorySpan(llmSpan: SpanData, response?: AnthropicMessageResponse): void {\n const state = getActiveTraceState();\n if (state === null) return;\n\n const summaryText = extractFirstTextBlock(response);\n const summaryHash = sha256Hex(summaryText);\n const summaryTokens = response?.usage?.output_tokens ?? 0;\n\n const startedAt = llmSpan.ended_at ?? llmSpan.started_at ?? nowIso();\n const memorySpan: SpanData = {\n trace_id: state.traceId,\n span_id: generateSpanId(),\n type: \"memory\",\n name: \"anthropic.summarize\",\n parent_span_id: llmSpan.span_id,\n started_at: startedAt,\n ended_at: startedAt,\n duration_ms: 0,\n status: \"completed\",\n metadata: {\n memory_op_type: \"consolidate\",\n summary_token_count: summaryTokens,\n summary_content_hash: summaryHash,\n },\n };\n state.completedSpans.push(memorySpan);\n}\n\n/**\n * Return the first text block of an Anthropic message response, or \"\" if\n * there is none. Best-effort; never throws.\n */\nfunction extractFirstTextBlock(response?: AnthropicMessageResponse): string {\n try {\n const content = response?.content;\n if (!Array.isArray(content)) return \"\";\n for (const block of content) {\n if (block && typeof block === \"object\" && block.type === \"text\") {\n const t = (block as { text?: unknown }).text;\n if (typeof t === \"string\" && t.length > 0) return t;\n }\n }\n return \"\";\n } catch {\n return \"\";\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Helpers — segment construction */\n/* ------------------------------------------------------------------------ */\n\nfunction makeSegment(position: number, source: string, rawContent: string): ContextSegment {\n const fullHash = sha256Hex(rawContent);\n const truncated = truncateToBytes(rawContent, MAX_SEGMENT_CONTENT_BYTES);\n const seg: ContextSegment = {\n position,\n source,\n content_hash: fullHash,\n content: truncated.text,\n cache_state: \"cold\",\n };\n if (truncated.truncated) seg.content_truncated = true;\n return seg;\n}\n\nfunction normalizeContent(content: AnthropicMessageParam[\"content\"]): AnthropicContentBlockParam[] {\n if (typeof content === \"string\") {\n return [{ type: \"text\", text: content }];\n }\n if (Array.isArray(content)) {\n return content.filter((b): b is AnthropicContentBlockParam => !!b && typeof b === \"object\");\n }\n return [];\n}\n\nfunction renderBlocksAsText(blocks: AnthropicContentBlockParam[], role: string): string {\n // For chat_history / current_input we want a deterministic, hashable\n // string. Plain `text` blocks render as their text. `tool_use` blocks\n // render as a stable JSON marker so two equivalent calls hash the same.\n const out: string[] = [];\n for (const b of blocks) {\n if (!b || typeof b !== \"object\") continue;\n if (b.type === \"text\") {\n const text = (b as AnthropicTextBlockParam).text;\n if (typeof text === \"string\") out.push(text);\n } else if (b.type === \"tool_use\") {\n const tu = b as AnthropicToolUseBlockParam;\n out.push(`[tool_use:${tu.name}:${tu.id}] ${canonicalJsonStringify(tu.input ?? null)}`);\n } else {\n // Unknown block type — best-effort serialize.\n out.push(canonicalJsonStringify(b));\n }\n }\n // Prefix with role for disambiguation in chat_history; keeps the\n // segment self-describing without bloating the hash too much.\n if (role === \"assistant\") {\n return out.length === 1 && out[0] !== undefined ? out[0] : out.join(\"\\n\");\n }\n return out.length === 1 && out[0] !== undefined ? out[0] : out.join(\"\\n\");\n}\n\nfunction renderToolResult(tr: AnthropicToolResultBlockParam): string {\n if (typeof tr.content === \"string\") return tr.content;\n if (Array.isArray(tr.content)) {\n const parts: string[] = [];\n for (const b of tr.content) {\n if (b && typeof b === \"object\") {\n if (b.type === \"text\" && typeof b.text === \"string\") parts.push(b.text);\n else parts.push(canonicalJsonStringify(b));\n }\n }\n return parts.join(\"\\n\");\n }\n return \"\";\n}\n\n/* ------------------------------------------------------------------------ */\n/* Helpers — hashing + JSON canonicalization + byte truncation */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Stringify with stable key ordering so equivalent objects hash to the\n * same content_hash regardless of property insertion order.\n */\nfunction canonicalJsonStringify(value: unknown): string {\n return JSON.stringify(value, function replacer(_key, val) {\n if (val && typeof val === \"object\" && !Array.isArray(val)) {\n const obj = val as Record<string, unknown>;\n const sorted: Record<string, unknown> = {};\n for (const k of Object.keys(obj).sort()) {\n sorted[k] = obj[k];\n }\n return sorted;\n }\n return val;\n });\n}\n\n/**\n * Compute SHA-256 of `text` and return it hex-encoded. Tries Node's\n * `node:crypto` first (synchronous + zero-dep), falls back to a tiny\n * pure-TS impl when neither Node nor a Web Crypto sync API is available.\n *\n * NOTE: Web Crypto's `digest()` is async, but the segment-construction\n * path is sync. We therefore only use the Node sync API here. On the\n * browser we fall back to the pure-TS impl, which is fine for the\n * relatively short strings we hash (system prompts, tool defs, single\n * messages).\n */\nfunction sha256Hex(text: string): string {\n // Strategy 1: Node's crypto.createHash. Sync and dep-free.\n try {\n if (typeof process !== \"undefined\" && process.versions?.node) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const dynamicRequire = Function(\"m\", \"return require(m)\") as any as (m: string) => unknown;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cryptoMod = dynamicRequire(\"node:crypto\") as any;\n if (cryptoMod?.createHash) {\n return cryptoMod.createHash(\"sha256\").update(text).digest(\"hex\");\n }\n }\n } catch {\n // fall through\n }\n // Strategy 2: pure-TS sha256 (used in browsers).\n return purejsSha256(text);\n}\n\nfunction truncateToBytes(text: string, maxBytes: number): { text: string; truncated: boolean } {\n // Fast path: cheap upper bound. 1 char ≤ 4 bytes UTF-8.\n if (text.length <= maxBytes / 4) return { text, truncated: false };\n // Build the encoded bytes once.\n const bytes = utf8Encode(text);\n if (bytes.length <= maxBytes) return { text, truncated: false };\n // Find the largest character boundary <= maxBytes.\n let cut = maxBytes;\n // Don't split a multi-byte sequence: walk back until we're at a\n // codepoint boundary (a byte where the top two bits aren't `10`).\n while (cut > 0 && (bytes[cut]! & 0xc0) === 0x80) {\n cut--;\n }\n return { text: utf8Decode(bytes.subarray(0, cut)), truncated: true };\n}\n\nfunction utf8Encode(text: string): Uint8Array {\n if (typeof TextEncoder !== \"undefined\") {\n return new TextEncoder().encode(text);\n }\n // Pure-JS fallback. Should never trigger on Node 18+ or modern browsers.\n const out: number[] = [];\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i);\n if (code < 0x80) {\n out.push(code);\n } else if (code < 0x800) {\n out.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f));\n } else {\n out.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f));\n }\n }\n return new Uint8Array(out);\n}\n\nfunction utf8Decode(bytes: Uint8Array): string {\n if (typeof TextDecoder !== \"undefined\") {\n return new TextDecoder(\"utf-8\").decode(bytes);\n }\n let out = \"\";\n for (let i = 0; i < bytes.length; ) {\n const b = bytes[i]!;\n if (b < 0x80) {\n out += String.fromCharCode(b);\n i++;\n } else if (b < 0xe0) {\n out += String.fromCharCode(((b & 0x1f) << 6) | (bytes[i + 1]! & 0x3f));\n i += 2;\n } else {\n out += String.fromCharCode(\n ((b & 0x0f) << 12) | ((bytes[i + 1]! & 0x3f) << 6) | (bytes[i + 2]! & 0x3f),\n );\n i += 3;\n }\n }\n return out;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Pure-JS SHA-256 (used only when node:crypto is unavailable) */\n/* ------------------------------------------------------------------------ */\n\nfunction purejsSha256(text: string): string {\n const K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n ];\n const H = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n ];\n\n // Pad message.\n const msg = utf8Encode(text);\n const msgLen = msg.length;\n const bitLen = msgLen * 8;\n const padded = new Uint8Array(((msgLen + 9 + 63) >> 6) << 6);\n padded.set(msg);\n padded[msgLen] = 0x80;\n // 64-bit big-endian length. JS bitwise ops are 32-bit, so split lo/hi via /.\n const lo = (bitLen & 0xffffffff) >>> 0;\n const hi = Math.floor(bitLen / 0x100000000) >>> 0;\n padded[padded.length - 8] = (hi >>> 24) & 0xff;\n padded[padded.length - 7] = (hi >>> 16) & 0xff;\n padded[padded.length - 6] = (hi >>> 8) & 0xff;\n padded[padded.length - 5] = hi & 0xff;\n padded[padded.length - 4] = (lo >>> 24) & 0xff;\n padded[padded.length - 3] = (lo >>> 16) & 0xff;\n padded[padded.length - 2] = (lo >>> 8) & 0xff;\n padded[padded.length - 1] = lo & 0xff;\n\n const W = new Uint32Array(64);\n for (let chunk = 0; chunk < padded.length; chunk += 64) {\n for (let i = 0; i < 16; i++) {\n // `>>> 0` forces unsigned — `(byte << 24)` otherwise produces a signed\n // int when the high bit is set, which corrupts the schedule on bytes ≥ 0x80.\n W[i] =\n ((padded[chunk + i * 4]! << 24) |\n (padded[chunk + i * 4 + 1]! << 16) |\n (padded[chunk + i * 4 + 2]! << 8) |\n padded[chunk + i * 4 + 3]!) >>>\n 0;\n }\n for (let i = 16; i < 64; i++) {\n const s0 = rotr(W[i - 15]!, 7) ^ rotr(W[i - 15]!, 18) ^ (W[i - 15]! >>> 3);\n const s1 = rotr(W[i - 2]!, 17) ^ rotr(W[i - 2]!, 19) ^ (W[i - 2]! >>> 10);\n W[i] = (W[i - 16]! + s0 + W[i - 7]! + s1) >>> 0;\n }\n\n let [a, b, c, d, e, f, g, h] = H;\n\n for (let i = 0; i < 64; i++) {\n const S1 = rotr(e!, 6) ^ rotr(e!, 11) ^ rotr(e!, 25);\n const ch = (e! & f!) ^ (~e! & g!);\n const temp1 = (h! + S1 + ch + K[i]! + W[i]!) >>> 0;\n const S0 = rotr(a!, 2) ^ rotr(a!, 13) ^ rotr(a!, 22);\n const maj = (a! & b!) ^ (a! & c!) ^ (b! & c!);\n const temp2 = (S0 + maj) >>> 0;\n h = g;\n g = f;\n f = e;\n e = (d! + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n\n H[0] = (H[0]! + a!) >>> 0;\n H[1] = (H[1]! + b!) >>> 0;\n H[2] = (H[2]! + c!) >>> 0;\n H[3] = (H[3]! + d!) >>> 0;\n H[4] = (H[4]! + e!) >>> 0;\n H[5] = (H[5]! + f!) >>> 0;\n H[6] = (H[6]! + g!) >>> 0;\n H[7] = (H[7]! + h!) >>> 0;\n }\n\n let hex = \"\";\n for (const v of H) {\n hex += v.toString(16).padStart(8, \"0\");\n }\n return hex;\n}\n\nfunction rotr(x: number, n: number): number {\n return ((x >>> n) | (x << (32 - n))) >>> 0;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { absorbErrorsSync } from './chunk-RDNSY73W.js';
2
- import { init_tracing, startSpan } from './chunk-7G266PKE.js';
1
+ import { absorbErrorsSync } from './chunk-ERH3TNXZ.js';
2
+ import { init_tracing, startSpan } from './chunk-HJV35HWL.js';
3
3
 
4
4
  // src/_agent-sdk-common/span-emitter.ts
5
5
  init_tracing();
@@ -134,6 +134,28 @@ var _emitSubagentSpan = (opts) => {
134
134
  var emitSubagentSpan = absorbErrorsSync(_emitSubagentSpan, {
135
135
  fingerprint: "morse.adapters.shared.emitSubagentSpan"
136
136
  });
137
+ var _emitHandoffSpan = (opts) => {
138
+ const adapter = requireNonEmpty(opts.adapter, "adapter");
139
+ const fromAgent = truncate(requireNonEmpty(opts.fromAgent, "fromAgent"), MAX_NAME_BYTES);
140
+ const toAgent = truncate(requireNonEmpty(opts.toAgent, "toAgent"), MAX_NAME_BYTES);
141
+ const metadata = {
142
+ ...opts.attributes ?? {},
143
+ adapter,
144
+ from_agent: fromAgent,
145
+ to_agent: toAgent
146
+ };
147
+ if (typeof opts.reason === "string" && opts.reason.length > 0) {
148
+ metadata.handoff_reason = truncate(opts.reason, MAX_DESCRIPTION_BYTES);
149
+ }
150
+ return startSpan({
151
+ name: `${fromAgent} \u2192 ${toAgent}`,
152
+ type: "handoff",
153
+ metadata
154
+ });
155
+ };
156
+ var emitHandoffSpan = absorbErrorsSync(_emitHandoffSpan, {
157
+ fingerprint: "morse.adapters.shared.emitHandoffSpan"
158
+ });
137
159
  var _emitHookSpan = (opts) => {
138
160
  const adapter = requireNonEmpty(opts.adapter, "adapter");
139
161
  const hookName = truncate(requireNonEmpty(opts.hookName, "hookName"), MAX_NAME_BYTES);
@@ -168,6 +190,6 @@ var emitHookSpan = absorbErrorsSync(
168
190
  }
169
191
  );
170
192
 
171
- export { emitAgentSpan, emitHookSpan, emitLlmSpan, emitSubagentSpan, emitToolSpan };
172
- //# sourceMappingURL=chunk-PIZVCAW7.js.map
173
- //# sourceMappingURL=chunk-PIZVCAW7.js.map
193
+ export { emitAgentSpan, emitHandoffSpan, emitHookSpan, emitLlmSpan, emitSubagentSpan, emitToolSpan };
194
+ //# sourceMappingURL=chunk-GULJAURY.js.map
195
+ //# sourceMappingURL=chunk-GULJAURY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/_agent-sdk-common/span-emitter.ts"],"names":[],"mappings":"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","file":"chunk-GULJAURY.js","sourcesContent":["/**\n * `_agent-sdk-common/span-emitter.ts` — shared span-emission helpers used by\n * all three agent-SDK adapters (`anthropic-agent-sdk`, `openai-agents`,\n * `langgraph-js`).\n *\n * Each helper:\n *\n * 1. Validates the required metadata for its logical span type.\n * 2. Calls `startSpan(...)` from `_internal/tracing.ts` to allocate the\n * wire-format span and push it onto the active trace's span stack.\n * 3. Tags `metadata.adapter` on every span so the UI can attribute spans\n * back to their adapter origin.\n * 4. Hydrates type-specific top-level fields (`model`, `input_tokens`,\n * `output_tokens`, `total_tokens`, `context_segments`) onto `SpanData`.\n * 5. Returns the `SpanHandle` so callers can later call `.end(err?)`.\n *\n * All helpers are wrapped in `absorbErrorsSync` — telemetry MUST NOT throw\n * at the caller. If `startSpan` returns `null` (no active trace), the\n * helper also returns `null`; callers must tolerate this case.\n *\n * Logical → wire `type` mapping (per `design.md` §Span schema):\n *\n * agent → \"agent\"\n * llm → \"llm\"\n * tool → \"tool\"\n * subagent → \"agent\" + metadata.spawn_kind = \"subagent\"\n * hook → \"tool\" + metadata.tool_kind = \"hook\"\n * handoff → \"handoff\" (native since MHQ-1025 — no metadata stand-in)\n *\n * Adapter-flavoured redaction (tool-arg truncation, base64/image\n * stripping) lives in a sibling `redaction.ts` (W1.2). This file is\n * intentionally agnostic: the only redaction it applies is a minimal\n * string-length guard on free-form fields that would otherwise blow up\n * the wire payload (task descriptions, hook names, tool names).\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { ContextSegment, SpanData } from \"../_internal/spans\";\nimport { startSpan, type SpanHandle } from \"../_internal/tracing\";\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\nexport type AdapterName = \"anthropic-agent-sdk\" | \"openai-agents\" | \"langgraph-js\" | \"vercel-ai\";\n\n/** Soft cap for free-form identifier-ish strings (tool names, hook names, etc.). */\nconst MAX_NAME_BYTES = 256;\n\n/** Soft cap for free-form description strings (task descriptions). */\nconst MAX_DESCRIPTION_BYTES = 2048;\n\n/** Trim a string to `maxBytes` bytes (UTF-8 codepoint-safe at the JS-string level). */\nfunction truncate(value: string, maxBytes: number): string {\n if (value.length <= maxBytes) return value;\n return `${value.slice(0, maxBytes)}…[truncated]`;\n}\n\nfunction requireNonEmpty(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`morse span-emitter: ${field} must be a non-empty string`);\n }\n return value;\n}\n\n/* ------------------------------------------------------------------------ */\n/* emitAgentSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitAgentSpanOptions {\n adapter: AdapterName;\n agentName: string;\n model?: string;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitAgentSpan = (opts: EmitAgentSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const agentName = requireNonEmpty(opts.agentName, \"agentName\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n agent_name: agentName,\n };\n const handle = startSpan({\n name: `${adapter}.agent`,\n type: \"agent\",\n metadata,\n });\n if (handle === null) return null;\n if (typeof opts.model === \"string\" && opts.model.length > 0) {\n handle.span.model = opts.model;\n metadata.model = opts.model;\n }\n return handle;\n};\n\n/**\n * Emit a wire `type=agent` span. Returns `null` when no active trace exists\n * (callers MUST tolerate this); never throws.\n */\nexport const emitAgentSpan: (opts: EmitAgentSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitAgentSpan,\n {\n fingerprint: \"morse.adapters.shared.emitAgentSpan\",\n },\n) as (opts: EmitAgentSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitLlmSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitLlmSpanOptions {\n adapter: AdapterName;\n model: string;\n provider?: string;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n contextSegments?: ContextSegment[];\n attributes?: Record<string, unknown>;\n // MHQ-858: prompt/response capture. Adapters pass already-truncated\n // values (see `_internal/llm-io.ts`); this emitter does not truncate.\n inputData?: unknown;\n outputData?: unknown;\n}\n\nconst _emitLlmSpan = (opts: EmitLlmSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const model = requireNonEmpty(opts.model, \"model\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n model,\n };\n if (typeof opts.provider === \"string\" && opts.provider.length > 0) {\n metadata.provider = opts.provider;\n }\n const handle = startSpan({\n name: `${adapter}.llm`,\n type: \"llm\",\n metadata,\n });\n if (handle === null) return null;\n const span: SpanData = handle.span;\n span.model = model;\n if (typeof opts.inputTokens === \"number\" && Number.isFinite(opts.inputTokens)) {\n span.input_tokens = opts.inputTokens;\n }\n if (typeof opts.outputTokens === \"number\" && Number.isFinite(opts.outputTokens)) {\n span.output_tokens = opts.outputTokens;\n }\n if (typeof opts.totalTokens === \"number\" && Number.isFinite(opts.totalTokens)) {\n span.total_tokens = opts.totalTokens;\n } else if (span.input_tokens !== undefined && span.output_tokens !== undefined) {\n span.total_tokens = span.input_tokens + span.output_tokens;\n }\n if (Array.isArray(opts.contextSegments)) {\n span.context_segments = opts.contextSegments;\n }\n if (opts.inputData !== undefined) span.input_data = opts.inputData;\n if (opts.outputData !== undefined) span.output_data = opts.outputData;\n return handle;\n};\n\n/**\n * Emit a wire `type=llm` span. Returns `null` when no active trace exists;\n * never throws. Hydrates `model`, `input_tokens`, `output_tokens`,\n * `total_tokens` (derived if absent), and `context_segments` onto the\n * underlying `SpanData` so downstream consumers see them at the top level\n * — not buried in `metadata`.\n */\nexport const emitLlmSpan: (opts: EmitLlmSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitLlmSpan,\n {\n fingerprint: \"morse.adapters.shared.emitLlmSpan\",\n },\n) as (opts: EmitLlmSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitToolSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitToolSpanOptions {\n adapter: AdapterName;\n toolName: string;\n inputSummary?: unknown;\n outputSummary?: unknown;\n durationMs?: number;\n success?: boolean;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitToolSpan = (opts: EmitToolSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const toolName = truncate(requireNonEmpty(opts.toolName, \"toolName\"), MAX_NAME_BYTES);\n const tool: Record<string, unknown> = { name: toolName };\n if (opts.inputSummary !== undefined) tool.input_summary = opts.inputSummary;\n if (opts.outputSummary !== undefined) tool.output_summary = opts.outputSummary;\n if (typeof opts.durationMs === \"number\" && Number.isFinite(opts.durationMs)) {\n tool.duration_ms = opts.durationMs;\n }\n if (typeof opts.success === \"boolean\") tool.success = opts.success;\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n tool,\n };\n return startSpan({\n name: `${adapter}.tool.${toolName}`,\n type: \"tool\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=tool` span. Returns `null` when no active trace exists;\n * never throws.\n */\nexport const emitToolSpan: (opts: EmitToolSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitToolSpan,\n {\n fingerprint: \"morse.adapters.shared.emitToolSpan\",\n },\n) as (opts: EmitToolSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitSubagentSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitSubagentSpanOptions {\n adapter: AdapterName;\n parentAgentName: string;\n subagentName: string;\n taskDescription?: string;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitSubagentSpan = (opts: EmitSubagentSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const parentAgentName = requireNonEmpty(opts.parentAgentName, \"parentAgentName\");\n const subagentName = requireNonEmpty(opts.subagentName, \"subagentName\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n spawn_kind: \"subagent\",\n parent_agent_name: parentAgentName,\n subagent_name: subagentName,\n };\n if (typeof opts.taskDescription === \"string\" && opts.taskDescription.length > 0) {\n metadata.task_description = truncate(opts.taskDescription, MAX_DESCRIPTION_BYTES);\n }\n return startSpan({\n name: `${adapter}.subagent.${subagentName}`,\n type: \"agent\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=agent` span with `metadata.spawn_kind=\"subagent\"` — the\n * UI inspects this metadata key to render subagent-spawn relationships\n * until the backend gains a native `subagent` enum value. Returns `null`\n * when no active trace exists; never throws.\n */\nexport const emitSubagentSpan: (opts: EmitSubagentSpanOptions) => SpanHandle | null =\n absorbErrorsSync(_emitSubagentSpan, {\n fingerprint: \"morse.adapters.shared.emitSubagentSpan\",\n }) as (opts: EmitSubagentSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitHandoffSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitHandoffSpanOptions {\n adapter: AdapterName;\n fromAgent: string;\n toAgent: string;\n reason?: string;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitHandoffSpan = (opts: EmitHandoffSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const fromAgent = truncate(requireNonEmpty(opts.fromAgent, \"fromAgent\"), MAX_NAME_BYTES);\n const toAgent = truncate(requireNonEmpty(opts.toAgent, \"toAgent\"), MAX_NAME_BYTES);\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n from_agent: fromAgent,\n to_agent: toAgent,\n };\n if (typeof opts.reason === \"string\" && opts.reason.length > 0) {\n metadata.handoff_reason = truncate(opts.reason, MAX_DESCRIPTION_BYTES);\n }\n return startSpan({\n name: `${fromAgent} → ${toAgent}`,\n type: \"handoff\",\n metadata,\n });\n};\n\n/**\n * Emit a native wire `type=handoff` span for one routing decision between two\n * agents (MHQ-1025). Mirrors the Python SDK: name `from → to`, metadata\n * `{from_agent, to_agent}`. Returns `null` when no active trace exists; never\n * throws.\n */\nexport const emitHandoffSpan: (opts: EmitHandoffSpanOptions) => SpanHandle | null =\n absorbErrorsSync(_emitHandoffSpan, {\n fingerprint: \"morse.adapters.shared.emitHandoffSpan\",\n }) as (opts: EmitHandoffSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitHookSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitHookSpanOptions {\n adapter: AdapterName;\n hookName: string;\n hookKind: \"pre_tool\" | \"post_tool\" | \"on_error\";\n durationMs?: number;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitHookSpan = (opts: EmitHookSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const hookName = truncate(requireNonEmpty(opts.hookName, \"hookName\"), MAX_NAME_BYTES);\n const hookKind = opts.hookKind;\n if (hookKind !== \"pre_tool\" && hookKind !== \"post_tool\" && hookKind !== \"on_error\") {\n throw new Error(\n `morse span-emitter: hookKind must be one of pre_tool|post_tool|on_error (got ${String(\n hookKind,\n )})`,\n );\n }\n const hook: Record<string, unknown> = { name: hookName, kind: hookKind };\n if (typeof opts.durationMs === \"number\" && Number.isFinite(opts.durationMs)) {\n hook.duration_ms = opts.durationMs;\n }\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n tool_kind: \"hook\",\n hook,\n };\n return startSpan({\n name: `${adapter}.hook.${hookKind}.${hookName}`,\n type: \"tool\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=tool` span with `metadata.tool_kind=\"hook\"` — the UI\n * inspects this metadata key to render hook spans separately from regular\n * tool spans. Returns `null` when no active trace exists; never throws.\n */\nexport const emitHookSpan: (opts: EmitHookSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitHookSpan,\n {\n fingerprint: \"morse.adapters.shared.emitHookSpan\",\n },\n) as (opts: EmitHookSpanOptions) => SpanHandle | null;\n"]}
@@ -453,6 +453,7 @@ function recordDrop(reason, category, quantity = 1) {
453
453
  if (checkBucket(localLogBuckets, `drop:${key}`, LOCAL_LOG_LIMIT_PER_WINDOW, LOCAL_LOG_WINDOW_MS)) {
454
454
  console.warn(`morse: dropped ${quantity} ${category} (${reason}) \u2014 telemetry is being lost`);
455
455
  }
456
+ if (transmissionAllowed()) ensureTimer();
456
457
  } catch {
457
458
  }
458
459
  }
@@ -626,7 +627,7 @@ var init_diagnostics = __esm({
626
627
  "src/_internal/diagnostics.ts"() {
627
628
  init_env();
628
629
  init_redaction();
629
- SDK_VERSION = "0.5.1-rc.1" ;
630
+ SDK_VERSION = "0.6.0-rc.1" ;
630
631
  LEVEL_OFF = "off";
631
632
  LEVEL_ERROR = "error";
632
633
  LEVEL_DEBUG = "debug";
@@ -729,7 +730,10 @@ var init_spans = __esm({
729
730
  // MHQ-482: matches Python's `SpanType.RETRIEVER` (apps/sdk/python/src/morse_ai/spans.py).
730
731
  // @beta — retriever span type is subject to change before SDK v1.0 (see
731
732
  // the plain-LangChain adapter's on_retriever_* callbacks in src/langchain/).
732
- RETRIEVER: "retriever"
733
+ RETRIEVER: "retriever",
734
+ // MHQ-1025: matches Python's `SpanType.HANDOFF`. One span per routing
735
+ // decision between two agents, with `from_agent` / `to_agent` metadata.
736
+ HANDOFF: "handoff"
733
737
  };
734
738
  }
735
739
  });
@@ -804,6 +808,14 @@ function redactAttrValue(value, config) {
804
808
  }
805
809
  return value;
806
810
  }
811
+ function dropReasonForExportError(error) {
812
+ const code = error?.code;
813
+ if (typeof code !== "number") return REASON_RETRY_EXHAUSTED;
814
+ if (code === 429) return REASON_QUOTA_REJECTED;
815
+ if (code === 401 || code === 403) return REASON_AUTH_REJECTED;
816
+ if (code >= 400 && code < 500) return REASON_ENDPOINT_REJECTED;
817
+ return REASON_SEND_FAILED;
818
+ }
807
819
  function getEngine() {
808
820
  if (engine === null) engine = new OtelEngine();
809
821
  return engine;
@@ -811,7 +823,7 @@ function getEngine() {
811
823
  function spanDictToOtelAttributes(spanDict, traceDict, resourceDict, opts) {
812
824
  const attrs = {};
813
825
  const spanType = spanDict.type;
814
- if (typeof spanType === "string" && spanType) attrs["av.span_type"] = spanType;
826
+ if (typeof spanType === "string" && spanType) attrs["morse.span_type"] = spanType;
815
827
  const model = spanDict.model;
816
828
  if (model !== void 0 && model !== null) attrs["gen_ai.request.model"] = String(model);
817
829
  const tokenFields = [
@@ -830,12 +842,12 @@ function spanDictToOtelAttributes(spanDict, traceDict, resourceDict, opts) {
830
842
  }
831
843
  const costUsd = spanDict.cost_usd;
832
844
  if (costUsd !== void 0 && costUsd !== null) {
833
- attrs["av.cost_usd"] = String(costUsd);
845
+ attrs["morse.cost_usd"] = String(costUsd);
834
846
  }
835
847
  for (const [src, otelKey] of [
836
- ["input_data", "av.input_data"],
837
- ["output_data", "av.output_data"],
838
- ["context_segments", "av.context_segments"]
848
+ ["input_data", "morse.input_data"],
849
+ ["output_data", "morse.output_data"],
850
+ ["context_segments", "morse.context_segments"]
839
851
  ]) {
840
852
  const v = spanDict[src];
841
853
  if (v !== void 0 && v !== null) {
@@ -847,35 +859,36 @@ function spanDictToOtelAttributes(spanDict, traceDict, resourceDict, opts) {
847
859
  if (metadata && typeof metadata === "object") {
848
860
  for (const [key, value] of Object.entries(metadata)) {
849
861
  const encoded = jsonCapped(value, opts.maxFieldBytes);
850
- if (encoded !== null) attrs[`av.metadata.${key}`] = encoded;
862
+ if (encoded !== null) attrs[`morse.metadata.${key}`] = encoded;
851
863
  }
852
864
  }
853
865
  const errorMessage = spanDict.error_message;
854
866
  if (opts.isRoot) {
855
867
  const threadId = traceDict.thread_id;
856
- if (threadId !== void 0 && threadId !== null) attrs["av.thread_id"] = String(threadId);
868
+ if (threadId !== void 0 && threadId !== null) attrs["morse.thread_id"] = String(threadId);
857
869
  const userId = traceDict.user_id;
858
- if (userId !== void 0 && userId !== null) attrs["av.user_id"] = String(userId);
870
+ if (userId !== void 0 && userId !== null) attrs["morse.user_id"] = String(userId);
859
871
  const userMetadata = traceDict.user_metadata;
860
872
  if (userMetadata && typeof userMetadata === "object") {
861
873
  const entries = Object.entries(userMetadata);
862
874
  if (entries.length > 0) {
863
- attrs["av.user_metadata"] = JSON.stringify(
875
+ attrs["morse.user_metadata"] = JSON.stringify(
864
876
  Object.fromEntries(entries.map(([k, v]) => [k, String(v)]))
865
877
  );
866
878
  }
867
879
  }
868
880
  const success = traceDict.success;
869
- if (success !== void 0 && success !== null) attrs["av.outcome.success"] = Boolean(success);
881
+ if (success !== void 0 && success !== null)
882
+ attrs["morse.outcome.success"] = Boolean(success);
870
883
  const outcome = traceDict.outcome;
871
- if (outcome !== void 0 && outcome !== null) attrs["av.outcome.label"] = String(outcome);
884
+ if (outcome !== void 0 && outcome !== null) attrs["morse.outcome.label"] = String(outcome);
872
885
  const framework = resourceDict["morse_ai.framework"];
873
- if (typeof framework === "string" && framework) attrs["av.framework"] = framework;
886
+ if (typeof framework === "string" && framework) attrs["morse.framework"] = framework;
874
887
  const source = resourceDict["morse_ai.source"];
875
- if (typeof source === "string" && source) attrs["av.source"] = source;
888
+ if (typeof source === "string" && source) attrs["morse.source"] = source;
876
889
  }
877
890
  if (errorMessage && spanDict.status === "failed") {
878
- attrs["av.error_message"] = String(errorMessage);
891
+ attrs["morse.error_message"] = String(errorMessage);
879
892
  }
880
893
  return attrs;
881
894
  }
@@ -967,7 +980,7 @@ function reportSwallowed(err, fingerprint) {
967
980
  } catch {
968
981
  }
969
982
  }
970
- var INSTRUMENTATION_NAME, DEFAULT_MAX_FIELD_BYTES, TRUNCATION_MARKER, contextManagerRegistered, MAX_U64, RedactingSpanExporter, RecordingSpanExporter, ResultCapturingExporter, OtelEngine, engine;
983
+ var INSTRUMENTATION_NAME, DEFAULT_MAX_FIELD_BYTES, TRUNCATION_MARKER, contextManagerRegistered, MAX_U64, RedactingSpanExporter, DropReportingExporter, RecordingSpanExporter, ResultCapturingExporter, OtelEngine, engine;
971
984
  var init_otel_provider = __esm({
972
985
  "src/_internal/otel-provider.ts"() {
973
986
  init_diagnostics();
@@ -1004,6 +1017,29 @@ var init_otel_provider = __esm({
1004
1017
  return this.inner.forceFlush ? this.inner.forceFlush() : Promise.resolve();
1005
1018
  }
1006
1019
  };
1020
+ DropReportingExporter = class {
1021
+ constructor(inner) {
1022
+ this.inner = inner;
1023
+ }
1024
+ inner;
1025
+ export(spans, resultCallback) {
1026
+ this.inner.export(spans, (result) => {
1027
+ if (result.code === ExportResultCode.FAILED) {
1028
+ try {
1029
+ recordDrop(dropReasonForExportError(result.error), "span", spans.length);
1030
+ } catch {
1031
+ }
1032
+ }
1033
+ resultCallback(result);
1034
+ });
1035
+ }
1036
+ shutdown() {
1037
+ return this.inner.shutdown();
1038
+ }
1039
+ forceFlush() {
1040
+ return this.inner.forceFlush ? this.inner.forceFlush() : Promise.resolve();
1041
+ }
1042
+ };
1007
1043
  RecordingSpanExporter = class {
1008
1044
  spans = [];
1009
1045
  export(spans, resultCallback) {
@@ -1070,7 +1106,10 @@ var init_otel_provider = __esm({
1070
1106
  compression: CompressionAlgorithm.GZIP,
1071
1107
  timeoutMillis: opts.timeoutMillis
1072
1108
  });
1073
- let exporter = new RedactingSpanExporter(otlpExporter, opts.redactionConfig);
1109
+ let exporter = new RedactingSpanExporter(
1110
+ new DropReportingExporter(otlpExporter),
1111
+ opts.redactionConfig
1112
+ );
1074
1113
  if (opts.resultSink) {
1075
1114
  exporter = new ResultCapturingExporter(exporter, opts.resultSink);
1076
1115
  }
@@ -1488,6 +1527,18 @@ function setContext(dims) {
1488
1527
  if (state.userMetadata === void 0) state.userMetadata = {};
1489
1528
  Object.assign(state.userMetadata, coerceDims(dims, "morse.tracing.set_context"));
1490
1529
  }
1530
+ function adoptThreadId(value) {
1531
+ const state = getActiveTraceState();
1532
+ if (state === null || state.threadId !== void 0 || value === null || value === void 0) {
1533
+ return;
1534
+ }
1535
+ try {
1536
+ const s = String(value);
1537
+ if (s !== "") state.threadId = s;
1538
+ } catch (err) {
1539
+ report(err, { fingerprint: "morse.tracing.adopt_thread_id" });
1540
+ }
1541
+ }
1491
1542
  function coerceDims(dims, fingerprint) {
1492
1543
  const out = {};
1493
1544
  for (const k of Object.keys(dims)) {
@@ -1688,6 +1739,6 @@ var init_propagation = __esm({
1688
1739
  }
1689
1740
  });
1690
1741
 
1691
- export { DEFAULT_ENDPOINT, REASON_AUTH_REJECTED, REASON_ENCODE_FAILED, REASON_ENDPOINT_REJECTED, REASON_QUEUE_FULL, REASON_QUOTA_REJECTED, REASON_RETRY_EXHAUSTED, REASON_SEND_FAILED, REASON_SHUTDOWN_DROP, SpanType, W3C_TRACEPARENT_HEADER, _resetForTesting, _resetForTesting2, buildRedactionConfig, buildTraceEntry, extractTraceparent, flushOnce, formatTraceparent, generateSpanId, generateTraceId, getActiveTraceState, getApiKey, getEndpoint, getEngine, getFlushIntervalSeconds, getInternalSource, getLastTrace, getMaxBatchSize, getMaxFieldBytes, getMaxQueueSize, getRedactionConfig, getSampleRate, getTransport, init_diagnostics, init_env, init_otel_provider, init_propagation, init_redaction, init_spans, init_tracing, injectIntoRequestInit, injectTraceparent, isAutoDetectDisabled, isDbCaptureEnabled, isDisabled, isValidInternalSource, nowIso, recordDrop, redactValue, report, runAsync, runSync, sendTrace, setContext, setDiagnosticsClientConfig, setLevel, setRedactionConfig2 as setRedactionConfig, setSource, setTransport, spanAsync, spanSync, startSpan };
1692
- //# sourceMappingURL=chunk-YGKEP2GY.js.map
1693
- //# sourceMappingURL=chunk-YGKEP2GY.js.map
1742
+ export { DEFAULT_ENDPOINT, REASON_AUTH_REJECTED, REASON_ENCODE_FAILED, REASON_ENDPOINT_REJECTED, REASON_QUEUE_FULL, REASON_QUOTA_REJECTED, REASON_RETRY_EXHAUSTED, REASON_SEND_FAILED, REASON_SHUTDOWN_DROP, SpanType, W3C_TRACEPARENT_HEADER, _resetForTesting, _resetForTesting2, adoptThreadId, buildRedactionConfig, buildTraceEntry, extractTraceparent, flushOnce, formatTraceparent, generateSpanId, generateTraceId, getActiveTraceState, getApiKey, getEndpoint, getEngine, getFlushIntervalSeconds, getInternalSource, getLastTrace, getMaxBatchSize, getMaxFieldBytes, getMaxQueueSize, getRedactionConfig, getSampleRate, getTransport, init_diagnostics, init_env, init_otel_provider, init_propagation, init_redaction, init_spans, init_tracing, injectIntoRequestInit, injectTraceparent, isAutoDetectDisabled, isDbCaptureEnabled, isDisabled, isValidInternalSource, nowIso, recordDrop, redactValue, report, runAsync, runSync, sendTrace, setContext, setDiagnosticsClientConfig, setLevel, setRedactionConfig2 as setRedactionConfig, setSource, setTransport, spanAsync, spanSync, startSpan };
1743
+ //# sourceMappingURL=chunk-HJV35HWL.js.map
1744
+ //# sourceMappingURL=chunk-HJV35HWL.js.map