@morsehq-dev/sdk 0.5.0-rc.3 → 0.5.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -0
- package/dist/anthropic/index.cjs +11 -11
- package/dist/anthropic/index.js +4 -4
- package/dist/anthropic-agent-sdk/index.cjs +37 -37
- package/dist/anthropic-agent-sdk/index.js +6 -6
- package/dist/browser/anthropic/index.cjs +11 -11
- package/dist/browser/anthropic/index.js +4 -4
- package/dist/browser/anthropic-agent-sdk/index.cjs +37 -37
- package/dist/browser/anthropic-agent-sdk/index.js +6 -6
- package/dist/{chunk-DPGUBZVO.cjs → browser/chunk-255AHH2W.cjs} +15 -15
- package/dist/browser/{chunk-XLQSSJUZ.cjs.map → chunk-255AHH2W.cjs.map} +1 -1
- package/dist/browser/{chunk-QCI2ZDQS.cjs → chunk-36QTJJT7.cjs} +12 -12
- package/dist/browser/{chunk-QCI2ZDQS.cjs.map → chunk-36QTJJT7.cjs.map} +1 -1
- package/dist/browser/{chunk-PM5D6VXF.cjs → chunk-3H2OJLC2.cjs} +4 -3
- package/dist/browser/{chunk-PM5D6VXF.cjs.map → chunk-3H2OJLC2.cjs.map} +1 -1
- package/dist/browser/{chunk-P7XWSMFX.cjs → chunk-3STFITZF.cjs} +6 -6
- package/dist/browser/{chunk-P7XWSMFX.cjs.map → chunk-3STFITZF.cjs.map} +1 -1
- package/dist/browser/{chunk-YSJVJ3Z3.cjs → chunk-6J6F5LJI.cjs} +7 -7
- package/dist/browser/{chunk-YSJVJ3Z3.cjs.map → chunk-6J6F5LJI.cjs.map} +1 -1
- package/dist/browser/{chunk-LGG5PL5U.js → chunk-E2OVLWAF.js} +3 -3
- package/dist/browser/{chunk-LGG5PL5U.js.map → chunk-E2OVLWAF.js.map} +1 -1
- package/dist/{chunk-HCEKAVDR.js → browser/chunk-JR6JN7IZ.js} +4 -4
- package/dist/browser/{chunk-KGSLJLWW.js.map → chunk-JR6JN7IZ.js.map} +1 -1
- package/dist/browser/{chunk-WUQXNRD3.js → chunk-KXVSMY6L.js} +3 -3
- package/dist/browser/{chunk-WUQXNRD3.js.map → chunk-KXVSMY6L.js.map} +1 -1
- package/dist/browser/{chunk-N4Q2WMOE.js → chunk-PIWO5L5N.js} +5 -5
- package/dist/browser/{chunk-N4Q2WMOE.js.map → chunk-PIWO5L5N.js.map} +1 -1
- package/dist/browser/{chunk-KFWCOUL3.cjs → chunk-VOZBYSWK.cjs} +5 -5
- package/dist/browser/{chunk-KFWCOUL3.cjs.map → chunk-VOZBYSWK.cjs.map} +1 -1
- package/dist/{chunk-7PGR4NJG.js → browser/chunk-VZA2EPY3.js} +4 -4
- package/dist/browser/{chunk-MOBYR3AP.js.map → chunk-VZA2EPY3.js.map} +1 -1
- package/dist/browser/{chunk-MI4OUWUZ.js → chunk-WIWUEI5Z.js} +3 -3
- package/dist/browser/{chunk-MI4OUWUZ.js.map → chunk-WIWUEI5Z.js.map} +1 -1
- package/dist/browser/{chunk-Y3BOPSM3.js → chunk-XD4VWCAC.js} +4 -4
- package/dist/browser/{chunk-Y3BOPSM3.js.map → chunk-XD4VWCAC.js.map} +1 -1
- package/dist/browser/{chunk-VSG4EWNL.cjs → chunk-YD7TO4PD.cjs} +18 -18
- package/dist/browser/{chunk-VSG4EWNL.cjs.map → chunk-YD7TO4PD.cjs.map} +1 -1
- package/dist/browser/index.cjs +91 -90
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +9 -8
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/integrations/pino.cjs +4 -4
- package/dist/browser/integrations/pino.js +3 -3
- package/dist/browser/langchain/index.cjs +17 -17
- package/dist/browser/langchain/index.js +2 -2
- package/dist/browser/langgraph/index.cjs +27 -27
- package/dist/browser/langgraph/index.js +5 -5
- package/dist/browser/openai/index.cjs +11 -11
- package/dist/browser/openai/index.js +2 -2
- package/dist/browser/openai-agents/index.cjs +34 -34
- package/dist/browser/openai-agents/index.js +4 -4
- package/dist/browser/vercel-ai/index.cjs +14 -14
- package/dist/browser/vercel-ai/index.js +3 -3
- package/dist/{chunk-XHOLQGN6.js → chunk-2O2FFJLK.js} +5 -5
- package/dist/{chunk-XHOLQGN6.js.map → chunk-2O2FFJLK.js.map} +1 -1
- package/dist/{chunk-3XQOZXJM.cjs → chunk-7ZNGY236.cjs} +7 -7
- package/dist/{chunk-3XQOZXJM.cjs.map → chunk-7ZNGY236.cjs.map} +1 -1
- package/dist/{browser/chunk-MOBYR3AP.js → chunk-BNMTY7PE.js} +4 -4
- package/dist/{chunk-7PGR4NJG.js.map → chunk-BNMTY7PE.js.map} +1 -1
- package/dist/{chunk-XZRJXJFA.js → chunk-ELBY4SJ7.js} +4 -4
- package/dist/{chunk-XZRJXJFA.js.map → chunk-ELBY4SJ7.js.map} +1 -1
- package/dist/{chunk-E3G3IE6Y.cjs → chunk-HA5RY4N5.cjs} +4 -3
- package/dist/{chunk-E3G3IE6Y.cjs.map → chunk-HA5RY4N5.cjs.map} +1 -1
- package/dist/{chunk-NGBJJGOC.cjs → chunk-HZKXILBF.cjs} +5 -5
- package/dist/{chunk-NGBJJGOC.cjs.map → chunk-HZKXILBF.cjs.map} +1 -1
- package/dist/{chunk-ZFE75G7S.js → chunk-JFFZBCTP.js} +3 -3
- package/dist/{chunk-ZFE75G7S.js.map → chunk-JFFZBCTP.js.map} +1 -1
- package/dist/{browser/chunk-KGSLJLWW.js → chunk-MBOISGKD.js} +4 -4
- package/dist/{chunk-HCEKAVDR.js.map → chunk-MBOISGKD.js.map} +1 -1
- package/dist/{chunk-UAJO6JM7.js → chunk-Q6NQQ2LO.js} +3 -3
- package/dist/{chunk-UAJO6JM7.js.map → chunk-Q6NQQ2LO.js.map} +1 -1
- package/dist/{chunk-TGHDV5MC.cjs → chunk-RDFDPK2X.cjs} +6 -6
- package/dist/{chunk-TGHDV5MC.cjs.map → chunk-RDFDPK2X.cjs.map} +1 -1
- package/dist/{chunk-RK3JPX27.cjs → chunk-ULWGK6F5.cjs} +12 -12
- package/dist/{chunk-RK3JPX27.cjs.map → chunk-ULWGK6F5.cjs.map} +1 -1
- package/dist/{chunk-YQ6ZA7OE.cjs → chunk-VM3QM22Z.cjs} +18 -18
- package/dist/{chunk-YQ6ZA7OE.cjs.map → chunk-VM3QM22Z.cjs.map} +1 -1
- package/dist/{browser/chunk-XLQSSJUZ.cjs → chunk-WLNADB4J.cjs} +15 -15
- package/dist/{chunk-DPGUBZVO.cjs.map → chunk-WLNADB4J.cjs.map} +1 -1
- package/dist/{chunk-T2NESDMT.js → chunk-YPP5DDPO.js} +3 -3
- package/dist/{chunk-T2NESDMT.js.map → chunk-YPP5DDPO.js.map} +1 -1
- package/dist/index.cjs +98 -97
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +10 -9
- package/dist/index.js.map +1 -1
- package/dist/integrations/pino.cjs +4 -4
- package/dist/integrations/pino.js +3 -3
- package/dist/langchain/index.cjs +17 -17
- package/dist/langchain/index.js +2 -2
- package/dist/langgraph/index.cjs +27 -27
- package/dist/langgraph/index.js +5 -5
- package/dist/openai/index.cjs +11 -11
- package/dist/openai/index.js +2 -2
- package/dist/openai-agents/index.cjs +34 -34
- package/dist/openai-agents/index.js +4 -4
- package/dist/vercel-ai/index.cjs +14 -14
- package/dist/vercel-ai/index.js +3 -3
- package/package.json +14 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/_internal/active-framework.ts","../../src/_internal/llm-io.ts"],"names":[],"mappings":"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","file":"chunk-WUQXNRD3.js","sourcesContent":["/**\n * MHQ-859 — active framework discovery, the TS half of AGE-240.\n *\n * Python has had this since AGE-240: each adapter marks itself active when\n * it intercepts a call, the trace stamps `morse_ai.framework` on its\n * resource, and the server uses it to disambiguate agents that share a\n * logical name but not an implementation. TypeScript had the *consumer*\n * side wired all along — `otel-provider.ts` already maps\n * `resource[\"morse_ai.framework\"]` to the `av.framework` root-span\n * attribute — but nothing ever set it, so every TS trace landed with\n * `framework` NULL and framework filtering silently excluded all TS traffic.\n *\n * Python uses a `threading.local`. The Node equivalent is per-trace state,\n * not per-thread: `AsyncLocalStorage` already scopes the active trace, and\n * concurrent traces in one process must not see each other's marker. So the\n * marker is written straight onto the active trace state and there is no\n * module-global to leak across interleaved async calls — which also removes\n * the need for Python's `clear_active_framework()` try/finally discipline.\n *\n * First framework wins per trace: when a customer mixes two adapters in one\n * trace, the first to fire defines the label. Absence is the signal — never\n * invent a default.\n */\n\nimport { getActiveTraceState } from \"./tracing\";\n\n/**\n * Mark `name` as the framework for the currently-active trace.\n *\n * No-op when no trace is active (an adapter can fire outside `run()`), and\n * no-op when a framework is already set. Never throws — telemetry must not\n * break customer code.\n */\nexport function setActiveFramework(name: string): void {\n if (typeof name !== \"string\" || name.length === 0) return;\n try {\n const state = getActiveTraceState();\n if (state !== null && !state.framework) {\n state.framework = name;\n }\n } catch {\n // swallow — never break the caller\n }\n}\n\n/** Framework recorded on the active trace, or `undefined`. */\nexport function getActiveFramework(): string | undefined {\n try {\n return getActiveTraceState()?.framework ?? undefined;\n } catch {\n return undefined;\n }\n}\n","/**\n * MHQ-858 — shared `input_data` / `output_data` capture for LLM spans.\n *\n * Python's adapters have captured prompt/response content on `llm` spans\n * since MHQ-772; no TypeScript adapter ever did, so the trace-detail\n * INPUT/OUTPUT panes were empty for every TS customer while being populated\n * for the Python customer running the identical workload.\n *\n * Mirrors `morse_ai/adapters/anthropic.py`'s `_safe_input_messages` /\n * `_extract_output_text`, including the 4096-byte cap, so the two SDKs\n * produce the same shape for the same call.\n */\n\nimport { contentToText, getContent, getRole } from \"../_agent-sdk-common/context-decomposer\";\n\n/** Bytes of text kept per field. Matches Python's `_CONTENT_BYTE_CAP`. */\nexport const CONTENT_BYTE_CAP = 4096;\n\n/**\n * Truncate on a UTF-8 *byte* budget, not a UTF-16 code-unit count — a\n * 4096-char string of emoji is 16KB on the wire. Never splits a code point.\n */\nexport function truncateText(text: string, maxBytes: number = CONTENT_BYTE_CAP): string {\n if (typeof text !== \"string\" || text.length === 0) return text;\n const encoder = new TextEncoder();\n const bytes = encoder.encode(text);\n if (bytes.length <= maxBytes) return text;\n // `fatal: false` replaces a trailing partial code point with U+FFFD\n // rather than throwing; drop it so the value stays clean.\n const sliced = new TextDecoder(\"utf-8\", { fatal: false }).decode(bytes.subarray(0, maxBytes));\n return sliced.replace(/�$/, \"\") + \"…\";\n}\n\nexport interface CapturedInput {\n messages: Array<{ role?: unknown; content?: unknown }>;\n system?: string;\n}\n\n/**\n * Build a truncated, JSON-safe `input_data` from a chat-completions-shaped\n * request. String content is truncated; block-form content (tool_use,\n * tool_result, image parts) passes through as-is — per-block truncation\n * would mean reconstructing each provider's content-block schema exactly,\n * which is not worth it for a display field.\n *\n * Returns `undefined` when there is nothing worth showing, so callers can\n * assign unconditionally without writing empty objects onto the wire.\n */\nexport function captureInputMessages(\n messages: unknown,\n system?: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n\n const safeMessages = messages\n .filter((m): m is Record<string, unknown> => typeof m === \"object\" && m !== null)\n .map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? truncateText(m.content, maxBytes) : m.content,\n }));\n if (safeMessages.length === 0) return undefined;\n\n const out: CapturedInput = { messages: safeMessages };\n const systemText = flattenSystem(system);\n if (systemText) out.system = truncateText(systemText, maxBytes);\n return out;\n}\n\n/**\n * Anthropic's `system` is either a string or an array of text blocks.\n * Returns `undefined` when neither yields text.\n */\nexport function flattenSystem(system: unknown): string | undefined {\n if (typeof system === \"string\") return system || undefined;\n if (!Array.isArray(system)) return undefined;\n const parts = system\n .map((block) =>\n typeof block === \"string\"\n ? block\n : typeof (block as { text?: unknown })?.text === \"string\"\n ? (block as { text: string }).text\n : \"\",\n )\n .filter(Boolean);\n return parts.length > 0 ? parts.join(\"\\n\") : undefined;\n}\n\n/**\n * Extract the assistant's text from an Anthropic `Message.content` array.\n * A response that only calls a tool still yields something meaningful\n * rather than nothing — same rule as Python's `_extract_output_text`.\n */\nexport function extractAnthropicOutputText(\n content: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(content) || content.length === 0) return undefined;\n const parts: string[] = [];\n for (const block of content) {\n const b = block as { type?: unknown; text?: unknown; name?: unknown; input?: unknown };\n if (b?.type === \"text\" && typeof b.text === \"string\" && b.text) {\n parts.push(b.text);\n } else if (b?.type === \"tool_use\") {\n const name = typeof b.name === \"string\" ? b.name : \"tool\";\n parts.push(b.input ? `[tool_use:${name}] ${safeJson(b.input)}` : `[tool_use:${name}]`);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * Extract the assistant's text from an OpenAI chat-completions response,\n * including a tool-call-only response.\n */\nexport function extractOpenAiOutputText(\n choices: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(choices) || choices.length === 0) return undefined;\n const parts: string[] = [];\n for (const choice of choices) {\n const message = (choice as { message?: Record<string, unknown> })?.message;\n if (!message) continue;\n if (typeof message.content === \"string\" && message.content) {\n parts.push(message.content);\n }\n const toolCalls = message.tool_calls;\n if (Array.isArray(toolCalls)) {\n for (const call of toolCalls) {\n const fn = (call as { function?: { name?: unknown; arguments?: unknown } })?.function;\n const name = typeof fn?.name === \"string\" ? fn.name : \"tool\";\n parts.push(\n fn?.arguments ? `[tool_call:${name}] ${String(fn.arguments)}` : `[tool_call:${name}]`,\n );\n }\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * `input_data` for LangChain/LangGraph callbacks, whose messages are class\n * instances with `_getType()` rather than plain `{role, content}` dicts.\n * Reuses the decomposer's duck-typing so the two never drift.\n */\nexport function captureLangChainMessages(\n messages: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n const safeMessages = messages\n .map((m) => ({ role: getRole(m) || undefined, content: contentToText(getContent(m)) }))\n .filter((m) => m.content.length > 0)\n .map((m) => ({ role: m.role, content: truncateText(m.content, maxBytes) }));\n return safeMessages.length > 0 ? { messages: safeMessages } : undefined;\n}\n\n/** `input_data` for the raw-prompt (non-chat) LangChain LLM callback. */\nexport function capturePrompts(\n prompts: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(prompts) || prompts.length === 0) return undefined;\n const messages = prompts\n .filter((p): p is string => typeof p === \"string\" && p.length > 0)\n .map((p) => ({ role: \"user\" as const, content: truncateText(p, maxBytes) }));\n return messages.length > 0 ? { messages } : undefined;\n}\n\n/**\n * `output_data` text from a LangChain `LLMResult` — `generations` is an\n * array-of-arrays (one inner array per prompt).\n */\nexport function extractLangChainOutputText(\n generations: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(generations)) return undefined;\n const parts: string[] = [];\n for (const group of generations) {\n if (!Array.isArray(group)) continue;\n for (const gen of group) {\n const text = (gen as { text?: unknown })?.text;\n if (typeof text === \"string\" && text) parts.push(text);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\nfunction safeJson(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/_internal/active-framework.ts","../../src/_internal/llm-io.ts"],"names":[],"mappings":"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","file":"chunk-KXVSMY6L.js","sourcesContent":["/**\n * MHQ-859 — active framework discovery, the TS half of AGE-240.\n *\n * Python has had this since AGE-240: each adapter marks itself active when\n * it intercepts a call, the trace stamps `morse_ai.framework` on its\n * resource, and the server uses it to disambiguate agents that share a\n * logical name but not an implementation. TypeScript had the *consumer*\n * side wired all along — `otel-provider.ts` already maps\n * `resource[\"morse_ai.framework\"]` to the `av.framework` root-span\n * attribute — but nothing ever set it, so every TS trace landed with\n * `framework` NULL and framework filtering silently excluded all TS traffic.\n *\n * Python uses a `threading.local`. The Node equivalent is per-trace state,\n * not per-thread: `AsyncLocalStorage` already scopes the active trace, and\n * concurrent traces in one process must not see each other's marker. So the\n * marker is written straight onto the active trace state and there is no\n * module-global to leak across interleaved async calls — which also removes\n * the need for Python's `clear_active_framework()` try/finally discipline.\n *\n * First framework wins per trace: when a customer mixes two adapters in one\n * trace, the first to fire defines the label. Absence is the signal — never\n * invent a default.\n */\n\nimport { getActiveTraceState } from \"./tracing\";\n\n/**\n * Mark `name` as the framework for the currently-active trace.\n *\n * No-op when no trace is active (an adapter can fire outside `run()`), and\n * no-op when a framework is already set. Never throws — telemetry must not\n * break customer code.\n */\nexport function setActiveFramework(name: string): void {\n if (typeof name !== \"string\" || name.length === 0) return;\n try {\n const state = getActiveTraceState();\n if (state !== null && !state.framework) {\n state.framework = name;\n }\n } catch {\n // swallow — never break the caller\n }\n}\n\n/** Framework recorded on the active trace, or `undefined`. */\nexport function getActiveFramework(): string | undefined {\n try {\n return getActiveTraceState()?.framework ?? undefined;\n } catch {\n return undefined;\n }\n}\n","/**\n * MHQ-858 — shared `input_data` / `output_data` capture for LLM spans.\n *\n * Python's adapters have captured prompt/response content on `llm` spans\n * since MHQ-772; no TypeScript adapter ever did, so the trace-detail\n * INPUT/OUTPUT panes were empty for every TS customer while being populated\n * for the Python customer running the identical workload.\n *\n * Mirrors `morse_ai/adapters/anthropic.py`'s `_safe_input_messages` /\n * `_extract_output_text`, including the 4096-byte cap, so the two SDKs\n * produce the same shape for the same call.\n */\n\nimport { contentToText, getContent, getRole } from \"../_agent-sdk-common/context-decomposer\";\n\n/** Bytes of text kept per field. Matches Python's `_CONTENT_BYTE_CAP`. */\nexport const CONTENT_BYTE_CAP = 4096;\n\n/**\n * Truncate on a UTF-8 *byte* budget, not a UTF-16 code-unit count — a\n * 4096-char string of emoji is 16KB on the wire. Never splits a code point.\n */\nexport function truncateText(text: string, maxBytes: number = CONTENT_BYTE_CAP): string {\n if (typeof text !== \"string\" || text.length === 0) return text;\n const encoder = new TextEncoder();\n const bytes = encoder.encode(text);\n if (bytes.length <= maxBytes) return text;\n // `fatal: false` replaces a trailing partial code point with U+FFFD\n // rather than throwing; drop it so the value stays clean.\n const sliced = new TextDecoder(\"utf-8\", { fatal: false }).decode(bytes.subarray(0, maxBytes));\n return sliced.replace(/�$/, \"\") + \"…\";\n}\n\nexport interface CapturedInput {\n messages: Array<{ role?: unknown; content?: unknown }>;\n system?: string;\n}\n\n/**\n * Build a truncated, JSON-safe `input_data` from a chat-completions-shaped\n * request. String content is truncated; block-form content (tool_use,\n * tool_result, image parts) passes through as-is — per-block truncation\n * would mean reconstructing each provider's content-block schema exactly,\n * which is not worth it for a display field.\n *\n * Returns `undefined` when there is nothing worth showing, so callers can\n * assign unconditionally without writing empty objects onto the wire.\n */\nexport function captureInputMessages(\n messages: unknown,\n system?: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n\n const safeMessages = messages\n .filter((m): m is Record<string, unknown> => typeof m === \"object\" && m !== null)\n .map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? truncateText(m.content, maxBytes) : m.content,\n }));\n if (safeMessages.length === 0) return undefined;\n\n const out: CapturedInput = { messages: safeMessages };\n const systemText = flattenSystem(system);\n if (systemText) out.system = truncateText(systemText, maxBytes);\n return out;\n}\n\n/**\n * Anthropic's `system` is either a string or an array of text blocks.\n * Returns `undefined` when neither yields text.\n */\nexport function flattenSystem(system: unknown): string | undefined {\n if (typeof system === \"string\") return system || undefined;\n if (!Array.isArray(system)) return undefined;\n const parts = system\n .map((block) =>\n typeof block === \"string\"\n ? block\n : typeof (block as { text?: unknown })?.text === \"string\"\n ? (block as { text: string }).text\n : \"\",\n )\n .filter(Boolean);\n return parts.length > 0 ? parts.join(\"\\n\") : undefined;\n}\n\n/**\n * Extract the assistant's text from an Anthropic `Message.content` array.\n * A response that only calls a tool still yields something meaningful\n * rather than nothing — same rule as Python's `_extract_output_text`.\n */\nexport function extractAnthropicOutputText(\n content: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(content) || content.length === 0) return undefined;\n const parts: string[] = [];\n for (const block of content) {\n const b = block as { type?: unknown; text?: unknown; name?: unknown; input?: unknown };\n if (b?.type === \"text\" && typeof b.text === \"string\" && b.text) {\n parts.push(b.text);\n } else if (b?.type === \"tool_use\") {\n const name = typeof b.name === \"string\" ? b.name : \"tool\";\n parts.push(b.input ? `[tool_use:${name}] ${safeJson(b.input)}` : `[tool_use:${name}]`);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * Extract the assistant's text from an OpenAI chat-completions response,\n * including a tool-call-only response.\n */\nexport function extractOpenAiOutputText(\n choices: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(choices) || choices.length === 0) return undefined;\n const parts: string[] = [];\n for (const choice of choices) {\n const message = (choice as { message?: Record<string, unknown> })?.message;\n if (!message) continue;\n if (typeof message.content === \"string\" && message.content) {\n parts.push(message.content);\n }\n const toolCalls = message.tool_calls;\n if (Array.isArray(toolCalls)) {\n for (const call of toolCalls) {\n const fn = (call as { function?: { name?: unknown; arguments?: unknown } })?.function;\n const name = typeof fn?.name === \"string\" ? fn.name : \"tool\";\n parts.push(\n fn?.arguments ? `[tool_call:${name}] ${String(fn.arguments)}` : `[tool_call:${name}]`,\n );\n }\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * `input_data` for LangChain/LangGraph callbacks, whose messages are class\n * instances with `_getType()` rather than plain `{role, content}` dicts.\n * Reuses the decomposer's duck-typing so the two never drift.\n */\nexport function captureLangChainMessages(\n messages: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n const safeMessages = messages\n .map((m) => ({ role: getRole(m) || undefined, content: contentToText(getContent(m)) }))\n .filter((m) => m.content.length > 0)\n .map((m) => ({ role: m.role, content: truncateText(m.content, maxBytes) }));\n return safeMessages.length > 0 ? { messages: safeMessages } : undefined;\n}\n\n/** `input_data` for the raw-prompt (non-chat) LangChain LLM callback. */\nexport function capturePrompts(\n prompts: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(prompts) || prompts.length === 0) return undefined;\n const messages = prompts\n .filter((p): p is string => typeof p === \"string\" && p.length > 0)\n .map((p) => ({ role: \"user\" as const, content: truncateText(p, maxBytes) }));\n return messages.length > 0 ? { messages } : undefined;\n}\n\n/**\n * `output_data` text from a LangChain `LLMResult` — `generations` is an\n * array-of-arrays (one inner array per prompt).\n */\nexport function extractLangChainOutputText(\n generations: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(generations)) return undefined;\n const parts: string[] = [];\n for (const group of generations) {\n if (!Array.isArray(group)) continue;\n for (const gen of group) {\n const text = (gen as { text?: unknown })?.text;\n if (typeof text === \"string\" && text) parts.push(text);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\nfunction safeJson(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { setActiveFramework, captureInputMessages, extractAnthropicOutputText } from './chunk-
|
|
2
|
-
import { absorbErrorsAsync, absorbErrorsSync } from './chunk-
|
|
1
|
+
import { setActiveFramework, captureInputMessages, extractAnthropicOutputText } from './chunk-KXVSMY6L.js';
|
|
2
|
+
import { absorbErrorsAsync, absorbErrorsSync } from './chunk-WIWUEI5Z.js';
|
|
3
3
|
import { calculateCost } from './chunk-4FALQMOZ.js';
|
|
4
|
-
import { init_spans, init_tracing, getActiveTraceState, runAsync, startSpan, nowIso, generateSpanId } from './chunk-
|
|
4
|
+
import { init_spans, init_tracing, getActiveTraceState, runAsync, startSpan, nowIso, generateSpanId } from './chunk-XD4VWCAC.js';
|
|
5
5
|
|
|
6
6
|
// src/anthropic/index.ts
|
|
7
7
|
init_spans();
|
|
@@ -598,5 +598,5 @@ function rotr(x, n) {
|
|
|
598
598
|
}
|
|
599
599
|
|
|
600
600
|
export { MAX_SEGMENT_CONTENT_BYTES, _resetAnthropicInstallStateForTesting, extractAnthropicSegments, instrumentAnthropic, isAnthropicWrapped, uninstallAnthropic, wrapAnthropic };
|
|
601
|
-
//# sourceMappingURL=chunk-
|
|
602
|
-
//# sourceMappingURL=chunk-
|
|
601
|
+
//# sourceMappingURL=chunk-PIWO5L5N.js.map
|
|
602
|
+
//# sourceMappingURL=chunk-PIWO5L5N.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/anthropic/index.ts"],"names":["opts"],"mappings":"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","file":"chunk-N4Q2WMOE.js","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":["opts"],"mappings":"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","file":"chunk-PIWO5L5N.js","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,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunkRBNCTHK3_cjs = require('./chunk-RBNCTHK3.cjs');
|
|
4
|
-
var
|
|
4
|
+
var chunk3H2OJLC2_cjs = require('./chunk-3H2OJLC2.cjs');
|
|
5
5
|
|
|
6
6
|
// src/_internal/active-framework.ts
|
|
7
|
-
|
|
7
|
+
chunk3H2OJLC2_cjs.init_tracing();
|
|
8
8
|
function setActiveFramework(name) {
|
|
9
9
|
if (typeof name !== "string" || name.length === 0) return;
|
|
10
10
|
try {
|
|
11
|
-
const state =
|
|
11
|
+
const state = chunk3H2OJLC2_cjs.getActiveTraceState();
|
|
12
12
|
if (state !== null && !state.framework) {
|
|
13
13
|
state.framework = name;
|
|
14
14
|
}
|
|
@@ -122,5 +122,5 @@ exports.extractAnthropicOutputText = extractAnthropicOutputText;
|
|
|
122
122
|
exports.extractLangChainOutputText = extractLangChainOutputText;
|
|
123
123
|
exports.extractOpenAiOutputText = extractOpenAiOutputText;
|
|
124
124
|
exports.setActiveFramework = setActiveFramework;
|
|
125
|
-
//# sourceMappingURL=chunk-
|
|
126
|
-
//# sourceMappingURL=chunk-
|
|
125
|
+
//# sourceMappingURL=chunk-VOZBYSWK.cjs.map
|
|
126
|
+
//# sourceMappingURL=chunk-VOZBYSWK.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/_internal/active-framework.ts","../../src/_internal/llm-io.ts"],"names":["init_tracing","getActiveTraceState","getRole","contentToText","getContent"],"mappings":"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","file":"chunk-KFWCOUL3.cjs","sourcesContent":["/**\n * MHQ-859 — active framework discovery, the TS half of AGE-240.\n *\n * Python has had this since AGE-240: each adapter marks itself active when\n * it intercepts a call, the trace stamps `morse_ai.framework` on its\n * resource, and the server uses it to disambiguate agents that share a\n * logical name but not an implementation. TypeScript had the *consumer*\n * side wired all along — `otel-provider.ts` already maps\n * `resource[\"morse_ai.framework\"]` to the `av.framework` root-span\n * attribute — but nothing ever set it, so every TS trace landed with\n * `framework` NULL and framework filtering silently excluded all TS traffic.\n *\n * Python uses a `threading.local`. The Node equivalent is per-trace state,\n * not per-thread: `AsyncLocalStorage` already scopes the active trace, and\n * concurrent traces in one process must not see each other's marker. So the\n * marker is written straight onto the active trace state and there is no\n * module-global to leak across interleaved async calls — which also removes\n * the need for Python's `clear_active_framework()` try/finally discipline.\n *\n * First framework wins per trace: when a customer mixes two adapters in one\n * trace, the first to fire defines the label. Absence is the signal — never\n * invent a default.\n */\n\nimport { getActiveTraceState } from \"./tracing\";\n\n/**\n * Mark `name` as the framework for the currently-active trace.\n *\n * No-op when no trace is active (an adapter can fire outside `run()`), and\n * no-op when a framework is already set. Never throws — telemetry must not\n * break customer code.\n */\nexport function setActiveFramework(name: string): void {\n if (typeof name !== \"string\" || name.length === 0) return;\n try {\n const state = getActiveTraceState();\n if (state !== null && !state.framework) {\n state.framework = name;\n }\n } catch {\n // swallow — never break the caller\n }\n}\n\n/** Framework recorded on the active trace, or `undefined`. */\nexport function getActiveFramework(): string | undefined {\n try {\n return getActiveTraceState()?.framework ?? undefined;\n } catch {\n return undefined;\n }\n}\n","/**\n * MHQ-858 — shared `input_data` / `output_data` capture for LLM spans.\n *\n * Python's adapters have captured prompt/response content on `llm` spans\n * since MHQ-772; no TypeScript adapter ever did, so the trace-detail\n * INPUT/OUTPUT panes were empty for every TS customer while being populated\n * for the Python customer running the identical workload.\n *\n * Mirrors `morse_ai/adapters/anthropic.py`'s `_safe_input_messages` /\n * `_extract_output_text`, including the 4096-byte cap, so the two SDKs\n * produce the same shape for the same call.\n */\n\nimport { contentToText, getContent, getRole } from \"../_agent-sdk-common/context-decomposer\";\n\n/** Bytes of text kept per field. Matches Python's `_CONTENT_BYTE_CAP`. */\nexport const CONTENT_BYTE_CAP = 4096;\n\n/**\n * Truncate on a UTF-8 *byte* budget, not a UTF-16 code-unit count — a\n * 4096-char string of emoji is 16KB on the wire. Never splits a code point.\n */\nexport function truncateText(text: string, maxBytes: number = CONTENT_BYTE_CAP): string {\n if (typeof text !== \"string\" || text.length === 0) return text;\n const encoder = new TextEncoder();\n const bytes = encoder.encode(text);\n if (bytes.length <= maxBytes) return text;\n // `fatal: false` replaces a trailing partial code point with U+FFFD\n // rather than throwing; drop it so the value stays clean.\n const sliced = new TextDecoder(\"utf-8\", { fatal: false }).decode(bytes.subarray(0, maxBytes));\n return sliced.replace(/�$/, \"\") + \"…\";\n}\n\nexport interface CapturedInput {\n messages: Array<{ role?: unknown; content?: unknown }>;\n system?: string;\n}\n\n/**\n * Build a truncated, JSON-safe `input_data` from a chat-completions-shaped\n * request. String content is truncated; block-form content (tool_use,\n * tool_result, image parts) passes through as-is — per-block truncation\n * would mean reconstructing each provider's content-block schema exactly,\n * which is not worth it for a display field.\n *\n * Returns `undefined` when there is nothing worth showing, so callers can\n * assign unconditionally without writing empty objects onto the wire.\n */\nexport function captureInputMessages(\n messages: unknown,\n system?: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n\n const safeMessages = messages\n .filter((m): m is Record<string, unknown> => typeof m === \"object\" && m !== null)\n .map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? truncateText(m.content, maxBytes) : m.content,\n }));\n if (safeMessages.length === 0) return undefined;\n\n const out: CapturedInput = { messages: safeMessages };\n const systemText = flattenSystem(system);\n if (systemText) out.system = truncateText(systemText, maxBytes);\n return out;\n}\n\n/**\n * Anthropic's `system` is either a string or an array of text blocks.\n * Returns `undefined` when neither yields text.\n */\nexport function flattenSystem(system: unknown): string | undefined {\n if (typeof system === \"string\") return system || undefined;\n if (!Array.isArray(system)) return undefined;\n const parts = system\n .map((block) =>\n typeof block === \"string\"\n ? block\n : typeof (block as { text?: unknown })?.text === \"string\"\n ? (block as { text: string }).text\n : \"\",\n )\n .filter(Boolean);\n return parts.length > 0 ? parts.join(\"\\n\") : undefined;\n}\n\n/**\n * Extract the assistant's text from an Anthropic `Message.content` array.\n * A response that only calls a tool still yields something meaningful\n * rather than nothing — same rule as Python's `_extract_output_text`.\n */\nexport function extractAnthropicOutputText(\n content: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(content) || content.length === 0) return undefined;\n const parts: string[] = [];\n for (const block of content) {\n const b = block as { type?: unknown; text?: unknown; name?: unknown; input?: unknown };\n if (b?.type === \"text\" && typeof b.text === \"string\" && b.text) {\n parts.push(b.text);\n } else if (b?.type === \"tool_use\") {\n const name = typeof b.name === \"string\" ? b.name : \"tool\";\n parts.push(b.input ? `[tool_use:${name}] ${safeJson(b.input)}` : `[tool_use:${name}]`);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * Extract the assistant's text from an OpenAI chat-completions response,\n * including a tool-call-only response.\n */\nexport function extractOpenAiOutputText(\n choices: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(choices) || choices.length === 0) return undefined;\n const parts: string[] = [];\n for (const choice of choices) {\n const message = (choice as { message?: Record<string, unknown> })?.message;\n if (!message) continue;\n if (typeof message.content === \"string\" && message.content) {\n parts.push(message.content);\n }\n const toolCalls = message.tool_calls;\n if (Array.isArray(toolCalls)) {\n for (const call of toolCalls) {\n const fn = (call as { function?: { name?: unknown; arguments?: unknown } })?.function;\n const name = typeof fn?.name === \"string\" ? fn.name : \"tool\";\n parts.push(\n fn?.arguments ? `[tool_call:${name}] ${String(fn.arguments)}` : `[tool_call:${name}]`,\n );\n }\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * `input_data` for LangChain/LangGraph callbacks, whose messages are class\n * instances with `_getType()` rather than plain `{role, content}` dicts.\n * Reuses the decomposer's duck-typing so the two never drift.\n */\nexport function captureLangChainMessages(\n messages: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n const safeMessages = messages\n .map((m) => ({ role: getRole(m) || undefined, content: contentToText(getContent(m)) }))\n .filter((m) => m.content.length > 0)\n .map((m) => ({ role: m.role, content: truncateText(m.content, maxBytes) }));\n return safeMessages.length > 0 ? { messages: safeMessages } : undefined;\n}\n\n/** `input_data` for the raw-prompt (non-chat) LangChain LLM callback. */\nexport function capturePrompts(\n prompts: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(prompts) || prompts.length === 0) return undefined;\n const messages = prompts\n .filter((p): p is string => typeof p === \"string\" && p.length > 0)\n .map((p) => ({ role: \"user\" as const, content: truncateText(p, maxBytes) }));\n return messages.length > 0 ? { messages } : undefined;\n}\n\n/**\n * `output_data` text from a LangChain `LLMResult` — `generations` is an\n * array-of-arrays (one inner array per prompt).\n */\nexport function extractLangChainOutputText(\n generations: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(generations)) return undefined;\n const parts: string[] = [];\n for (const group of generations) {\n if (!Array.isArray(group)) continue;\n for (const gen of group) {\n const text = (gen as { text?: unknown })?.text;\n if (typeof text === \"string\" && text) parts.push(text);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\nfunction safeJson(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/_internal/active-framework.ts","../../src/_internal/llm-io.ts"],"names":["init_tracing","getActiveTraceState","getRole","contentToText","getContent"],"mappings":"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","file":"chunk-VOZBYSWK.cjs","sourcesContent":["/**\n * MHQ-859 — active framework discovery, the TS half of AGE-240.\n *\n * Python has had this since AGE-240: each adapter marks itself active when\n * it intercepts a call, the trace stamps `morse_ai.framework` on its\n * resource, and the server uses it to disambiguate agents that share a\n * logical name but not an implementation. TypeScript had the *consumer*\n * side wired all along — `otel-provider.ts` already maps\n * `resource[\"morse_ai.framework\"]` to the `av.framework` root-span\n * attribute — but nothing ever set it, so every TS trace landed with\n * `framework` NULL and framework filtering silently excluded all TS traffic.\n *\n * Python uses a `threading.local`. The Node equivalent is per-trace state,\n * not per-thread: `AsyncLocalStorage` already scopes the active trace, and\n * concurrent traces in one process must not see each other's marker. So the\n * marker is written straight onto the active trace state and there is no\n * module-global to leak across interleaved async calls — which also removes\n * the need for Python's `clear_active_framework()` try/finally discipline.\n *\n * First framework wins per trace: when a customer mixes two adapters in one\n * trace, the first to fire defines the label. Absence is the signal — never\n * invent a default.\n */\n\nimport { getActiveTraceState } from \"./tracing\";\n\n/**\n * Mark `name` as the framework for the currently-active trace.\n *\n * No-op when no trace is active (an adapter can fire outside `run()`), and\n * no-op when a framework is already set. Never throws — telemetry must not\n * break customer code.\n */\nexport function setActiveFramework(name: string): void {\n if (typeof name !== \"string\" || name.length === 0) return;\n try {\n const state = getActiveTraceState();\n if (state !== null && !state.framework) {\n state.framework = name;\n }\n } catch {\n // swallow — never break the caller\n }\n}\n\n/** Framework recorded on the active trace, or `undefined`. */\nexport function getActiveFramework(): string | undefined {\n try {\n return getActiveTraceState()?.framework ?? undefined;\n } catch {\n return undefined;\n }\n}\n","/**\n * MHQ-858 — shared `input_data` / `output_data` capture for LLM spans.\n *\n * Python's adapters have captured prompt/response content on `llm` spans\n * since MHQ-772; no TypeScript adapter ever did, so the trace-detail\n * INPUT/OUTPUT panes were empty for every TS customer while being populated\n * for the Python customer running the identical workload.\n *\n * Mirrors `morse_ai/adapters/anthropic.py`'s `_safe_input_messages` /\n * `_extract_output_text`, including the 4096-byte cap, so the two SDKs\n * produce the same shape for the same call.\n */\n\nimport { contentToText, getContent, getRole } from \"../_agent-sdk-common/context-decomposer\";\n\n/** Bytes of text kept per field. Matches Python's `_CONTENT_BYTE_CAP`. */\nexport const CONTENT_BYTE_CAP = 4096;\n\n/**\n * Truncate on a UTF-8 *byte* budget, not a UTF-16 code-unit count — a\n * 4096-char string of emoji is 16KB on the wire. Never splits a code point.\n */\nexport function truncateText(text: string, maxBytes: number = CONTENT_BYTE_CAP): string {\n if (typeof text !== \"string\" || text.length === 0) return text;\n const encoder = new TextEncoder();\n const bytes = encoder.encode(text);\n if (bytes.length <= maxBytes) return text;\n // `fatal: false` replaces a trailing partial code point with U+FFFD\n // rather than throwing; drop it so the value stays clean.\n const sliced = new TextDecoder(\"utf-8\", { fatal: false }).decode(bytes.subarray(0, maxBytes));\n return sliced.replace(/�$/, \"\") + \"…\";\n}\n\nexport interface CapturedInput {\n messages: Array<{ role?: unknown; content?: unknown }>;\n system?: string;\n}\n\n/**\n * Build a truncated, JSON-safe `input_data` from a chat-completions-shaped\n * request. String content is truncated; block-form content (tool_use,\n * tool_result, image parts) passes through as-is — per-block truncation\n * would mean reconstructing each provider's content-block schema exactly,\n * which is not worth it for a display field.\n *\n * Returns `undefined` when there is nothing worth showing, so callers can\n * assign unconditionally without writing empty objects onto the wire.\n */\nexport function captureInputMessages(\n messages: unknown,\n system?: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n\n const safeMessages = messages\n .filter((m): m is Record<string, unknown> => typeof m === \"object\" && m !== null)\n .map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? truncateText(m.content, maxBytes) : m.content,\n }));\n if (safeMessages.length === 0) return undefined;\n\n const out: CapturedInput = { messages: safeMessages };\n const systemText = flattenSystem(system);\n if (systemText) out.system = truncateText(systemText, maxBytes);\n return out;\n}\n\n/**\n * Anthropic's `system` is either a string or an array of text blocks.\n * Returns `undefined` when neither yields text.\n */\nexport function flattenSystem(system: unknown): string | undefined {\n if (typeof system === \"string\") return system || undefined;\n if (!Array.isArray(system)) return undefined;\n const parts = system\n .map((block) =>\n typeof block === \"string\"\n ? block\n : typeof (block as { text?: unknown })?.text === \"string\"\n ? (block as { text: string }).text\n : \"\",\n )\n .filter(Boolean);\n return parts.length > 0 ? parts.join(\"\\n\") : undefined;\n}\n\n/**\n * Extract the assistant's text from an Anthropic `Message.content` array.\n * A response that only calls a tool still yields something meaningful\n * rather than nothing — same rule as Python's `_extract_output_text`.\n */\nexport function extractAnthropicOutputText(\n content: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(content) || content.length === 0) return undefined;\n const parts: string[] = [];\n for (const block of content) {\n const b = block as { type?: unknown; text?: unknown; name?: unknown; input?: unknown };\n if (b?.type === \"text\" && typeof b.text === \"string\" && b.text) {\n parts.push(b.text);\n } else if (b?.type === \"tool_use\") {\n const name = typeof b.name === \"string\" ? b.name : \"tool\";\n parts.push(b.input ? `[tool_use:${name}] ${safeJson(b.input)}` : `[tool_use:${name}]`);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * Extract the assistant's text from an OpenAI chat-completions response,\n * including a tool-call-only response.\n */\nexport function extractOpenAiOutputText(\n choices: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(choices) || choices.length === 0) return undefined;\n const parts: string[] = [];\n for (const choice of choices) {\n const message = (choice as { message?: Record<string, unknown> })?.message;\n if (!message) continue;\n if (typeof message.content === \"string\" && message.content) {\n parts.push(message.content);\n }\n const toolCalls = message.tool_calls;\n if (Array.isArray(toolCalls)) {\n for (const call of toolCalls) {\n const fn = (call as { function?: { name?: unknown; arguments?: unknown } })?.function;\n const name = typeof fn?.name === \"string\" ? fn.name : \"tool\";\n parts.push(\n fn?.arguments ? `[tool_call:${name}] ${String(fn.arguments)}` : `[tool_call:${name}]`,\n );\n }\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * `input_data` for LangChain/LangGraph callbacks, whose messages are class\n * instances with `_getType()` rather than plain `{role, content}` dicts.\n * Reuses the decomposer's duck-typing so the two never drift.\n */\nexport function captureLangChainMessages(\n messages: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n const safeMessages = messages\n .map((m) => ({ role: getRole(m) || undefined, content: contentToText(getContent(m)) }))\n .filter((m) => m.content.length > 0)\n .map((m) => ({ role: m.role, content: truncateText(m.content, maxBytes) }));\n return safeMessages.length > 0 ? { messages: safeMessages } : undefined;\n}\n\n/** `input_data` for the raw-prompt (non-chat) LangChain LLM callback. */\nexport function capturePrompts(\n prompts: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(prompts) || prompts.length === 0) return undefined;\n const messages = prompts\n .filter((p): p is string => typeof p === \"string\" && p.length > 0)\n .map((p) => ({ role: \"user\" as const, content: truncateText(p, maxBytes) }));\n return messages.length > 0 ? { messages } : undefined;\n}\n\n/**\n * `output_data` text from a LangChain `LLMResult` — `generations` is an\n * array-of-arrays (one inner array per prompt).\n */\nexport function extractLangChainOutputText(\n generations: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(generations)) return undefined;\n const parts: string[] = [];\n for (const group of generations) {\n if (!Array.isArray(group)) continue;\n for (const gen of group) {\n const text = (gen as { text?: unknown })?.text;\n if (typeof text === \"string\" && text) parts.push(text);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\nfunction safeJson(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { absorbErrorsSync } from './chunk-
|
|
2
|
-
import { init_tracing, startSpan } from './chunk-
|
|
1
|
+
import { absorbErrorsSync } from './chunk-WIWUEI5Z.js';
|
|
2
|
+
import { init_tracing, startSpan } from './chunk-XD4VWCAC.js';
|
|
3
3
|
|
|
4
4
|
// src/_agent-sdk-common/span-emitter.ts
|
|
5
5
|
init_tracing();
|
|
@@ -169,5 +169,5 @@ var emitHookSpan = absorbErrorsSync(
|
|
|
169
169
|
);
|
|
170
170
|
|
|
171
171
|
export { emitAgentSpan, emitHookSpan, emitLlmSpan, emitSubagentSpan, emitToolSpan };
|
|
172
|
-
//# sourceMappingURL=chunk-
|
|
173
|
-
//# sourceMappingURL=chunk-
|
|
172
|
+
//# sourceMappingURL=chunk-VZA2EPY3.js.map
|
|
173
|
+
//# sourceMappingURL=chunk-VZA2EPY3.js.map
|