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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/anthropic/index.cjs +12 -10
  2. package/dist/anthropic/index.js +5 -3
  3. package/dist/anthropic-agent-sdk/index.cjs +52 -34
  4. package/dist/anthropic-agent-sdk/index.cjs.map +1 -1
  5. package/dist/anthropic-agent-sdk/index.js +25 -7
  6. package/dist/anthropic-agent-sdk/index.js.map +1 -1
  7. package/dist/browser/anthropic/index.cjs +12 -10
  8. package/dist/browser/anthropic/index.js +5 -3
  9. package/dist/browser/anthropic-agent-sdk/index.cjs +52 -34
  10. package/dist/browser/anthropic-agent-sdk/index.cjs.map +1 -1
  11. package/dist/browser/anthropic-agent-sdk/index.js +25 -7
  12. package/dist/browser/anthropic-agent-sdk/index.js.map +1 -1
  13. package/dist/browser/chunk-32U547L3.js +118 -0
  14. package/dist/browser/chunk-32U547L3.js.map +1 -0
  15. package/dist/{chunk-SBGY5NS4.js → browser/chunk-454FDWBM.js} +6 -4
  16. package/dist/browser/chunk-454FDWBM.js.map +1 -0
  17. package/dist/browser/{chunk-EFUQVASI.cjs → chunk-5EFKNOO7.cjs} +17 -15
  18. package/dist/browser/chunk-5EFKNOO7.cjs.map +1 -0
  19. package/dist/browser/{chunk-DOLWR7LD.js → chunk-5IWGFPKQ.js} +4 -4
  20. package/dist/browser/{chunk-DOLWR7LD.js.map → chunk-5IWGFPKQ.js.map} +1 -1
  21. package/dist/browser/{chunk-F3B4UR64.js → chunk-6DOP3MTY.js} +386 -53
  22. package/dist/browser/chunk-6DOP3MTY.js.map +1 -0
  23. package/dist/browser/{chunk-GWJYOQNC.js → chunk-A7P3ZBZX.js} +10 -4
  24. package/dist/browser/chunk-A7P3ZBZX.js.map +1 -0
  25. package/dist/browser/{chunk-M2GZJ3RS.cjs → chunk-AV35EOER.cjs} +20 -14
  26. package/dist/browser/chunk-AV35EOER.cjs.map +1 -0
  27. package/dist/browser/{chunk-AYNX24P5.js → chunk-AZ3SVK3K.js} +3 -3
  28. package/dist/browser/{chunk-AYNX24P5.js.map → chunk-AZ3SVK3K.js.map} +1 -1
  29. package/dist/browser/chunk-FNZWJU64.cjs +31 -0
  30. package/dist/browser/chunk-FNZWJU64.cjs.map +1 -0
  31. package/dist/browser/chunk-HZZK2EMO.cjs +126 -0
  32. package/dist/browser/chunk-HZZK2EMO.cjs.map +1 -0
  33. package/dist/browser/{chunk-QWRQJO57.js → chunk-MLDVXMQD.js} +3 -3
  34. package/dist/browser/{chunk-QWRQJO57.js.map → chunk-MLDVXMQD.js.map} +1 -1
  35. package/dist/{chunk-Y7SVGUKY.cjs → browser/chunk-NT37C2TK.cjs} +7 -7
  36. package/dist/browser/{chunk-YNUZGKUA.cjs.map → chunk-NT37C2TK.cjs.map} +1 -1
  37. package/dist/browser/{chunk-3643DC7K.cjs → chunk-RBNCTHK3.cjs} +5 -2
  38. package/dist/browser/{chunk-3643DC7K.cjs.map → chunk-RBNCTHK3.cjs.map} +1 -1
  39. package/dist/browser/chunk-VFNNU3AX.js +28 -0
  40. package/dist/browser/chunk-VFNNU3AX.js.map +1 -0
  41. package/dist/browser/{chunk-HGN7J3EU.cjs → chunk-WY2VLKRR.cjs} +12 -12
  42. package/dist/browser/{chunk-HGN7J3EU.cjs.map → chunk-WY2VLKRR.cjs.map} +1 -1
  43. package/dist/browser/{chunk-DXWHT3HK.cjs → chunk-ZGYZZCUK.cjs} +391 -55
  44. package/dist/browser/chunk-ZGYZZCUK.cjs.map +1 -0
  45. package/dist/browser/index.cjs +112 -82
  46. package/dist/browser/index.cjs.map +1 -1
  47. package/dist/browser/index.js +40 -10
  48. package/dist/browser/index.js.map +1 -1
  49. package/dist/browser/integrations/pino.cjs +4 -4
  50. package/dist/browser/integrations/pino.js +3 -3
  51. package/dist/browser/langchain/index.cjs +19 -19
  52. package/dist/browser/langchain/index.js +3 -3
  53. package/dist/browser/langgraph/index.cjs +34 -26
  54. package/dist/browser/langgraph/index.cjs.map +1 -1
  55. package/dist/browser/langgraph/index.js +16 -8
  56. package/dist/browser/langgraph/index.js.map +1 -1
  57. package/dist/browser/openai/index.cjs +22 -8
  58. package/dist/browser/openai/index.cjs.map +1 -1
  59. package/dist/browser/openai/index.js +17 -3
  60. package/dist/browser/openai/index.js.map +1 -1
  61. package/dist/browser/openai-agents/index.cjs +42 -34
  62. package/dist/browser/openai-agents/index.cjs.map +1 -1
  63. package/dist/browser/openai-agents/index.js +13 -5
  64. package/dist/browser/openai-agents/index.js.map +1 -1
  65. package/dist/browser/vercel-ai/index.cjs +16 -16
  66. package/dist/browser/vercel-ai/index.js +4 -4
  67. package/dist/{chunk-4R4SHGOK.js → chunk-4JPZV2VZ.js} +3 -3
  68. package/dist/{chunk-4R4SHGOK.js.map → chunk-4JPZV2VZ.js.map} +1 -1
  69. package/dist/{chunk-HNCWTENX.cjs → chunk-5B3IUESN.cjs} +415 -70
  70. package/dist/chunk-5B3IUESN.cjs.map +1 -0
  71. package/dist/chunk-5RXSICEJ.js +118 -0
  72. package/dist/chunk-5RXSICEJ.js.map +1 -0
  73. package/dist/chunk-7A2EWXZK.cjs +31 -0
  74. package/dist/chunk-7A2EWXZK.cjs.map +1 -0
  75. package/dist/{chunk-STK4KJQ6.js → chunk-AAR4FYFO.js} +10 -4
  76. package/dist/chunk-AAR4FYFO.js.map +1 -0
  77. package/dist/{chunk-LQI63FHF.cjs → chunk-ADRVMGAW.cjs} +20 -14
  78. package/dist/chunk-ADRVMGAW.cjs.map +1 -0
  79. package/dist/{chunk-V5J6J4ZR.js → chunk-CECVNM7R.js} +4 -4
  80. package/dist/{chunk-V5J6J4ZR.js.map → chunk-CECVNM7R.js.map} +1 -1
  81. package/dist/{chunk-KJEO52QS.cjs → chunk-HICEJ4LV.cjs} +5 -2
  82. package/dist/{chunk-KJEO52QS.cjs.map → chunk-HICEJ4LV.cjs.map} +1 -1
  83. package/dist/{chunk-QXRJUPDP.cjs → chunk-HSY7V4RG.cjs} +12 -12
  84. package/dist/{chunk-QXRJUPDP.cjs.map → chunk-HSY7V4RG.cjs.map} +1 -1
  85. package/dist/chunk-LB6ZLJUR.js +28 -0
  86. package/dist/chunk-LB6ZLJUR.js.map +1 -0
  87. package/dist/{browser/chunk-F7BGQ26H.js → chunk-O3Q5L2HY.js} +6 -4
  88. package/dist/chunk-O3Q5L2HY.js.map +1 -0
  89. package/dist/{chunk-5D6SBSEI.cjs → chunk-RF7NI5VN.cjs} +17 -15
  90. package/dist/chunk-RF7NI5VN.cjs.map +1 -0
  91. package/dist/{chunk-AEFUXEKV.js → chunk-TP3N3S2D.js} +3 -3
  92. package/dist/{chunk-AEFUXEKV.js.map → chunk-TP3N3S2D.js.map} +1 -1
  93. package/dist/{chunk-LTKGLXAE.js → chunk-UEKQIRRA.js} +410 -68
  94. package/dist/chunk-UEKQIRRA.js.map +1 -0
  95. package/dist/{browser/chunk-YNUZGKUA.cjs → chunk-UWQPOWJQ.cjs} +7 -7
  96. package/dist/{chunk-Y7SVGUKY.cjs.map → chunk-UWQPOWJQ.cjs.map} +1 -1
  97. package/dist/chunk-VD3KRXSP.cjs +126 -0
  98. package/dist/chunk-VD3KRXSP.cjs.map +1 -0
  99. package/dist/index.cjs +119 -89
  100. package/dist/index.cjs.map +1 -1
  101. package/dist/index.d.cts +2 -2
  102. package/dist/index.d.ts +2 -2
  103. package/dist/index.js +41 -11
  104. package/dist/index.js.map +1 -1
  105. package/dist/integrations/pino.cjs +4 -4
  106. package/dist/integrations/pino.js +3 -3
  107. package/dist/langchain/index.cjs +19 -19
  108. package/dist/langchain/index.d.cts +1 -1
  109. package/dist/langchain/index.d.ts +1 -1
  110. package/dist/langchain/index.js +3 -3
  111. package/dist/langgraph/index.cjs +34 -26
  112. package/dist/langgraph/index.cjs.map +1 -1
  113. package/dist/langgraph/index.d.cts +1 -1
  114. package/dist/langgraph/index.d.ts +1 -1
  115. package/dist/langgraph/index.js +16 -8
  116. package/dist/langgraph/index.js.map +1 -1
  117. package/dist/openai/index.cjs +22 -8
  118. package/dist/openai/index.cjs.map +1 -1
  119. package/dist/openai/index.js +17 -3
  120. package/dist/openai/index.js.map +1 -1
  121. package/dist/openai-agents/index.cjs +42 -34
  122. package/dist/openai-agents/index.cjs.map +1 -1
  123. package/dist/openai-agents/index.js +13 -5
  124. package/dist/openai-agents/index.js.map +1 -1
  125. package/dist/{tracing-BYAqjT5Q.d.cts → tracing-CNlre8TK.d.cts} +1 -0
  126. package/dist/{tracing-rz9cWQ8d.d.ts → tracing-J8ZgxVzU.d.ts} +1 -0
  127. package/dist/vercel-ai/index.cjs +16 -16
  128. package/dist/vercel-ai/index.js +4 -4
  129. package/package.json +1 -9
  130. package/dist/browser/chunk-3BGG7GH3.cjs +0 -183
  131. package/dist/browser/chunk-3BGG7GH3.cjs.map +0 -1
  132. package/dist/browser/chunk-DXWHT3HK.cjs.map +0 -1
  133. package/dist/browser/chunk-EFUQVASI.cjs.map +0 -1
  134. package/dist/browser/chunk-F3B4UR64.js.map +0 -1
  135. package/dist/browser/chunk-F7BGQ26H.js.map +0 -1
  136. package/dist/browser/chunk-GWJYOQNC.js.map +0 -1
  137. package/dist/browser/chunk-M2GZJ3RS.cjs.map +0 -1
  138. package/dist/browser/chunk-YHV5GL32.js +0 -178
  139. package/dist/browser/chunk-YHV5GL32.js.map +0 -1
  140. package/dist/chunk-5D6SBSEI.cjs.map +0 -1
  141. package/dist/chunk-HNCWTENX.cjs.map +0 -1
  142. package/dist/chunk-LQI63FHF.cjs.map +0 -1
  143. package/dist/chunk-LTKGLXAE.js.map +0 -1
  144. package/dist/chunk-POCQNSVD.js +0 -178
  145. package/dist/chunk-POCQNSVD.js.map +0 -1
  146. package/dist/chunk-SBGY5NS4.js.map +0 -1
  147. package/dist/chunk-STK4KJQ6.js.map +0 -1
  148. package/dist/chunk-T2KW3P23.cjs +0 -183
  149. package/dist/chunk-T2KW3P23.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/_agent-sdk-common/context-decomposer.ts"],"names":["text"],"mappings":"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","file":"chunk-4R4SHGOK.js","sourcesContent":["/**\n * `_agent-sdk-common/context-decomposer.ts` — shared OpenAI-chat-format\n * context segment decomposer (MHQ-750).\n *\n * TS port of `apps/sdk/python/src/morse_ai/context/decomposer.py`'s\n * `decompose_openai_messages`. Pure functions — no I/O, no dependency on\n * `_internal/tracing.ts` or any adapter. Classifies an OpenAI chat\n * completions-shaped `messages` array (+ optional `tools` array) into\n * `ContextSegment`s so the Context & Memory dashboard can show context\n * composition without any extra customer config.\n *\n * The Anthropic adapter (`src/anthropic/index.ts`) has its own\n * `extractAnthropicSegments` because Anthropic's message format has extra\n * structure (block lists, tool_result blocks, cache_control markers). For\n * OpenAI-chat-format messages — which covers plain OpenAI chat completions,\n * LangChain, and LangGraph after message flattening — this module is the\n * canonical decomposer, mirroring the Python side's module boundary\n * (`morse_ai.context.decomposer` is called from both `adapters/openai.py`\n * and `adapters/langgraph.py`).\n *\n * Source tag mapping (mirrors the backend `SegmentSource` enum and the\n * Python decomposer's docstring):\n *\n * role=system → system_prompt\n * tools=[...] (the definitions array) → tool_descriptions\n * role=tool (OpenAI tool result) → tool_observation\n * role=user / role=assistant (prior turns) → chat_history\n * role=user (last user turn, not a tool result) → current_input\n *\n * Position is 0-indexed in emission order:\n * tool_descriptions → system_prompt → chat_history/tool_observation → current_input\n *\n * Message duck-typing: accepts plain `{role, content}` dicts (OpenAI wire\n * format) AND LangChain-style message objects — either a `_getType()`\n * method (LangChain JS `BaseMessage`) or a `.type` string property. This\n * lets `decomposeOpenAiMessages` be called directly with LangGraph JS's\n * flattened `BaseMessage[]` without a translation layer, mirroring how the\n * Python decomposer duck-types LangChain's `.type` attribute.\n *\n * Never throws — malformed input returns `[]`, matching the Python\n * decomposer's `except Exception: return []` guarantee.\n */\n\nimport type { ContextSegment } from \"../_internal/spans\";\n\n/* ------------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Per-segment content cap (bytes). Matches the Python decomposer's\n * `_CONTENT_BYTE_CAP` and the Anthropic TS adapter's\n * `MAX_SEGMENT_CONTENT_BYTES` so the server-side payload guard (AI-SEC-08,\n * 256 KB on `ContextSegmentIn.content`) is approached at the same rate\n * across every adapter/language.\n */\nexport const CONTEXT_SEGMENT_CONTENT_BYTE_CAP = 4096;\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Structural shape of an OpenAI chat-completions-format message. Also\n * accepts LangChain-style message objects via `_getType()`/`.type`\n * duck-typing — see file header.\n */\nexport interface OpenAiMessageLike {\n role?: string;\n content?: unknown;\n tool_call_id?: string;\n _getType?: () => unknown;\n type?: unknown;\n [key: string]: unknown;\n}\n\n/** Structural shape of an OpenAI `tools` definition entry. */\nexport interface OpenAiToolLike {\n type?: string;\n function?: { name?: string; [key: string]: unknown };\n name?: string;\n [key: string]: unknown;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Decompose an OpenAI chat-completions-shaped request into context\n * segments.\n *\n * @param messages - The `messages` array. Each element should be a\n * `{role, content}` object, or a LangChain-style message object (see\n * file header). Non-array input is tolerated (treated as absent).\n * @param tools - The `tools` array (list of tool definition objects).\n * Non-array input is tolerated (treated as absent).\n * @returns `ContextSegment[]` ready for `SpanData.context_segments`.\n * Returns `[]` (never throws) on malformed input.\n */\nexport function decomposeOpenAiMessages(messages?: unknown, tools?: unknown): ContextSegment[] {\n const messagesArr = Array.isArray(messages) ? (messages as OpenAiMessageLike[]) : undefined;\n const toolsArr = Array.isArray(tools) ? (tools as OpenAiToolLike[]) : undefined;\n\n if ((!messagesArr || messagesArr.length === 0) && (!toolsArr || toolsArr.length === 0)) {\n return [];\n }\n\n try {\n const segments: ContextSegment[] = [];\n let position = 0;\n\n // 1. tool_descriptions — one segment for the entire tools array.\n if (toolsArr && toolsArr.length > 0) {\n const toolNames: string[] = [];\n for (const t of toolsArr) {\n if (t && typeof t === \"object\") {\n const name = t.function?.name ?? t.name;\n if (typeof name === \"string\" && name.length > 0) toolNames.push(name);\n }\n }\n const toolsJson = canonicalJsonStringify(toolsArr);\n segments.push(\n makeSegment(position, \"tool_descriptions\", toolsJson, {\n tool_count: toolsArr.length,\n tool_names: toolNames,\n }),\n );\n position += 1;\n }\n\n if (!messagesArr) return segments;\n\n // 2. system_prompt — every system message, joined.\n const systemParts: string[] = [];\n for (const msg of messagesArr) {\n if (getRole(msg) === \"system\") {\n const text = contentToText(getContent(msg));\n if (text) systemParts.push(text);\n }\n }\n if (systemParts.length > 0) {\n segments.push(makeSegment(position, \"system_prompt\", systemParts.join(\"\\n\")));\n position += 1;\n }\n\n // 3. Walk non-system messages. Find the last user message that is NOT\n // purely a tool_result (role=tool).\n const nonSystem = messagesArr.filter((m) => getRole(m) !== \"system\");\n\n let lastUserInputIdx = -1;\n for (let i = nonSystem.length - 1; i >= 0; i--) {\n if (getRole(nonSystem[i]) === \"user\") {\n lastUserInputIdx = i;\n break;\n }\n }\n\n for (let i = 0; i < nonSystem.length; i++) {\n const msg = nonSystem[i];\n const role = getRole(msg);\n const content = getContent(msg);\n\n // OpenAI tool role → tool_observation segment.\n if (role === \"tool\") {\n const text = contentToText(content);\n if (text) {\n const toolCallId = getAttr(msg, \"tool_call_id\");\n const prefix =\n typeof toolCallId === \"string\" && toolCallId.length > 0\n ? `[tool_result id=${toolCallId}]\\n`\n : \"\";\n segments.push(makeSegment(position, \"tool_observation\", prefix + text, { role }));\n position += 1;\n }\n continue;\n }\n\n // Skip system (already handled).\n if (role === \"system\") continue;\n\n const text = contentToText(content);\n if (!text) continue;\n\n const source = role === \"user\" && i === lastUserInputIdx ? \"current_input\" : \"chat_history\";\n segments.push(makeSegment(position, source, text, role ? { role } : undefined));\n position += 1;\n }\n\n return segments;\n } catch {\n return [];\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Message duck-typing helpers */\n/* ------------------------------------------------------------------------ */\n\nconst LC_TYPE_TO_ROLE: Record<string, string> = {\n human: \"user\",\n ai: \"assistant\",\n system: \"system\",\n tool: \"tool\",\n function: \"tool\",\n chat: \"user\",\n};\n\nfunction lcTypeToRole(lcType: string): string {\n return LC_TYPE_TO_ROLE[lcType.toLowerCase()] ?? lcType;\n}\n\n/**\n * Extract the `role` from a message. Plain `{role: \"...\"}` objects (OpenAI\n * wire format) win first; otherwise duck-types LangChain-style messages via\n * `_getType()` (LangChain JS `BaseMessage`) or a `.type` string property.\n */\nfunction getRole(msg: unknown): string {\n if (msg === null || typeof msg !== \"object\") return \"\";\n const rec = msg as OpenAiMessageLike;\n if (typeof rec.role === \"string\") return rec.role;\n if (typeof rec._getType === \"function\") {\n try {\n const t = rec._getType();\n if (typeof t === \"string\" && t.length > 0) return lcTypeToRole(t);\n } catch {\n // fall through\n }\n }\n if (typeof rec.type === \"string\" && rec.type.length > 0) return lcTypeToRole(rec.type);\n return \"\";\n}\n\nfunction getContent(msg: unknown): unknown {\n if (msg === null || typeof msg !== \"object\") return undefined;\n return (msg as OpenAiMessageLike).content;\n}\n\nfunction getAttr(msg: unknown, attr: string): unknown {\n if (msg === null || typeof msg !== \"object\") return undefined;\n return (msg as Record<string, unknown>)[attr];\n}\n\n/**\n * Coerce an OpenAI message `content` value to a plain string. Content can\n * be:\n * - string: plain text (most common)\n * - array of parts: [{type: \"text\", text: \"...\"}, {type: \"image_url\", ...}]\n * - null/undefined\n */\nfunction contentToText(content: unknown): string {\n if (content === null || content === undefined) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const part of content) {\n if (part && typeof part === \"object\") {\n const p = part as Record<string, unknown>;\n if (p.type === \"text\") {\n parts.push(typeof p.text === \"string\" ? p.text : String(p.text ?? \"\"));\n } else if (p.type === \"image_url\") {\n parts.push(\"[image]\");\n }\n } else if (typeof part === \"string\") {\n parts.push(part);\n }\n }\n return parts.filter((p) => p.length > 0).join(\"\\n\");\n }\n return String(content);\n}\n\n/* ------------------------------------------------------------------------ */\n/* Segment construction */\n/* ------------------------------------------------------------------------ */\n\nfunction makeSegment(\n position: number,\n source: string,\n content: string,\n attrs?: Record<string, unknown>,\n): ContextSegment {\n const contentHash = sha256Hex(content);\n const truncated = truncateToBytes(content, CONTEXT_SEGMENT_CONTENT_BYTE_CAP);\n const seg: ContextSegment = {\n position,\n source,\n content_hash: contentHash,\n content: truncated.text,\n };\n if (truncated.truncated) seg.content_truncated = true;\n if (attrs) seg.attrs = attrs;\n return seg;\n}\n\n/**\n * Stringify with stable key ordering so equivalent objects hash to the\n * same content_hash regardless of property insertion order. Mirrors\n * Python's `json.dumps(tools, sort_keys=True, default=str)`.\n */\nfunction canonicalJsonStringify(value: unknown): string {\n try {\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 } catch {\n return String(value);\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Hashing + byte truncation (duplicated from `src/anthropic/index.ts` —\n * see that file's equivalent block; kept module-local so this file has no\n * cross-adapter dependency, matching the existing `_agent-sdk-common/\n * redaction.ts` convention of a module-local SHA-256 fallback.) */\n/* ------------------------------------------------------------------------ */\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 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 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 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 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 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 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/_agent-sdk-common/context-decomposer.ts"],"names":["text"],"mappings":"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","file":"chunk-4JPZV2VZ.js","sourcesContent":["/**\n * `_agent-sdk-common/context-decomposer.ts` — shared OpenAI-chat-format\n * context segment decomposer (MHQ-750).\n *\n * TS port of `apps/sdk/python/src/morse_ai/context/decomposer.py`'s\n * `decompose_openai_messages`. Pure functions — no I/O, no dependency on\n * `_internal/tracing.ts` or any adapter. Classifies an OpenAI chat\n * completions-shaped `messages` array (+ optional `tools` array) into\n * `ContextSegment`s so the Context & Memory dashboard can show context\n * composition without any extra customer config.\n *\n * The Anthropic adapter (`src/anthropic/index.ts`) has its own\n * `extractAnthropicSegments` because Anthropic's message format has extra\n * structure (block lists, tool_result blocks, cache_control markers). For\n * OpenAI-chat-format messages — which covers plain OpenAI chat completions,\n * LangChain, and LangGraph after message flattening — this module is the\n * canonical decomposer, mirroring the Python side's module boundary\n * (`morse_ai.context.decomposer` is called from both `adapters/openai.py`\n * and `adapters/langgraph.py`).\n *\n * Source tag mapping (mirrors the backend `SegmentSource` enum and the\n * Python decomposer's docstring):\n *\n * role=system → system_prompt\n * tools=[...] (the definitions array) → tool_descriptions\n * role=tool (OpenAI tool result) → tool_observation\n * role=user / role=assistant (prior turns) → chat_history\n * role=user (last user turn, not a tool result) → current_input\n *\n * Position is 0-indexed in emission order:\n * tool_descriptions → system_prompt → chat_history/tool_observation → current_input\n *\n * Message duck-typing: accepts plain `{role, content}` dicts (OpenAI wire\n * format) AND LangChain-style message objects — either a `_getType()`\n * method (LangChain JS `BaseMessage`) or a `.type` string property. This\n * lets `decomposeOpenAiMessages` be called directly with LangGraph JS's\n * flattened `BaseMessage[]` without a translation layer, mirroring how the\n * Python decomposer duck-types LangChain's `.type` attribute.\n *\n * Never throws — malformed input returns `[]`, matching the Python\n * decomposer's `except Exception: return []` guarantee.\n */\n\nimport type { ContextSegment } from \"../_internal/spans\";\n\n/* ------------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Per-segment content cap (bytes). Matches the Python decomposer's\n * `_CONTENT_BYTE_CAP` and the Anthropic TS adapter's\n * `MAX_SEGMENT_CONTENT_BYTES` so the server-side payload guard (AI-SEC-08,\n * 256 KB on `ContextSegmentIn.content`) is approached at the same rate\n * across every adapter/language.\n */\nexport const CONTEXT_SEGMENT_CONTENT_BYTE_CAP = 4096;\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Structural shape of an OpenAI chat-completions-format message. Also\n * accepts LangChain-style message objects via `_getType()`/`.type`\n * duck-typing — see file header.\n */\nexport interface OpenAiMessageLike {\n role?: string;\n content?: unknown;\n tool_call_id?: string;\n _getType?: () => unknown;\n type?: unknown;\n [key: string]: unknown;\n}\n\n/** Structural shape of an OpenAI `tools` definition entry. */\nexport interface OpenAiToolLike {\n type?: string;\n function?: { name?: string; [key: string]: unknown };\n name?: string;\n [key: string]: unknown;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Decompose an OpenAI chat-completions-shaped request into context\n * segments.\n *\n * @param messages - The `messages` array. Each element should be a\n * `{role, content}` object, or a LangChain-style message object (see\n * file header). Non-array input is tolerated (treated as absent).\n * @param tools - The `tools` array (list of tool definition objects).\n * Non-array input is tolerated (treated as absent).\n * @returns `ContextSegment[]` ready for `SpanData.context_segments`.\n * Returns `[]` (never throws) on malformed input.\n */\nexport function decomposeOpenAiMessages(messages?: unknown, tools?: unknown): ContextSegment[] {\n const messagesArr = Array.isArray(messages) ? (messages as OpenAiMessageLike[]) : undefined;\n const toolsArr = Array.isArray(tools) ? (tools as OpenAiToolLike[]) : undefined;\n\n if ((!messagesArr || messagesArr.length === 0) && (!toolsArr || toolsArr.length === 0)) {\n return [];\n }\n\n try {\n const segments: ContextSegment[] = [];\n let position = 0;\n\n // 1. tool_descriptions — one segment for the entire tools array.\n if (toolsArr && toolsArr.length > 0) {\n const toolNames: string[] = [];\n for (const t of toolsArr) {\n if (t && typeof t === \"object\") {\n const name = t.function?.name ?? t.name;\n if (typeof name === \"string\" && name.length > 0) toolNames.push(name);\n }\n }\n const toolsJson = canonicalJsonStringify(toolsArr);\n segments.push(\n makeSegment(position, \"tool_descriptions\", toolsJson, {\n tool_count: toolsArr.length,\n tool_names: toolNames,\n }),\n );\n position += 1;\n }\n\n if (!messagesArr) return segments;\n\n // 2. system_prompt — every system message, joined.\n const systemParts: string[] = [];\n for (const msg of messagesArr) {\n if (getRole(msg) === \"system\") {\n const text = contentToText(getContent(msg));\n if (text) systemParts.push(text);\n }\n }\n if (systemParts.length > 0) {\n segments.push(makeSegment(position, \"system_prompt\", systemParts.join(\"\\n\")));\n position += 1;\n }\n\n // 3. Walk non-system messages. Find the last user message that is NOT\n // purely a tool_result (role=tool).\n const nonSystem = messagesArr.filter((m) => getRole(m) !== \"system\");\n\n let lastUserInputIdx = -1;\n for (let i = nonSystem.length - 1; i >= 0; i--) {\n if (getRole(nonSystem[i]) === \"user\") {\n lastUserInputIdx = i;\n break;\n }\n }\n\n for (let i = 0; i < nonSystem.length; i++) {\n const msg = nonSystem[i];\n const role = getRole(msg);\n const content = getContent(msg);\n\n // OpenAI tool role → tool_observation segment.\n if (role === \"tool\") {\n const text = contentToText(content);\n if (text) {\n const toolCallId = getAttr(msg, \"tool_call_id\");\n const prefix =\n typeof toolCallId === \"string\" && toolCallId.length > 0\n ? `[tool_result id=${toolCallId}]\\n`\n : \"\";\n segments.push(makeSegment(position, \"tool_observation\", prefix + text, { role }));\n position += 1;\n }\n continue;\n }\n\n // Skip system (already handled).\n if (role === \"system\") continue;\n\n const text = contentToText(content);\n if (!text) continue;\n\n const source = role === \"user\" && i === lastUserInputIdx ? \"current_input\" : \"chat_history\";\n segments.push(makeSegment(position, source, text, role ? { role } : undefined));\n position += 1;\n }\n\n return segments;\n } catch {\n return [];\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Message duck-typing helpers */\n/* ------------------------------------------------------------------------ */\n\nconst LC_TYPE_TO_ROLE: Record<string, string> = {\n human: \"user\",\n ai: \"assistant\",\n system: \"system\",\n tool: \"tool\",\n function: \"tool\",\n chat: \"user\",\n};\n\nfunction lcTypeToRole(lcType: string): string {\n return LC_TYPE_TO_ROLE[lcType.toLowerCase()] ?? lcType;\n}\n\n/**\n * Extract the `role` from a message. Plain `{role: \"...\"}` objects (OpenAI\n * wire format) win first; otherwise duck-types LangChain-style messages via\n * `_getType()` (LangChain JS `BaseMessage`) or a `.type` string property.\n */\n/**\n * Exported for `_internal/llm-io.ts` (MHQ-858): input_data capture needs the\n * exact same message duck-typing as segment decomposition — a LangChain\n * message object has no plain `.role`, and two divergent implementations of\n * that rule is how the two features drift apart.\n */\nexport function getRole(msg: unknown): string {\n if (msg === null || typeof msg !== \"object\") return \"\";\n const rec = msg as OpenAiMessageLike;\n if (typeof rec.role === \"string\") return rec.role;\n if (typeof rec._getType === \"function\") {\n try {\n const t = rec._getType();\n if (typeof t === \"string\" && t.length > 0) return lcTypeToRole(t);\n } catch {\n // fall through\n }\n }\n if (typeof rec.type === \"string\" && rec.type.length > 0) return lcTypeToRole(rec.type);\n return \"\";\n}\n\n/** Exported alongside `getRole` — see its note. */\nexport function getContent(msg: unknown): unknown {\n if (msg === null || typeof msg !== \"object\") return undefined;\n return (msg as OpenAiMessageLike).content;\n}\n\nfunction getAttr(msg: unknown, attr: string): unknown {\n if (msg === null || typeof msg !== \"object\") return undefined;\n return (msg as Record<string, unknown>)[attr];\n}\n\n/**\n * Coerce an OpenAI message `content` value to a plain string. Content can\n * be:\n * - string: plain text (most common)\n * - array of parts: [{type: \"text\", text: \"...\"}, {type: \"image_url\", ...}]\n * - null/undefined\n */\n/** Exported alongside `getRole` — see its note. */\nexport function contentToText(content: unknown): string {\n if (content === null || content === undefined) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n const parts: string[] = [];\n for (const part of content) {\n if (part && typeof part === \"object\") {\n const p = part as Record<string, unknown>;\n if (p.type === \"text\") {\n parts.push(typeof p.text === \"string\" ? p.text : String(p.text ?? \"\"));\n } else if (p.type === \"image_url\") {\n parts.push(\"[image]\");\n }\n } else if (typeof part === \"string\") {\n parts.push(part);\n }\n }\n return parts.filter((p) => p.length > 0).join(\"\\n\");\n }\n return String(content);\n}\n\n/* ------------------------------------------------------------------------ */\n/* Segment construction */\n/* ------------------------------------------------------------------------ */\n\nfunction makeSegment(\n position: number,\n source: string,\n content: string,\n attrs?: Record<string, unknown>,\n): ContextSegment {\n const contentHash = sha256Hex(content);\n const truncated = truncateToBytes(content, CONTEXT_SEGMENT_CONTENT_BYTE_CAP);\n const seg: ContextSegment = {\n position,\n source,\n content_hash: contentHash,\n content: truncated.text,\n };\n if (truncated.truncated) seg.content_truncated = true;\n if (attrs) seg.attrs = attrs;\n return seg;\n}\n\n/**\n * Stringify with stable key ordering so equivalent objects hash to the\n * same content_hash regardless of property insertion order. Mirrors\n * Python's `json.dumps(tools, sort_keys=True, default=str)`.\n */\nfunction canonicalJsonStringify(value: unknown): string {\n try {\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 } catch {\n return String(value);\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* Hashing + byte truncation (duplicated from `src/anthropic/index.ts` —\n * see that file's equivalent block; kept module-local so this file has no\n * cross-adapter dependency, matching the existing `_agent-sdk-common/\n * redaction.ts` convention of a module-local SHA-256 fallback.) */\n/* ------------------------------------------------------------------------ */\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 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 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 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 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 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 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"]}