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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/README.md +11 -10
  2. package/dist/anthropic/index.cjs +11 -11
  3. package/dist/anthropic/index.d.cts +1 -1
  4. package/dist/anthropic/index.d.ts +1 -1
  5. package/dist/anthropic/index.js +4 -4
  6. package/dist/anthropic-agent-sdk/index.cjs +44 -40
  7. package/dist/anthropic-agent-sdk/index.cjs.map +1 -1
  8. package/dist/anthropic-agent-sdk/index.d.cts +1 -1
  9. package/dist/anthropic-agent-sdk/index.d.ts +1 -1
  10. package/dist/anthropic-agent-sdk/index.js +10 -6
  11. package/dist/anthropic-agent-sdk/index.js.map +1 -1
  12. package/dist/browser/anthropic/index.cjs +11 -11
  13. package/dist/browser/anthropic/index.js +4 -4
  14. package/dist/browser/anthropic-agent-sdk/index.cjs +44 -40
  15. package/dist/browser/anthropic-agent-sdk/index.cjs.map +1 -1
  16. package/dist/browser/anthropic-agent-sdk/index.js +10 -6
  17. package/dist/browser/anthropic-agent-sdk/index.js.map +1 -1
  18. package/dist/browser/{chunk-ELQ4LGAS.cjs → chunk-33WDUUKZ.cjs} +18 -18
  19. package/dist/browser/{chunk-ELQ4LGAS.cjs.map → chunk-33WDUUKZ.cjs.map} +1 -1
  20. package/dist/browser/{chunk-TV7TRP5O.cjs → chunk-3I7IGP3P.cjs} +5 -5
  21. package/dist/browser/chunk-3I7IGP3P.cjs.map +1 -0
  22. package/dist/browser/{chunk-YYUDZTHI.js → chunk-3OYHDDOJ.js} +27 -5
  23. package/dist/browser/chunk-3OYHDDOJ.js.map +1 -0
  24. package/dist/browser/{chunk-6BNMYEMW.cjs → chunk-4IUHXUCJ.cjs} +49 -9
  25. package/dist/browser/chunk-4IUHXUCJ.cjs.map +1 -0
  26. package/dist/browser/{chunk-BUCIE3DR.js → chunk-5TYTCLKA.js} +4 -4
  27. package/dist/browser/{chunk-BUCIE3DR.js.map → chunk-5TYTCLKA.js.map} +1 -1
  28. package/dist/browser/{chunk-VIOT3AOP.js → chunk-6JHMFFPE.js} +3 -3
  29. package/dist/browser/chunk-6JHMFFPE.js.map +1 -0
  30. package/dist/browser/{chunk-BIP66M44.cjs → chunk-FKYI3N5N.cjs} +7 -7
  31. package/dist/browser/{chunk-BIP66M44.cjs.map → chunk-FKYI3N5N.cjs.map} +1 -1
  32. package/dist/browser/{chunk-NU74H55W.js → chunk-FPTUHYDJ.js} +3 -3
  33. package/dist/browser/{chunk-NU74H55W.js.map → chunk-FPTUHYDJ.js.map} +1 -1
  34. package/dist/browser/{chunk-52JTU4LH.cjs → chunk-IDKQZ4X5.cjs} +38 -15
  35. package/dist/browser/chunk-IDKQZ4X5.cjs.map +1 -0
  36. package/dist/browser/{chunk-2X64OY2L.cjs → chunk-LIP3XCTK.cjs} +12 -12
  37. package/dist/browser/{chunk-2X64OY2L.cjs.map → chunk-LIP3XCTK.cjs.map} +1 -1
  38. package/dist/browser/{chunk-T6Z6UIBN.js → chunk-OUQAH27A.js} +3 -3
  39. package/dist/browser/{chunk-T6Z6UIBN.js.map → chunk-OUQAH27A.js.map} +1 -1
  40. package/dist/browser/{chunk-4CMVMTFB.cjs → chunk-PSNZZBQJ.cjs} +6 -6
  41. package/dist/browser/{chunk-4CMVMTFB.cjs.map → chunk-PSNZZBQJ.cjs.map} +1 -1
  42. package/dist/browser/{chunk-6T6ZPOKZ.js → chunk-PXHTLCEU.js} +49 -10
  43. package/dist/browser/chunk-PXHTLCEU.js.map +1 -0
  44. package/dist/browser/{chunk-KZFG23MO.js → chunk-TRVACYUN.js} +5 -5
  45. package/dist/browser/{chunk-KZFG23MO.js.map → chunk-TRVACYUN.js.map} +1 -1
  46. package/dist/browser/index.cjs +189 -124
  47. package/dist/browser/index.cjs.map +1 -1
  48. package/dist/browser/index.js +111 -46
  49. package/dist/browser/index.js.map +1 -1
  50. package/dist/browser/integrations/pino.cjs +4 -4
  51. package/dist/browser/integrations/pino.js +3 -3
  52. package/dist/browser/langchain/index.cjs +28 -26
  53. package/dist/browser/langchain/index.cjs.map +1 -1
  54. package/dist/browser/langchain/index.js +13 -11
  55. package/dist/browser/langchain/index.js.map +1 -1
  56. package/dist/browser/langgraph/index.cjs +32 -30
  57. package/dist/browser/langgraph/index.cjs.map +1 -1
  58. package/dist/browser/langgraph/index.js +10 -8
  59. package/dist/browser/langgraph/index.js.map +1 -1
  60. package/dist/browser/openai/index.cjs +11 -11
  61. package/dist/browser/openai/index.js +2 -2
  62. package/dist/browser/openai-agents/index.cjs +63 -35
  63. package/dist/browser/openai-agents/index.cjs.map +1 -1
  64. package/dist/browser/openai-agents/index.js +33 -5
  65. package/dist/browser/openai-agents/index.js.map +1 -1
  66. package/dist/browser/vercel-ai/index.cjs +14 -14
  67. package/dist/browser/vercel-ai/index.js +3 -3
  68. package/dist/{chunk-KMBKZLXH.cjs → chunk-7DALGJL2.cjs} +100 -25
  69. package/dist/chunk-7DALGJL2.cjs.map +1 -0
  70. package/dist/{chunk-D5NTF54A.cjs → chunk-B7TGG62X.cjs} +12 -12
  71. package/dist/{chunk-D5NTF54A.cjs.map → chunk-B7TGG62X.cjs.map} +1 -1
  72. package/dist/{chunk-LPLL2OXI.cjs → chunk-COZFARLL.cjs} +5 -5
  73. package/dist/chunk-COZFARLL.cjs.map +1 -0
  74. package/dist/{chunk-GTPKPUAV.cjs → chunk-DXTNU2KT.cjs} +38 -15
  75. package/dist/chunk-DXTNU2KT.cjs.map +1 -0
  76. package/dist/{chunk-6FLGLD72.js → chunk-ERH3TNXZ.js} +3 -3
  77. package/dist/{chunk-6FLGLD72.js.map → chunk-ERH3TNXZ.js.map} +1 -1
  78. package/dist/{chunk-7HYFOHM3.cjs → chunk-ESJJXXB6.cjs} +6 -6
  79. package/dist/{chunk-7HYFOHM3.cjs.map → chunk-ESJJXXB6.cjs.map} +1 -1
  80. package/dist/{chunk-SUEBUMHL.cjs → chunk-ETRNCI5Z.cjs} +18 -18
  81. package/dist/{chunk-SUEBUMHL.cjs.map → chunk-ETRNCI5Z.cjs.map} +1 -1
  82. package/dist/{chunk-KWOSUW7B.js → chunk-GULJAURY.js} +27 -5
  83. package/dist/chunk-GULJAURY.js.map +1 -0
  84. package/dist/{chunk-ZIMGB7IT.js → chunk-HJV35HWL.js} +100 -26
  85. package/dist/chunk-HJV35HWL.js.map +1 -0
  86. package/dist/{chunk-3ONFIKKC.js → chunk-L7AD4KUD.js} +3 -3
  87. package/dist/chunk-L7AD4KUD.js.map +1 -0
  88. package/dist/{chunk-SFI36VWW.js → chunk-QBDTQTMN.js} +3 -3
  89. package/dist/{chunk-SFI36VWW.js.map → chunk-QBDTQTMN.js.map} +1 -1
  90. package/dist/{chunk-NMARCV3R.cjs → chunk-WG4H5JC6.cjs} +7 -7
  91. package/dist/{chunk-NMARCV3R.cjs.map → chunk-WG4H5JC6.cjs.map} +1 -1
  92. package/dist/{chunk-J5FEPM7L.js → chunk-XS4P7XPV.js} +5 -5
  93. package/dist/{chunk-J5FEPM7L.js.map → chunk-XS4P7XPV.js.map} +1 -1
  94. package/dist/{chunk-ZZSVPAXM.js → chunk-YVLEDBN7.js} +4 -4
  95. package/dist/{chunk-ZZSVPAXM.js.map → chunk-YVLEDBN7.js.map} +1 -1
  96. package/dist/index.cjs +199 -134
  97. package/dist/index.cjs.map +1 -1
  98. package/dist/index.d.cts +13 -2
  99. package/dist/index.d.ts +13 -2
  100. package/dist/index.js +112 -47
  101. package/dist/index.js.map +1 -1
  102. package/dist/integrations/pino.cjs +4 -4
  103. package/dist/integrations/pino.js +3 -3
  104. package/dist/langchain/index.cjs +28 -26
  105. package/dist/langchain/index.cjs.map +1 -1
  106. package/dist/langchain/index.d.cts +3 -3
  107. package/dist/langchain/index.d.ts +3 -3
  108. package/dist/langchain/index.js +13 -11
  109. package/dist/langchain/index.js.map +1 -1
  110. package/dist/langgraph/index.cjs +32 -30
  111. package/dist/langgraph/index.cjs.map +1 -1
  112. package/dist/langgraph/index.d.cts +3 -3
  113. package/dist/langgraph/index.d.ts +3 -3
  114. package/dist/langgraph/index.js +10 -8
  115. package/dist/langgraph/index.js.map +1 -1
  116. package/dist/openai/index.cjs +11 -11
  117. package/dist/openai/index.js +2 -2
  118. package/dist/openai-agents/index.cjs +63 -35
  119. package/dist/openai-agents/index.cjs.map +1 -1
  120. package/dist/openai-agents/index.d.cts +13 -4
  121. package/dist/openai-agents/index.d.ts +13 -4
  122. package/dist/openai-agents/index.js +33 -5
  123. package/dist/openai-agents/index.js.map +1 -1
  124. package/dist/{spans-DZtMuBvc.d.cts → spans-CBMWNg2C.d.cts} +1 -0
  125. package/dist/{spans-DZtMuBvc.d.ts → spans-CBMWNg2C.d.ts} +1 -0
  126. package/dist/{tracing-J8ZgxVzU.d.ts → tracing-BMWTyexr.d.ts} +1 -1
  127. package/dist/{tracing-CNlre8TK.d.cts → tracing-Bh-cbvr6.d.cts} +1 -1
  128. package/dist/vercel-ai/index.cjs +14 -14
  129. package/dist/vercel-ai/index.js +3 -3
  130. package/package.json +1 -1
  131. package/dist/browser/chunk-52JTU4LH.cjs.map +0 -1
  132. package/dist/browser/chunk-6BNMYEMW.cjs.map +0 -1
  133. package/dist/browser/chunk-6T6ZPOKZ.js.map +0 -1
  134. package/dist/browser/chunk-TV7TRP5O.cjs.map +0 -1
  135. package/dist/browser/chunk-VIOT3AOP.js.map +0 -1
  136. package/dist/browser/chunk-YYUDZTHI.js.map +0 -1
  137. package/dist/chunk-3ONFIKKC.js.map +0 -1
  138. package/dist/chunk-GTPKPUAV.cjs.map +0 -1
  139. package/dist/chunk-KMBKZLXH.cjs.map +0 -1
  140. package/dist/chunk-KWOSUW7B.js.map +0 -1
  141. package/dist/chunk-LPLL2OXI.cjs.map +0 -1
  142. package/dist/chunk-ZIMGB7IT.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/anthropic-agent-sdk/client-wrapper.ts","../../src/_agent-sdk-common/context-propagation.ts","../../src/anthropic-agent-sdk/hook-instrumentation.ts","../../src/anthropic-agent-sdk/llm-instrumentation.ts","../../src/anthropic-agent-sdk/tool-and-subagent.ts","../../src/anthropic-agent-sdk/trace-bridge.ts","../../src/anthropic-agent-sdk/query-wrapper.ts","../../src/anthropic-agent-sdk/index.ts"],"names":["init_tracing","absorbErrorsAsync","iterateInTrace","emitAgentSpan","getActiveTraceState","runAsync","absorbErrorsSync","startSpan","emitHookSpan","init_diagnostics","calculateCost","emitLlmSpan","extractAnthropicSegments","report","summarizeToolInput","handle","emitToolSpan","summarizeToolOutput","reportSwallowed"],"mappings":";;;;;;;;;;;;AA0BAA,8BAAA,EAAA;AASA,IAAM,cAAA,mBAAiB,MAAA,CAAO,GAAA,CAAI,mCAAmC,CAAA;AAqB9D,SAAS,kBAAA,CACd,MAAA,EACA,OAAA,GAAqC,EAAC,EACnC;AACH,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,UAAU,OAAO,MAAA;AAElD,EAAA,IAAK,MAAA,CAA4C,cAAc,CAAA,EAAG,OAAO,MAAA;AAEzE,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AAC/C,EAAA,IAAI,OAAO,aAAA,KAAkB,UAAA,EAAY,OAAO,MAAA;AAEhD,EAAA,MAAM,YAAA,GAAe,iBAAA;AAAA,IACnB,aAAA;AAAA,IAIA;AAAA,GACF;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,KAAA,CAAM,MAAA,EAAQ;AAAA,IAChC,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,IAAA,KAAS,gBAAgB,OAAO,IAAA;AACpC,MAAA,IAAI,IAAA,KAAS,SAAS,OAAO,YAAA;AAC7B,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAChD,MAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC/B,QAAA,OAAQ,KAAA,CAAuC,KAAK,MAAM,CAAA;AAAA,MAC5D;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACD,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAmBO,IAAM,wBAAA,GAGuBC,mCAAA;AAAA,EAClC,OACE,MAAA,GAA0C,MAAA,EAC1C,YAAA,GAA0C,EAAC,KACtB;AACrB,IAAA,IAAI,UAAU,QAAA,CAAS,MAAM,GAAG,OAAO,kBAAA,CAAmB,QAAQ,YAAY,CAAA;AAC9E,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAAA,EACA,EAAE,aAAa,4CAAA;AACjB;AAGO,SAAS,wBAAwB,MAAA,EAA0B;AAChE,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,UAAU,OAAO,KAAA;AAClD,EAAA,OAAQ,MAAA,CAA4C,cAAc,CAAA,KAAM,IAAA;AAC1E;AAMA,SAAS,SAAS,CAAA,EAAsC;AACtD,EAAA,IAAI,CAAC,CAAA,IAAK,OAAO,CAAA,KAAM,UAAU,OAAO,KAAA;AACxC,EAAA,MAAM,IAAK,CAAA,CAA0B,KAAA;AACrC,EAAA,OAAO,OAAO,CAAA,KAAM,UAAA;AACtB;AAMA,SAAS,iBAAA,CACP,UAIA,OAAA,EACqF;AACrF,EAAA,MAAM,gBAAA,GAAmB,QAAQ,gBAAA,IAAoB,kBAAA;AACrD,EAAA,MAAM,eAAe,OAAA,CAAQ,YAAA;AAE7B,EAAA,OAAO,SAAS,YAAA,CAEd,MAAA,EACA,WAAA,EAC+B;AAE/B,IAAA,MAAM,aAAA,GAAgB,CACpB,CAAA,EACA,CAAA,KAEA,SAAS,IAAA,CAAK,IAAA,EAAM,GAAG,CAAC,CAAA;AAC1B,IAAA,MAAM,KAAA,GAAA,CACH,eAAe,OAAO,WAAA,CAAY,UAAU,QAAA,GAAW,WAAA,CAAY,QAAQ,MAAA,KAC5E,YAAA;AAEF,IAAA,gBAAgBC,eAAAA,GAAgE;AAI9E,MAAA,MAAM,SAASC,+BAAA,CAAc;AAAA,QAC3B,OAAA,EAAS,qBAAA;AAAA,QACT,SAAA,EAAW,gBAAA;AAAA,QACX;AAAA,OACD,CAAA;AACD,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,aAAA,CAAc,MAAA,EAAQ,WAAW,CAAA;AAC7C,QAAA,IAAA,GAAQ,GAAA,YAAe,OAAA,GAAU,MAAM,GAAA,GAAM,GAAA;AAAA,MAC/C,SAAS,GAAA,EAAK;AACZ,QAAA,MAAA,EAAQ,IAAI,GAAG,CAAA;AACf,QAAA,MAAM,GAAA;AAAA,MACR;AACA,MAAA,IAAI;AACF,QAAA,WAAA,MAAiB,SAAS,IAAA,EAAM;AAC9B,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,MAAA,EAAQ,IAAI,GAAG,CAAA;AACf,QAAA,MAAM,GAAA;AAAA,MACR;AACA,MAAA,MAAA,EAAQ,GAAA,EAAI;AAAA,IACd;AAMA,IAAA,IAAIC,qCAAA,OAA0B,IAAA,EAAM;AAClC,MAAA,OAAOF,eAAAA,EAAe;AAAA,IACxB;AAKA,IAAA,OAAA,CAAQ,gBAAgB,UAAA,GAA4D;AAIlF,MAAA,MAAM,QAIF,EAAC;AACL,MAAA,IAAI,MAAA,GAA8B,IAAA;AAClC,MAAA,MAAM,WAAA,GAAc,MAClB,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AACvB,QAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,UAAA,OAAA,EAAQ;AAAA,QACV,CAAA,MAAO;AACL,UAAA,MAAA,GAAS,MAAY;AACnB,YAAA,MAAA,GAAS,IAAA;AACT,YAAA,OAAA,EAAQ;AAAA,UACV,CAAA;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAIH,MAAA,MAAM,aAAaG,0BAAA,CAAU,EAAE,WAAW,gBAAA,EAAiB,EAAG,OAAO,SAAA,KAAc;AACjF,QAAA,IAAI;AACF,UAAA,WAAA,MAAiB,KAAA,IAASH,iBAAe,EAAG;AAC1C,YAAA,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAO,CAAA;AAC1C,YAAA,MAAA,IAAS;AAAA,UACX;AACA,UAAA,SAAA,CAAU,WAAW,IAAI,CAAA;AAAA,QAC3B,SAAS,GAAA,EAAK;AACZ,UAAA,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,KAAK,CAAA;AACxC,UAAA,MAAA,IAAS;AACT,UAAA,MAAM,GAAA;AAAA,QACR,CAAA,SAAE;AACA,UAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAC1B,UAAA,MAAA,IAAS;AAAA,QACX;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,MAAM,MAAM;AAAA,MAEvB,CAAC,CAAA;AAED,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,MAAM,WAAA,EAAY;AAC1C,QAAA,MAAM,IAAA,GAAO,MAAM,KAAA,EAAM;AACzB,QAAA,IAAI,CAAC,IAAA,EAAM;AACX,QAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,UAAA,MAAM,IAAA,CAAK,KAAA;AAAA,QACb,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;AAEhC,UAAA,MAAM,IAAA,CAAK,KAAA;AAAA,QACb,CAAA,MAAO;AACL,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,GAAG;AAAA,EACL,CAAA;AACF;;;AChPAF,8BAAA,EAAA;AAuCO,IAAM,sBAAA,GAAyBM,kCAAA;AAAA,EACpC,MAA6B;AAC3B,IAAA,MAAM,QAAQF,qCAAA,EAAoB;AAClC,IAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,IAAA,MAAM,MAAM,KAAA,CAAM,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,SAAS,CAAC,CAAA;AACtD,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,IAAA,OAAO;AAAA,MACL,cAAc,GAAA,CAAI,OAAA;AAAA,MAClB,SAAS,KAAA,CAAM;AAAA,KACjB;AAAA,EACF,CAAA;AAAA,EACA,EAAE,aAAa,yCAAA;AACjB,CAAA;AAWO,IAAM,oBAAA,GAAuBE,kCAAA;AAAA,EAClC,CAAC,IAAA,KAAyD;AACxD,IAAA,MAAM,QAAQF,qCAAA,EAAoB;AAClC,IAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,IAAA,MAAM,OAAO,IAAA,CAAK,QAAA;AAClB,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,OAAA,KAAY,KAAA,CAAM,SAAS,OAAO,IAAA;AAEpD,IAAA,MAAM,SAASG,2BAAA,CAAU;AAAA,MACvB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,UAAU,IAAA,CAAK;AAAA,KAChB,CAAA;AACD,IAAA,IAAI,MAAA,KAAW,MAAM,OAAO,IAAA;AAC5B,IAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,IAAA,CAAK,YAAA;AAClC,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAAA,EACA,EAAE,aAAa,uCAAA;AACjB,CAAA;AAEA,SAAS,YAAA,CAAa,OAAmB,MAAA,EAAsC;AAC7E,EAAA,KAAA,IAAS,IAAI,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACpD,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,SAAA,CAAU,CAAC,CAAA;AAC3B,IAAA,IAAI,CAAA,IAAK,CAAA,CAAE,OAAA,KAAY,MAAA,EAAQ,OAAO,CAAA;AAAA,EACxC;AACA,EAAA,KAAA,IAAS,IAAI,KAAA,CAAM,cAAA,CAAe,SAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACzD,IAAA,MAAM,CAAA,GAAI,KAAA,CAAM,cAAA,CAAe,CAAC,CAAA;AAChC,IAAA,IAAI,CAAA,IAAK,CAAA,CAAE,OAAA,KAAY,MAAA,EAAQ,OAAO,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,MAAA;AACT;AAWO,IAAM,iBAAA,GAAoBD,kCAAA;AAAA,EAC/B,CAAC,IAAA,KAAsD;AACrD,IAAA,MAAM,QAAQF,qCAAA,EAAoB;AAClC,IAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,IAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,EAAO,IAAA,CAAK,UAAU,CAAA;AAChD,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,IAAA,MAAM,SAASG,2BAAA,CAAU;AAAA,MACvB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,UAAU,IAAA,CAAK;AAAA,KAChB,CAAA;AACD,IAAA,IAAI,MAAA,KAAW,MAAM,OAAO,IAAA;AAG5B,IAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,IAAA,CAAK,cAAA;AAClC,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AAAA,EACA,EAAE,aAAa,oCAAA;AACjB,CAAA;AAOiCD,kCAAA;AAAA,EAC/B,MAAiC;AAC/B,IAAA,MAAM,QAAQF,qCAAA,EAAoB;AAClC,IAAA,IAAI,KAAA,KAAU,MAAM,OAAO,IAAA;AAC3B,IAAA,OAAO;AAAA,MACL,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,SAAA,EAAW,KAAA,CAAM,SAAA,CAAU,KAAA,EAAM;AAAA,MACjC,cAAA,EAAgB,KAAA,CAAM,cAAA,CAAe,KAAA;AAAM,KAC7C;AAAA,EACF,CAAA;AAAA,EACA,EAAE,aAAa,oCAAA;AACjB;;;AC1GA,SAAS,YAAY,OAAA,EAA4C;AAC/D,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAO,OAAA,KAAY,UAAU,OAAO,KAAA;AAC5D,EAAA,MAAM,GAAA,GAAM,OAAA;AACZ,EAAA,IAAI,OAAO,IAAI,IAAA,KAAS,QAAA,IAAY,IAAI,IAAA,CAAK,MAAA,KAAW,GAAG,OAAO,KAAA;AAClE,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,IAAI,SAAS,UAAA,IAAc,IAAA,KAAS,WAAA,IAAe,IAAA,KAAS,YAAY,OAAO,KAAA;AAC/E,EAAA,OAAO,IAAA;AACT;AAEA,IAAM,gBAAA,GAAmB,CACvB,OAAA,EACA,OAAA,KACS;AACT,EAAA,IAAI,CAAC,WAAA,CAAY,OAAO,CAAA,EAAG;AAC3B,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,OAAA;AACvB,EAAA,MAAM,UAAA,GACJ,OAAO,OAAA,CAAQ,WAAA,KAAgB,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,WAAW,CAAA,GAC1E,OAAA,CAAQ,WAAA,GACR,MAAA;AACN,EAAA,MAAM,SAAA,GACJ,OAAO,OAAA,CAAQ,WAAA,KAAgB,QAAA,IAAY,QAAQ,WAAA,CAAY,MAAA,GAAS,CAAA,GACpE,OAAA,CAAQ,WAAA,GACR,MAAA;AAEN,EAAA,MAAM,SAAS,OAAA,EAAS,cAAA;AACxB,EAAA,MAAM,UAAA,GACJ,cAAc,MAAA,IAAa,OAAO,WAAW,UAAA,GAAa,MAAA,CAAO,SAAS,CAAA,GAAI,IAAA;AAEhF,EAAA,IAAI,eAAe,IAAA,IAAQ,UAAA,KAAe,MAAA,IAAa,UAAA,CAAW,SAAS,CAAA,EAAG;AAC5E,IAAA,MAAM,QAAA,GAAoC,EAAE,IAAA,EAAM,IAAA,EAAK;AACvD,IAAA,IAAI,UAAA,KAAe,MAAA,EAAW,QAAA,CAAS,WAAA,GAAc,UAAA;AACrD,IAAA,MAAM,SAAS,iBAAA,CAAkB;AAAA,MAC/B,IAAA,EAAM,CAAA,yBAAA,EAA4B,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,MAC9C,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,QACR,OAAA,EAAS,qBAAA;AAAA,QACT,SAAA,EAAW,MAAA;AAAA,QACX,IAAA,EAAM;AAAA,OACR;AAAA,MACA;AAAA,KACD,CAAA;AAID,IAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW;AAC3C,MAAA,MAAA,CAAO,GAAA,EAAI;AACX,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,WAAWI,8BAAA,CAAa;AAAA,IAC5B,OAAA,EAAS,qBAAA;AAAA,IACT,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU,IAAA;AAAA,IACV;AAAA,GACD,CAAA;AACD,EAAA,IAAI,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,EAAW;AAC/C,IAAA,QAAA,CAAS,GAAA,EAAI;AAAA,EACf;AACF,CAAA;AAEA,IAAM,eAAA,GAGMF,mCAAiB,gBAAA,EAAkB;AAAA,EAC7C,WAAA,EAAa;AACf,CAAC,CAAA;AAaM,SAAS,0BAAA,CACd,QACA,OAAA,EACY;AACZ,EAAA,IAAI,MAAA,KAAW,QAAQ,OAAO,MAAA,KAAW,YAAY,OAAO,MAAA,CAAO,OAAO,UAAA,EAAY;AACpF,IAAA,OAAO,MAAM;AAAA,IAEb,CAAA;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,OAAA,KAA2B;AAC3C,IAAA,eAAA,CAAgB,SAAS,OAAO,CAAA;AAAA,EAClC,CAAA;AAEA,EAAA,IAAI;AACF,IAAA,MAAA,CAAO,EAAA,CAAG,QAAQ,QAAQ,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAM;AAAA,IAEb,CAAA;AAAA,EACF;AAEA,EAAA,OAAO,MAAY;AACjB,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,MAAA,CAAO,GAAA,KAAQ,UAAA,EAAY;AACpC,QAAA,MAAA,CAAO,GAAA,CAAI,QAAQ,QAAQ,CAAA;AAAA,MAC7B;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AACF;;;AC5IAG,kCAAA,EAAA;AAiCA,SAAS,gBAAgB,KAAA,EAAmD;AAC1E,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AAC/E,EAAA,MAAM,IAAA,GACJ,OAAO,KAAA,CAAM,YAAA,KAAiB,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,YAAY,CAAA,GACxE,KAAA,CAAM,YAAA,GACN,CAAA;AACN,EAAA,MAAM,UAAA,GACJ,OAAO,KAAA,CAAM,2BAAA,KAAgC,QAAA,IAC7C,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,2BAA2B,CAAA,GAC7C,KAAA,CAAM,2BAAA,GACN,CAAA;AACN,EAAA,MAAM,SAAA,GACJ,OAAO,KAAA,CAAM,uBAAA,KAA4B,QAAA,IACzC,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,uBAAuB,CAAA,GACzC,KAAA,CAAM,uBAAA,GACN,CAAA;AACN,EAAA,IACE,KAAA,CAAM,iBAAiB,MAAA,IACvB,KAAA,CAAM,gCAAgC,MAAA,IACtC,KAAA,CAAM,4BAA4B,MAAA,EAClC;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,UAAA,GAAa,SAAA;AAC7B;AAEA,SAAS,iBAAiB,KAAA,EAAmD;AAC3E,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AAC/E,EAAA,IAAI,OAAO,MAAM,aAAA,KAAkB,QAAA,IAAY,OAAO,QAAA,CAAS,KAAA,CAAM,aAAa,CAAA,EAAG;AACnF,IAAA,OAAO,KAAA,CAAM,aAAA;AAAA,EACf;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,qBAAqB,KAAA,EAAmD;AAC/E,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AAC/E,EAAA,IACE,OAAO,KAAA,CAAM,2BAAA,KAAgC,QAAA,IAC7C,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,2BAA2B,CAAA,IACjD,KAAA,CAAM,2BAAA,GAA8B,CAAA,EACpC;AACA,IAAA,OAAO,KAAA,CAAM,2BAAA;AAAA,EACf;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,sBAAsB,KAAA,EAAmD;AAChF,EAAA,IAAI,UAAU,MAAA,IAAa,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,MAAA;AAC/E,EAAA,IACE,OAAO,KAAA,CAAM,uBAAA,KAA4B,QAAA,IACzC,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,uBAAuB,CAAA,IAC7C,KAAA,CAAM,uBAAA,GAA0B,CAAA,EAChC;AACA,IAAA,OAAO,KAAA,CAAM,uBAAA;AAAA,EACf;AACA,EAAA,OAAO,MAAA;AACT;AAQA,SAAS,UACP,MAAA,EACA,KAAA,EACA,WAAA,EACA,YAAA,EACA,kBACA,iBAAA,EACM;AACN,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,QAAA,KAAa,MAAA,EAAW;AACxC,EAAA,IAAI,WAAA,KAAgB,MAAA,IAAa,YAAA,KAAiB,MAAA,EAAW;AAC7D,EAAA,MAAM,OAAOC,+BAAA,CAAc;AAAA,IACzB,aAAa,WAAA,IAAe,CAAA;AAAA,IAC5B,cAAc,YAAA,IAAgB,CAAA;AAAA,IAC9B,KAAA;AAAA,IACA,mBAAmB,iBAAA,IAAqB,CAAA;AAAA,IACxC,kBAAkB,gBAAA,IAAoB;AAAA,GACvC,CAAA;AACD,EAAA,IAAI,IAAA,KAAS,MAAA,EAAW,MAAA,CAAO,IAAA,CAAK,QAAA,GAAW,IAAA;AACjD;AAMA,SAAS,KAAK,EAAA,EAAsB;AAClC,EAAA,IAAI;AACF,IAAA,EAAA,EAAG;AAAA,EACL,SAAS,GAAA,EAAK;AAEZ,IAAA,eAAA,CAAgB,KAAK,+CAA+C,CAAA;AAAA,EACtE;AACF;AA0BA,gBAAuB,kBAAA,CACrB,QACA,OAAA,EAC+B;AAC/B,EAAA,IAAI,QAAA,GAA8B,IAAA;AAClC,EAAA,MAAM,gBAAgB,OAAA,EAAS,aAAA;AAC/B,EAAA,MAAM,gBAAgB,OAAA,EAAS,aAAA;AAE/B,EAAA,IAAI;AACF,IAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,MAAA,MAAM,YAAY,OAAO,KAAA,EAAO,IAAA,KAAS,QAAA,GAAW,MAAM,IAAA,GAAO,EAAA;AAMjE,MAAA,IAAI,SAAA,KAAc,WAAA,IAAe,KAAA,CAAM,OAAA,EAAS;AAC9C,QAAA,IAAA,CAAK,MAAM;AAGT,UAAA,IAAI,aAAa,IAAA,EAAM;AACrB,YAAA,QAAA,CAAS,GAAA,EAAI;AACb,YAAA,QAAA,GAAW,IAAA;AAAA,UACb;AACA,UAAA,MAAM,aAAA,GACJ,OAAO,KAAA,CAAM,OAAA,EAAS,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,GACrE,KAAA,CAAM,QAAQ,KAAA,GACd,KAAA,CAAA;AACN,UAAA,MAAM,QAAQ,aAAA,IAAiB,aAAA;AAC/B,UAAA,IAAI,CAAC,KAAA,EAAO;AACZ,UAAA,MAAM,SAASC,6BAAA,CAAY,EAAE,OAAA,EAAS,qBAAA,EAAuB,OAAO,CAAA;AACpE,UAAA,IAAI,CAAC,MAAA,EAAQ;AACb,UAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,EAAS,KAAA;AAC7B,UAAA,MAAM,WAAA,GAAc,gBAAgB,KAAK,CAAA;AACzC,UAAA,MAAM,YAAA,GAAe,iBAAiB,KAAK,CAAA;AAC3C,UAAA,MAAM,gBAAA,GAAmB,qBAAqB,KAAK,CAAA;AACnD,UAAA,MAAM,iBAAA,GAAoB,sBAAsB,KAAK,CAAA;AACrD,UAAA,IAAI,WAAA,KAAgB,KAAA,CAAA,EAAW,MAAA,CAAO,IAAA,CAAK,YAAA,GAAe,WAAA;AAC1D,UAAA,IAAI,YAAA,KAAiB,KAAA,CAAA,EAAW,MAAA,CAAO,IAAA,CAAK,aAAA,GAAgB,YAAA;AAC5D,UAAA,IAAI,gBAAA,KAAqB,KAAA,CAAA,EAAW,MAAA,CAAO,IAAA,CAAK,kBAAA,GAAqB,gBAAA;AACrE,UAAA,IAAI,iBAAA,KAAsB,KAAA,CAAA,EAAW,MAAA,CAAO,IAAA,CAAK,mBAAA,GAAsB,iBAAA;AACvE,UAAA,IAAI,WAAA,KAAgB,KAAA,CAAA,IAAa,YAAA,KAAiB,KAAA,CAAA,EAAW;AAC3D,YAAA,MAAA,CAAO,IAAA,CAAK,eAAe,WAAA,GAAc,YAAA;AAAA,UAC3C;AACA,UAAA,SAAA,CAAU,MAAA,EAAQ,KAAA,EAAO,WAAA,EAAa,YAAA,EAAc,kBAAkB,iBAAiB,CAAA;AACvF,UAAA,IAAI,kBAAkB,KAAA,CAAA,EAAW;AAC/B,YAAA,IAAI;AACF,cAAA,MAAM,QAAA,GAAWC,0CAAA;AAAA,gBACf,aAAA;AAAA,gBACA,KAAA,CAAM;AAAA,eACR;AACA,cAAA,IAAI,MAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAClD,gBAAA,MAAA,CAAO,KAAK,gBAAA,GAAmB,QAAA;AAAA,cACjC;AAAA,YACF,CAAA,CAAA,MAAQ;AAAA,YAER;AAAA,UACF;AACA,UAAA,MAAA,CAAO,GAAA,EAAI;AAAA,QACb,CAAC,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,cAAc,eAAA,EAAiB;AAGxC,QAAA,IAAA,CAAK,MAAM;AACT,UAAA,IAAI,aAAa,IAAA,EAAM;AACrB,YAAA,QAAA,CAAS,GAAA,CAAI,IAAI,KAAA,CAAM,qDAAqD,CAAC,CAAA;AAC7E,YAAA,QAAA,GAAW,IAAA;AAAA,UACb;AACA,UAAA,MAAM,aAAA,GACJ,OAAO,KAAA,CAAM,OAAA,EAAS,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,GACrE,KAAA,CAAM,QAAQ,KAAA,GACd,KAAA,CAAA;AACN,UAAA,MAAM,QAAQ,aAAA,IAAiB,aAAA;AAC/B,UAAA,IAAI,KAAA,KAAU,KAAA,CAAA,IAAa,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAE7C,YAAA;AAAA,UACF;AACA,UAAA,QAAA,GAAWD,6BAAA,CAAY;AAAA,YACrB,OAAA,EAAS,qBAAA;AAAA,YACT;AAAA,WACD,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,cAAc,cAAA,EAAgB;AACvC,QAAA,IAAI,aAAa,IAAA,EAAM;AACrB,UAAA,MAAM,MAAA,GAAqB,QAAA;AAC3B,UAAA,QAAA,GAAW,IAAA;AACX,UAAA,IAAA,CAAK,MAAM;AACT,YAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,EAAS,KAAA;AAC7B,YAAA,MAAM,WAAA,GAAc,gBAAgB,KAAK,CAAA;AACzC,YAAA,MAAM,YAAA,GAAe,iBAAiB,KAAK,CAAA;AAC3C,YAAA,MAAM,gBAAA,GAAmB,qBAAqB,KAAK,CAAA;AACnD,YAAA,MAAM,iBAAA,GAAoB,sBAAsB,KAAK,CAAA;AACrD,YAAA,IAAI,gBAAgB,KAAA,CAAA,EAAW;AAC7B,cAAA,MAAA,CAAO,KAAK,YAAA,GAAe,WAAA;AAAA,YAC7B;AACA,YAAA,IAAI,iBAAiB,KAAA,CAAA,EAAW;AAC9B,cAAA,MAAA,CAAO,KAAK,aAAA,GAAgB,YAAA;AAAA,YAC9B;AACA,YAAA,IAAI,qBAAqB,KAAA,CAAA,EAAW;AAClC,cAAA,MAAA,CAAO,KAAK,kBAAA,GAAqB,gBAAA;AAAA,YACnC;AACA,YAAA,IAAI,sBAAsB,KAAA,CAAA,EAAW;AACnC,cAAA,MAAA,CAAO,KAAK,mBAAA,GAAsB,iBAAA;AAAA,YACpC;AACA,YAAA,IAAI,WAAA,KAAgB,KAAA,CAAA,IAAa,YAAA,KAAiB,KAAA,CAAA,EAAW;AAC3D,cAAA,MAAA,CAAO,IAAA,CAAK,eAAe,WAAA,GAAc,YAAA;AAAA,YAC3C;AACA,YAAA,IAAI,MAAA,CAAO,KAAK,KAAA,EAAO;AACrB,cAAA,SAAA;AAAA,gBACE,MAAA;AAAA,gBACA,OAAO,IAAA,CAAK,KAAA;AAAA,gBACZ,WAAA;AAAA,gBACA,YAAA;AAAA,gBACA,gBAAA;AAAA,gBACA;AAAA,eACF;AAAA,YACF;AACA,YAAA,IAAI,kBAAkB,KAAA,CAAA,EAAW;AAC/B,cAAA,IAAI;AACF,gBAAA,MAAM,QAAA,GAAWC,0CAAA;AAAA,kBACf,aAAA;AAAA,kBACA,KAAA,CAAM;AAAA,iBACR;AACA,gBAAA,IAAI,MAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAClD,kBAAA,MAAA,CAAO,KAAK,gBAAA,GAAmB,QAAA;AAAA,gBACjC;AAAA,cACF,CAAA,CAAA,MAAQ;AAAA,cAER;AAAA,YACF;AACA,YAAA,MAAA,CAAO,GAAA,EAAI;AAAA,UACb,CAAC,CAAA;AAAA,QACH;AAAA,MAEF;AAEA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA,SAAE;AAEA,IAAA,IAAI,aAAa,IAAA,EAAM;AACrB,MAAA,MAAM,MAAA,GAAqB,QAAA;AAC3B,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,IAAA,CAAK,MAAM;AACT,QAAA,MAAA,CAAO,GAAA,CAAI,IAAI,KAAA,CAAM,2CAA2C,CAAC,CAAA;AAAA,MACnE,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AACF;AAQA,SAAS,eAAA,CAAgB,KAAc,WAAA,EAA2B;AAChE,EAAA,IAAI;AACF,IAAAC,wBAAA,CAAO,GAAA,EAAK,EAAE,WAAA,EAAa,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;;;ACzSAJ,kCAAA,EAAA;AAEA,IAAM,OAAA,GAAU,qBAAA;AAChB,IAAM,cAAA,GAAiB,MAAA;AAcvB,SAAS,eAAA,CAAgB,QAAoB,OAAA,EAAuB;AAClE,EAAA,IAAI;AACF,IAAA,MAAA,CAAO,GAAA,CAAI,IAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,EAC/B,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEA,SAAS,YAAY,MAAA,EAA0B;AAC7C,EAAA,IAAI;AACF,IAAA,MAAA,CAAO,GAAA,EAAI;AAAA,EACb,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAWA,gBAAuB,eAAA,CACrB,QACA,OAAA,EAC+B;AAC/B,EAAA,MAAM,IAAA,uBAAW,GAAA,EAA2B;AAC5C,EAAA,IAAI,cAAA,GAAwC,IAAA;AAC5C,EAAA,IAAI,iBAAA,GAAoB,CAAA;AAExB,EAAA,MAAM,YAAY,OAAA,EAAS,iBAAA,GACvB,EAAE,QAAA,EAAU,OAAA,CAAQ,mBAAkB,GACtC,MAAA;AACJ,EAAA,MAAM,aAAa,OAAA,EAAS,kBAAA,GACxB,EAAE,QAAA,EAAU,OAAA,CAAQ,oBAAmB,GACvC,MAAA;AAEJ,EAAA,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAAqC;AACjE,IAAA,MAAM,MAAO,KAAA,CAA8C,OAAA;AAC3D,IAAA,MAAM,UAAU,GAAA,EAAK,OAAA;AACrB,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,UAAU,EAAC;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAgC;AACrD,IAAA,MAAM,YAAY,OAAO,KAAA,CAAM,WAAA,KAAgB,QAAA,GAAW,MAAM,WAAA,GAAc,IAAA;AAC9E,IAAA,MAAM,OAAO,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,GAAW,MAAM,IAAA,GAAO,IAAA;AAC3D,IAAA,IAAI,SAAA,KAAc,IAAA,IAAQ,IAAA,KAAS,IAAA,EAAM;AACzC,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AAEzB,IAAA,IAAI,SAAS,cAAA,EAAgB;AAG3B,MAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,QAAA,cAAA,GAAiB,sBAAA,EAAuB;AAAA,MAC1C;AACA,MAAA,MAAM,KAAA,GACJ,MAAM,KAAA,IAAS,OAAO,MAAM,KAAA,KAAU,QAAA,GACjC,KAAA,CAAM,KAAA,GACP,EAAC;AACP,MAAA,MAAM,WAAA,GACJ,OAAO,KAAA,CAAM,WAAA,KAAgB,QAAA,IAAY,KAAA,CAAM,WAAA,CAAY,MAAA,GAAS,CAAA,GAChE,KAAA,CAAM,WAAA,GACN,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA;AAC3B,MAAA,MAAM,aAAa,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,GAAW,MAAM,MAAA,GAAS,MAAA;AAErE,MAAA,MAAM,QAAA,GAAoC;AAAA,QACxC,OAAA,EAAS,OAAA;AAAA,QACT,UAAA,EAAY,UAAA;AAAA,QACZ,iBAAA,EAAmB,qBAAA;AAAA,QACnB,aAAA,EAAe,WAAA;AAAA,QACf,WAAA,EAAa;AAAA,OACf;AACA,MAAA,IAAI,eAAe,MAAA,EAAW;AAE5B,QAAA,QAAA,CAAS,gBAAA,GAAmBK,oCAAA,CAAmB,UAAA,EAAY,SAAS,CAAA;AAAA,MACtE;AAEA,MAAA,IAAIC,OAAAA,GAA4B,IAAA;AAChC,MAAA,IAAI;AACF,QAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,UAAAA,UAAS,oBAAA,CAAqB;AAAA,YAC5B,IAAA,EAAM,GAAG,OAAO,CAAA,eAAA,CAAA;AAAA,YAChB,IAAA,EAAM,OAAA;AAAA,YACN,QAAA;AAAA,YACA,QAAA,EAAU;AAAA,WACX,CAAA;AAAA,QACH;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAAA,OAAAA,GAAS,IAAA;AAAA,MACX;AACA,MAAA,IAAIA,YAAW,IAAA,EAAM;AACrB,MAAA,IAAA,CAAK,IAAI,SAAA,EAAW,EAAE,QAAAA,OAAAA,EAAQ,UAAA,EAAY,MAAM,CAAA;AAChD,MAAA,iBAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,MAAA,GAA4B,IAAA;AAChC,IAAA,IAAI;AACF,MAAA,MAAA,GAASC,8BAAA,CAAa;AAAA,QACpB,OAAA,EAAS,OAAA;AAAA,QACT,QAAA,EAAU,IAAA;AAAA,QACV,YAAA,EAAcF,oCAAA,CAAmB,KAAA,CAAM,KAAA,EAAO,SAAS,CAAA;AAAA,QACvD,UAAA,EAAY,EAAE,WAAA,EAAa,SAAA;AAAU,OACtC,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,GAAS,IAAA;AAAA,IACX;AACA,IAAA,IAAI,WAAW,IAAA,EAAM;AACrB,IAAA,IAAA,CAAK,IAAI,SAAA,EAAW,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAO,CAAA;AAAA,EACnD,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAgC;AACxD,IAAA,MAAM,YAAY,OAAO,KAAA,CAAM,WAAA,KAAgB,QAAA,GAAW,MAAM,WAAA,GAAc,IAAA;AAC9E,IAAA,IAAI,cAAc,IAAA,EAAM;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAChC,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,IAAA,CAAK,OAAO,SAAS,CAAA;AACrB,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,KAAa,IAAA;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgBG,qCAAA,CAAoB,KAAA,CAAM,OAAA,EAAS,UAAU,CAAA;AACnE,MAAA,KAAA,CAAM,MAAA,CAAO,KAAK,QAAA,GAAW;AAAA,QAC3B,GAAI,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,YAAY,EAAC;AAAA,QACnC,mBAAA,EAAqB;AAAA,OACvB;AACA,MAAA,IAAI,MAAM,UAAA,EAAY;AAEpB,QAAC,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,QAAA,CAAqC,UAAU,CAAC,OAAA;AAAA,MACrE,CAAA,MAAO;AAGL,QAAC,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,QAAA,CAAqC,UAAU,CAAC,OAAA;AAAA,MACrE;AAAA,IACF,SAAS,GAAA,EAAK;AAEZ,MAAAC,gBAAAA,CAAgB,KAAK,oCAAoC,CAAA;AAAA,IAC3D;AACA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,eAAA,CAAgB,KAAA,CAAM,QAAQ,YAAY,CAAA;AAAA,IAC5C,CAAA,MAAO;AACL,MAAA,WAAA,CAAY,MAAM,MAAM,CAAA;AAAA,IAC1B;AAEA,IAAA,IAAI,MAAM,UAAA,EAAY;AACpB,MAAA,iBAAA,GAAoB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,iBAAA,GAAoB,CAAC,CAAA;AACrD,MAAA,IAAI,sBAAsB,CAAA,EAAG;AAC3B,QAAA,cAAA,GAAiB,IAAA;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,IAAI;AACF,IAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,OAAO,KAAA,EAAO,IAAA,KAAS,QAAA,GAAW,MAAM,IAAA,GAAO,IAAA;AAC5D,QAAA,IAAI,SAAS,UAAA,EAAY;AACvB,UAAA,aAAA,CAAc,KAAK,CAAA;AAAA,QACrB,CAAA,MAAA,IAAW,SAAS,aAAA,EAAe;AACjC,UAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,QACxB,CAAA,MAAA,IAAW,IAAA,KAAS,WAAA,IAAe,IAAA,KAAS,MAAA,EAAQ;AAKlD,UAAA,MAAM,MAAA,GAAS,qBAAqB,KAAK,CAAA;AACzC,UAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,YAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACzC,YAAA,MAAM,KACJ,OAAQ,KAAA,CAA6B,IAAA,KAAS,QAAA,GACzC,MAA2B,IAAA,GAC5B,IAAA;AACN,YAAA,IAAI,EAAA,KAAO,UAAA,IAAc,IAAA,KAAS,WAAA,EAAa;AAC7C,cAAA,aAAA,CAAc;AAAA,gBACZ,IAAA,EAAM,UAAA;AAAA,gBACN,aAAc,KAAA,CAA0B,EAAA;AAAA,gBACxC,MAAO,KAAA,CAA4B,IAAA;AAAA,gBACnC,OAAQ,KAAA,CAA8B;AAAA,eACrB,CAAA;AAAA,YACrB,CAAA,MAAA,IAAW,EAAA,KAAO,aAAA,IAAiB,IAAA,KAAS,MAAA,EAAQ;AAClD,cAAA,gBAAA,CAAiB;AAAA,gBACf,IAAA,EAAM,aAAA;AAAA,gBACN,aAAc,KAAA,CAAmC,WAAA;AAAA,gBACjD,SAAU,KAAA,CAAgC,OAAA;AAAA,gBAC1C,UAAW,KAAA,CAAiC;AAAA,eAC3B,CAAA;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAA,SAAE;AAIA,IAAA,KAAA,MAAW,GAAG,KAAK,CAAA,IAAK,IAAA,EAAM;AAC5B,MAAA,eAAA,CAAgB,KAAA,CAAM,QAAQ,uCAAuC,CAAA;AACrE,MAAA,IAAI,MAAM,UAAA,EAAY;AACpB,QAAA,iBAAA,GAAoB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,iBAAA,GAAoB,CAAC,CAAA;AAAA,MACvD;AAAA,IACF;AACA,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,cAAA,GAAiB,IAAA;AAAA,EACnB;AACF;AAQA,SAASA,gBAAAA,CAAgB,KAAc,WAAA,EAA2B;AAChE,EAAA,IAAI;AACF,IAAAL,wBAAA,CAAO,GAAA,EAAK,EAAE,WAAA,EAAa,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;;;AClRAb,8BAAA,EAAA;AAgBO,SAAS,cAAA,CACd,WACA,aAAA,EAC+C;AAC/C,EAAA,IAAII,qCAAA,OAA0B,IAAA,EAAM;AAClC,IAAA,OAAO,aAAA,EAAc;AAAA,EACvB;AAEA,EAAA,OAAA,CAAQ,gBAAgB,UAAA,GAA4D;AAClF,IAAA,MAAM,QAAqB,EAAC;AAC5B,IAAA,IAAI,MAAA,GAA8B,IAAA;AAClC,IAAA,MAAM,WAAA,GAAc,MAClB,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AACvB,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,MAAY;AACnB,UAAA,MAAA,GAAS,IAAA;AACT,UAAA,OAAA,EAAQ;AAAA,QACV,CAAA;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAEH,IAAA,MAAM,aAAaC,0BAAA,CAAU,EAAE,SAAA,EAAU,EAAG,OAAO,SAAA,KAAc;AAC/D,MAAA,IAAI;AACF,QAAA,WAAA,MAAiB,KAAA,IAAS,eAAc,EAAG;AACzC,UAAA,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAO,CAAA;AAC1C,UAAA,MAAA,IAAS;AAAA,QACX;AACA,QAAA,SAAA,CAAU,WAAW,IAAI,CAAA;AAAA,MAC3B,SAAS,GAAA,EAAK;AACZ,QAAA,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,KAAK,CAAA;AACxC,QAAA,MAAA,IAAS;AACT,QAAA,MAAM,GAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAC1B,QAAA,MAAA,IAAS;AAAA,MACX;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAGD,IAAA,UAAA,CAAW,MAAM,MAAM;AAAA,IAEvB,CAAC,CAAA;AAED,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,MAAM,WAAA,EAAY;AAC1C,MAAA,MAAM,IAAA,GAAO,MAAM,KAAA,EAAM;AACzB,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,QAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACb,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,OAAA,EAAS;AAChC,QAAA,MAAM,IAAA,CAAK,KAAA;AAAA,MACb,CAAA,MAAO;AACL,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,GAAG;AACL;;;ACrBA,IAAM,OAAA,mBAAU,MAAA,CAAO,GAAA,CAAI,gCAAgC,CAAA;AAGpD,SAAS,0BAA0B,EAAA,EAAsB;AAC9D,EAAA,OAAO,OAAO,EAAA,KAAO,UAAA,IAAe,EAAA,CAA0C,OAAO,CAAA,KAAM,IAAA;AAC7F;AAkBO,SAAS,oBAAA,CACd,KAAA,EACA,OAAA,GAAuC,EAAC,EACrC;AACH,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,IAAc,yBAAA,CAA0B,KAAK,GAAG,OAAO,KAAA;AAE5E,EAAA,MAAM,MAAA,GAAS,SAAS,WAAA,CACtB,MAAA,EACsB;AAGtB,IAAA,MAAM,IAAA,GAAO,MAAM,MAAM,CAAA;AAEzB,IAAA,MAAM,KAAA,GACJ,OAAO,MAAA,EAAQ,OAAA,EAAS,UAAU,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,YAAA;AAI9E,IAAA,IAAI,MAAA,GAA2C,IAAA;AAC/C,IAAA,IAAI,MAAA,GAAS,KAAA;AAEb,IAAA,gBAAgB,aAAA,GAA+D;AAC7E,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAA,GAAS,IAAA;AACT,QAAA,MAAA,GAASF,+BAAA,CAAc;AAAA,UACrB,OAAA,EAAS,qBAAA;AAAA,UACT,SAAA,EAAW,QAAQ,gBAAA,IAAoB,kBAAA;AAAA,UACvC;AAAA,SACD,CAAA;AAAA,MACH;AACA,MAAA,IAAI;AACF,QAAA,WAAA,MAAiB,WAAW,IAAA,EAAM;AAChC,UAAA,MAAM,OAAA;AAAA,QACR;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,MAAA,EAAQ,IAAI,GAAG,CAAA;AACf,QAAA,MAAA,GAAS,IAAA;AACT,QAAA,MAAM,GAAA;AAAA,MACR;AACA,MAAA,MAAA,EAAQ,GAAA,EAAI;AACZ,MAAA,MAAA,GAAS,IAAA;AAAA,IACX;AAEA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,mBAAmB,OAAA,CAAQ,iBAAA;AAAA,MAC3B,oBAAoB,OAAA,CAAQ;AAAA,KAC9B;AAOA,IAAA,MAAM,YAAA,GAAe,cAAA;AAAA,MACnB,QAAQ,gBAAA,IAAoB,kBAAA;AAAA,MAC5B,MACE,eAAA;AAAA,QACE,mBAAmB,aAAA,EAAc,EAAG,EAAE,aAAA,EAAe,OAAO,CAAA;AAAA,QAC5D;AAAA;AACF,KACJ;AAEA,IAAA,OAAO,IAAI,MAAM,IAAA,EAAM;AAAA,MACrB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,QAAA,IAAI,IAAA,KAAS,MAAA,CAAO,aAAA,EAAe,OAAO,MAAM,YAAA;AAChD,QAAA,IAAI,IAAA,KAAS,MAAA,IAAU,IAAA,KAAS,QAAA,IAAY,SAAS,OAAA,EAAS;AAC5D,UAAA,MAAM,EAAA,GAAK,aAAa,IAAmC,CAAA;AAC3D,UAAA,OAAO,OAAO,EAAA,KAAO,UAAA,GAAa,EAAA,CAAG,IAAA,CAAK,YAAY,CAAA,GAAI,EAAA;AAAA,QAC5D;AAGA,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAChD,QAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA;AAAA,MAC5D;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,OAAA,EAAS,EAAE,OAAO,IAAA,EAAM,UAAA,EAAY,OAAO,CAAA;AACzE,EAAA,OAAO,MAAA;AACT;;;AChFA,IAAM,kBAAA,mBAAqB,MAAA,CAAO,GAAA,CAAI,wCAAwC,CAAA;AAyBvE,SAAS,yCAAA,CACd,MAAA,EACA,OAAA,GAAsC,EAAC,EACT;AAE9B,EAAA,MAAM,QAAA,GAAY,OAA6B,kBAAkB,CAAA;AACjE,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GAAsC;AAAA,IAC1C,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,IAC1B,cAAc,OAAA,CAAQ;AAAA,GACxB;AACA,EAAA,MAAM,OAAA,GAAqC;AAAA,IACzC,eAAe,OAAA,CAAQ;AAAA,GACzB;AACA,EAAA,MAAM,QAAA,GAAmC;AAAA,IACvC,mBAAmB,OAAA,CAAQ,iBAAA;AAAA,IAC3B,oBAAoB,OAAA,CAAQ;AAAA,GAC9B;AACA,EAAA,MAAM,QAAA,GAA8C;AAAA,IAClD,gBAAgB,OAAA,CAAQ;AAAA,GAC1B;AAGA,EAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,MAAA,EAAQ,QAAQ,CAAA;AAKxD,EAAA,MAAM,QAAA,GAAW,IAAI,KAAA,CAAM,YAAA,EAAc;AAAA,IACvC,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA,MAAM,UAAA,GAAc,MAAA,CAA+B,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAKpE,QAAA,OAAO,SAAS,aAAA,CACd,MAAA,EACA,WAAA,EAC+B;AAC/B,UAAA,gBAAgB,OAAA,GAAyD;AACvE,YAAA,MAAM,GAAA,GAAM,UAAA,CAAW,MAAA,EAAQ,WAAW,CAAA;AAC1C,YAAA,MAAM,IAAA,GACJ,GAAA,YAAe,OAAA,GAAU,MAAM,GAAA,GAAM,GAAA;AAOvC,YAAA,MAAM,SAAA,GAAY,kBAAA,CAAmB,IAAA,EAAM,OAAO,CAAA;AAClD,YAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,SAAA,EAAW,QAAQ,CAAA;AACtD,YAAA,WAAA,MAAiB,SAAS,UAAA,EAAY;AACpC,cAAA,MAAM,KAAA;AAAA,YACR;AAAA,UACF;AACA,UAAA,OAAO,OAAA,EAAQ;AAAA,QACjB,CAAA;AAAA,MACF;AACA,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAChD,MAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC/B,QAAA,OAAQ,KAAA,CAAuC,KAAK,MAAM,CAAA;AAAA,MAC5D;AACA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACD,CAAA;AAGD,EAAA,MAAM,gBAAA,GAAmB,0BAAA,CAA2B,MAAA,EAAQ,QAAQ,CAAA;AAEpE,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,MAAM,UAAU,MAAY;AAC1B,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,QAAA,GAAW,IAAA;AACX,IAAA,IAAI;AACF,MAAA,gBAAA,EAAiB;AAAA,IACnB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,MAAA,GAAuC;AAAA,IAC3C,MAAA,EAAQ,QAAA;AAAA,IACR;AAAA,GACF;AAKA,EAAA,IAAI;AACF,IAAC,MAAA,CAA6B,kBAAkB,CAAA,GAC9C,MAAA;AAAA,EACJ,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,OAAO,MAAA;AACT","file":"index.cjs","sourcesContent":["/**\n * `@morsehq-dev/sdk/anthropic-agent-sdk` — Claude Agent SDK client wrapper.\n *\n * This module implements ONLY the outer-span (agent) instrumentation around\n * `ClaudeSDKClient.query()`. Sibling files (`llm-instrumentation.ts`,\n * `tool-and-subagent.ts`, `hook-instrumentation.ts`) layer the inner llm /\n * tool / hook spans; Wave 3-A composes them via `src/anthropic-agent-sdk/index.ts`.\n *\n * Two entry points (mirroring `src/anthropic/index.ts`):\n *\n * - `wrapClaudeAgentSDK(client)` — returns a Proxy-of-Proxy that\n * intercepts `query()` and opens an outer `agent` span around the async\n * iteration. The rest of the client surface (`on`, `off`, anything\n * else) is forwarded unchanged.\n *\n * - `instrumentClaudeAgentSDK(clientOrOptions, options?)` — two-mode\n * installer. With a client, equivalent to `wrapClaudeAgentSDK`. With\n * `{ claudeAgentSdkModule }`, best-effort patches\n * `ClaudeSDKClient.prototype.query`. Always returns the wrapped client\n * or a boolean; never throws.\n *\n * All telemetry paths are wrapped in `absorbErrors*` — a tracing failure\n * MUST NEVER break the customer's `query()`.\n */\n\nimport { absorbErrorsAsync } from \"../_internal/errors\";\nimport { getActiveTraceState, runAsync as _runAsync } from \"../_internal/tracing\";\nimport { emitAgentSpan } from \"../_agent-sdk-common/span-emitter\";\n\nimport type { ClaudeSDKClientLike, ClaudeSDKQueryOptions, SDKMessageLike } from \"./types\";\n\n/* ------------------------------------------------------------------------ */\n/* Module-level install sentinels */\n/* ------------------------------------------------------------------------ */\n\nconst WRAPPED_CLIENT = Symbol.for(\"morse.anthropic-agent-sdk.wrapped\");\n/* ------------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------------ */\n\nexport interface WrapClaudeAgentSDKOptions {\n /** Override the agent name on the outer span. Default: `\"claude-agent-sdk\"`. */\n defaultAgentName?: string;\n /** Override the model name passed to the outer span metadata. Default: inferred. */\n defaultModel?: string;\n}\n\n/**\n * Wrap a `ClaudeSDKClient` so each `query()` call opens an outer `agent`\n * span (via `emitAgentSpan` from `_agent-sdk-common`). The rest of the\n * client's surface is forwarded unchanged via a Proxy. Idempotent.\n *\n * THIS WRAPPER ONLY HANDLES THE OUTER AGENT SPAN. llm / tool / hook spans\n * are layered by sibling files in the same directory and composed via\n * `src/anthropic-agent-sdk/index.ts` in Wave 3.\n */\nexport function wrapClaudeAgentSDK<C extends ClaudeSDKClientLike>(\n client: C,\n options: WrapClaudeAgentSDKOptions = {},\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\n const originalQuery = client.query?.bind(client);\n if (typeof originalQuery !== \"function\") return client;\n\n const patchedQuery = buildPatchedQuery(\n originalQuery as (\n prompt: unknown,\n options?: ClaudeSDKQueryOptions,\n ) => AsyncIterable<SDKMessageLike> | Promise<AsyncIterable<SDKMessageLike>>,\n options,\n );\n\n const wrapper = new Proxy(client, {\n get(target, prop, receiver) {\n if (prop === WRAPPED_CLIENT) return true;\n if (prop === \"query\") return patchedQuery;\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") {\n return (value as (...a: unknown[]) => unknown).bind(target);\n }\n return value;\n },\n });\n\n return wrapper as C;\n}\n\n/**\n * Instance wrapper. This once had a second mode that patched\n * `ClaudeSDKClient.prototype.query` on the module. Deleted in MHQ-936 —\n * neither half of it could ever work in TypeScript:\n *\n * - `ClaudeSDKClient` is the *Python* package's API. The TS package has\n * never exported it (checked at 0.1.77 and 0.3.223), so the carrier\n * lookup always returned null and the install silently no-opped.\n * - Patching the real `query` export is impossible regardless: it is\n * read-only and non-configurable, so assignment throws — the same wall\n * `ai` hit in MHQ-758.\n *\n * For the real package use `wrapClaudeAgentQuery(query)` (`./query-wrapper.ts`).\n * This remains for any object exposing a `.query` method.\n *\n * Never throws; returns the wrapped client, or a falsy value otherwise.\n */\nexport const instrumentClaudeAgentSDK: (\n client?: ClaudeSDKClientLike,\n maybeOptions?: WrapClaudeAgentSDKOptions,\n) => Promise<unknown | undefined> = absorbErrorsAsync(\n async (\n client: ClaudeSDKClientLike | undefined = undefined,\n maybeOptions: WrapClaudeAgentSDKOptions = {},\n ): Promise<unknown> => {\n if (client && isClient(client)) return wrapClaudeAgentSDK(client, maybeOptions);\n return false;\n },\n { fingerprint: \"morse.adapters.anthropic-agent-sdk.install\" },\n);\n\n/** True when a wrapped Claude Agent SDK client is passed in. */\nexport function isClaudeAgentSDKWrapped(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 ClaudeSDKClientLike {\n if (!x || typeof x !== \"object\") return false;\n const q = (x as { query?: unknown }).query;\n return typeof q === \"function\";\n}\n\n/* ------------------------------------------------------------------------ */\n/* Internals — wrapper that opens the outer `agent` span */\n/* ------------------------------------------------------------------------ */\n\nfunction buildPatchedQuery(\n original: (\n prompt: unknown,\n options?: ClaudeSDKQueryOptions,\n ) => AsyncIterable<SDKMessageLike> | Promise<AsyncIterable<SDKMessageLike>>,\n options: WrapClaudeAgentSDKOptions,\n): (prompt: unknown, options?: ClaudeSDKQueryOptions) => AsyncIterable<SDKMessageLike> {\n const defaultAgentName = options.defaultAgentName ?? \"claude-agent-sdk\";\n const defaultModel = options.defaultModel;\n\n return function patchedQuery(\n this: unknown,\n prompt: unknown,\n callOptions?: ClaudeSDKQueryOptions,\n ): AsyncIterable<SDKMessageLike> {\n // Capture `this` for the inner generator via Reflect.apply-style closure.\n const boundOriginal = (\n p: unknown,\n o?: ClaudeSDKQueryOptions,\n ): AsyncIterable<SDKMessageLike> | Promise<AsyncIterable<SDKMessageLike>> =>\n original.call(this, p, o);\n const model =\n (callOptions && typeof callOptions.model === \"string\" ? callOptions.model : undefined) ??\n defaultModel;\n\n async function* iterateInTrace(): AsyncGenerator<SDKMessageLike, void, unknown> {\n // Open the outer agent span BEFORE invoking the original query so the\n // model/prompt are visible to any caller that introspects the span\n // mid-iteration.\n const handle = emitAgentSpan({\n adapter: \"anthropic-agent-sdk\",\n agentName: defaultAgentName,\n model,\n });\n let iter: AsyncIterable<SDKMessageLike>;\n try {\n const ret = boundOriginal(prompt, callOptions);\n iter = (ret instanceof Promise ? await ret : ret) as AsyncIterable<SDKMessageLike>;\n } catch (err) {\n handle?.end(err);\n throw err;\n }\n try {\n for await (const event of iter) {\n yield event;\n }\n } catch (err) {\n handle?.end(err);\n throw err;\n }\n handle?.end();\n }\n\n // If we're already inside an active trace, the agent span attaches as a\n // child of the existing root. Otherwise, open a fresh trace so the span\n // has a parent — without this, `emitAgentSpan` would no-op (return null)\n // and the customer would see no telemetry.\n if (getActiveTraceState() !== null) {\n return iterateInTrace();\n }\n\n // Wrap in a fresh trace. We can't simply `return _runAsync(...)` because\n // the trace must drain on iterator completion — so we tee the events out\n // via a passthrough generator and let _runAsync own the trace lifecycle.\n return (async function* outerTrace(): AsyncGenerator<SDKMessageLike, void, unknown> {\n // Buffer events into a queue and yield as they arrive. We use a\n // simple promise-based handoff to bridge the _runAsync callback's\n // for-await loop into our generator's consumer.\n const queue: Array<\n | { kind: \"value\"; value: SDKMessageLike }\n | { kind: \"error\"; error: unknown }\n | { kind: \"end\" }\n > = [];\n let notify: (() => void) | null = null;\n const waitForItem = (): Promise<void> =>\n new Promise((resolve) => {\n if (queue.length > 0) {\n resolve();\n } else {\n notify = (): void => {\n notify = null;\n resolve();\n };\n }\n });\n\n // Drive the inner generator inside _runAsync so the trace lifecycle\n // is bound to the iteration's completion.\n const runPromise = _runAsync({ agentName: defaultAgentName }, async (runHandle) => {\n try {\n for await (const event of iterateInTrace()) {\n queue.push({ kind: \"value\", value: event });\n notify?.();\n }\n runHandle.setOutcome(true);\n } catch (err) {\n queue.push({ kind: \"error\", error: err });\n notify?.();\n throw err;\n } finally {\n queue.push({ kind: \"end\" });\n notify?.();\n }\n return null;\n });\n // _runAsync absorbs upstream errors? No — runAsync rethrows. Catch so\n // the unhandled rejection doesn't leak; we already enqueued the error.\n runPromise.catch(() => {\n /* already handled via queue */\n });\n\n while (true) {\n if (queue.length === 0) await waitForItem();\n const item = queue.shift();\n if (!item) continue;\n if (item.kind === \"value\") {\n yield item.value;\n } else if (item.kind === \"error\") {\n // Drain & rethrow.\n throw item.error;\n } else {\n return;\n }\n }\n })();\n };\n}\n","/**\n * Context propagation helpers shared by the agent-SDK adapters\n * (Anthropic Agent SDK, OpenAI Agents SDK, LangGraph).\n *\n * The default `startSpan()` parent-linkage strategy in `_internal/tracing`\n * always picks the top of the active `spanStack` as the parent. That\n * works for synchronous, well-nested workflows but breaks for two common\n * agent-SDK patterns:\n *\n * 1. **Fan-out** — Anthropic's Task tool and OpenAI's handoffs spawn N\n * children that run concurrently. The default top-of-stack lookup\n * sees whichever sibling started most recently, not the shared\n * parent agent span. We capture the parent ID at fan-out time and\n * pin every child's `parent_span_id` to that snapshot.\n *\n * 2. **Hook siblings** — `pre_tool` / `post_tool` hooks logically sit\n * next to the `tool` span they bracket, not nested under it. We\n * look up the tool span (open or completed) and reuse its\n * `parent_span_id` for the hook span.\n *\n * All public functions are wrapped in `absorbErrorsSync` so a malformed\n * snapshot or unexpected runtime state can never escape into the host\n * application.\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { SpanData, SpanType } from \"../_internal/spans\";\nimport {\n getActiveTraceState,\n startSpan,\n type SpanHandle,\n type TraceState,\n} from \"../_internal/tracing\";\n\nexport interface ParentSnapshot {\n parentSpanId: string;\n traceId: string;\n}\n\nexport interface EmitWithPinnedParentOptions {\n name: string;\n type: SpanType;\n metadata?: Record<string, unknown>;\n snapshot: ParentSnapshot;\n}\n\nexport interface EmitAsToolSiblingOptions {\n name: string;\n type: SpanType;\n metadata?: Record<string, unknown>;\n toolSpanId: string;\n}\n\nexport interface TraceStateSnapshot {\n traceId: string;\n spanStack: ReadonlyArray<SpanData>;\n completedSpans: ReadonlyArray<SpanData>;\n}\n\n/**\n * Snapshot the current parent span (top of `spanStack`) so child spans\n * emitted later — possibly after the parent has moved off the stack —\n * can be linked explicitly via `parent_span_id`.\n *\n * Returns `null` if there is no active trace or the stack is empty.\n */\nexport const captureParentForFanOut = absorbErrorsSync(\n (): ParentSnapshot | null => {\n const state = getActiveTraceState();\n if (state === null) return null;\n const top = state.spanStack[state.spanStack.length - 1];\n if (!top) return null;\n return {\n parentSpanId: top.span_id,\n traceId: state.traceId,\n };\n },\n { fingerprint: \"agent-sdk-common.captureParentForFanOut\" },\n) as () => ParentSnapshot | null;\n\n/**\n * Emit a span linked to a previously captured parent (from\n * `captureParentForFanOut`). The span is started/ended via the normal\n * tracing lifecycle but its `parent_span_id` is forced to the snapshot\n * rather than the current top-of-stack.\n *\n * Returns `null` if there is no active trace or the snapshot's\n * `traceId` doesn't match the active trace.\n */\nexport const emitWithPinnedParent = absorbErrorsSync(\n (opts: EmitWithPinnedParentOptions): SpanHandle | null => {\n const state = getActiveTraceState();\n if (state === null) return null;\n const snap = opts.snapshot;\n if (!snap || snap.traceId !== state.traceId) return null;\n\n const handle = startSpan({\n name: opts.name,\n type: opts.type,\n metadata: opts.metadata,\n });\n if (handle === null) return null;\n handle.span.parent_span_id = snap.parentSpanId;\n return handle;\n },\n { fingerprint: \"agent-sdk-common.emitWithPinnedParent\" },\n) as (opts: EmitWithPinnedParentOptions) => SpanHandle | null;\n\nfunction findSpanById(state: TraceState, spanId: string): SpanData | undefined {\n for (let i = state.spanStack.length - 1; i >= 0; i--) {\n const s = state.spanStack[i];\n if (s && s.span_id === spanId) return s;\n }\n for (let i = state.completedSpans.length - 1; i >= 0; i--) {\n const s = state.completedSpans[i];\n if (s && s.span_id === spanId) return s;\n }\n return undefined;\n}\n\n/**\n * Emit a span as a sibling of a specific tool span — i.e. attach it to\n * the same parent as the tool, not nested inside the tool. Used by\n * `pre_tool` / `post_tool` hook spans.\n *\n * Looks up the tool span in `spanStack` (still open) then\n * `completedSpans` (already closed). Returns `null` if the tool span\n * cannot be found in the current trace.\n */\nexport const emitAsToolSibling = absorbErrorsSync(\n (opts: EmitAsToolSiblingOptions): SpanHandle | null => {\n const state = getActiveTraceState();\n if (state === null) return null;\n const tool = findSpanById(state, opts.toolSpanId);\n if (!tool) return null;\n\n const handle = startSpan({\n name: opts.name,\n type: opts.type,\n metadata: opts.metadata,\n });\n if (handle === null) return null;\n // `parent_span_id` may be undefined if the tool itself was a root\n // child of the trace's agent span only — propagate that as-is.\n handle.span.parent_span_id = tool.parent_span_id;\n return handle;\n },\n { fingerprint: \"agent-sdk-common.emitAsToolSibling\" },\n) as (opts: EmitAsToolSiblingOptions) => SpanHandle | null;\n\n/**\n * Read-only inspector for adapter-side debugging and tests. Returns a\n * shallow copy of the current `spanStack` and `completedSpans` plus the\n * active `traceId`, or `null` if there is no active trace.\n */\nexport const inspectTraceState = absorbErrorsSync(\n (): TraceStateSnapshot | null => {\n const state = getActiveTraceState();\n if (state === null) return null;\n return {\n traceId: state.traceId,\n spanStack: state.spanStack.slice(),\n completedSpans: state.completedSpans.slice(),\n };\n },\n { fingerprint: \"agent-sdk-common.inspectTraceState\" },\n) as () => TraceStateSnapshot | null;\n","/**\n * `anthropic-agent-sdk/hook-instrumentation.ts` — W2-A.4\n *\n * Subscribes to `ClaudeSDKClient`'s `\"hook\"` event channel and emits one\n * `hook`-shaped span (wire `type=tool` + `metadata.tool_kind=\"hook\"`) per\n * fired hook. Hooks logically bracket a tool invocation (`pre_tool` /\n * `post_tool`) or react to a failure (`on_error`); we therefore emit them\n * as SIBLINGS of the wrapped tool span (sharing the tool's parent), not\n * nested under it.\n *\n * When the caller provides a `toolSpanLookup` (typically wired in by the\n * tool-and-subagent W2-A.3 integration), we use `emitAsToolSibling` so\n * the hook attaches to the tool's parent. When no lookup is provided —\n * or the lookup returns null for an unknown tool_use_id — we fall back\n * to `emitHookSpan` which attaches to whatever parent is on top of the\n * active span stack.\n *\n * Hooks are synchronous from our perspective: we emit and immediately\n * close the span. When the hook payload reports `duration_ms`, it lands\n * in `metadata.hook.duration_ms` (the span's own `duration_ms` reflects\n * our emit/close roundtrip, which is effectively zero).\n *\n * Every emission is wrapped in `absorbErrorsSync` per the foundational\n * \"telemetry must never break the host\" guarantee.\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport { emitAsToolSibling } from \"../_agent-sdk-common/context-propagation\";\nimport { emitHookSpan } from \"../_agent-sdk-common/span-emitter\";\nimport type { ClaudeSDKClientLike } from \"./types\";\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\nexport interface InstallHookInstrumentationOptions {\n /**\n * Map of toolUseId → spanId for the currently-open tool spans.\n * Provided by W2-A.3 (tool-and-subagent.ts) when the integration layer\n * composes both. When omitted, hook spans are emitted without sibling\n * linkage (they attach to whatever parent is on top of the stack).\n */\n toolSpanLookup?: (toolUseId: string) => string | null;\n}\n\nexport interface HookEventLike {\n /** Hook name (user-defined identifier from their hook registration). */\n name: string;\n /** Hook kind. */\n kind: \"pre_tool\" | \"post_tool\" | \"on_error\";\n /** When known, the tool_use_id this hook wraps (for sibling linkage). */\n tool_use_id?: string;\n /** Duration in ms reported by the hook callback, if available. */\n duration_ms?: number;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Internal helpers */\n/* ------------------------------------------------------------------------ */\n\nfunction isHookEvent(payload: unknown): payload is HookEventLike {\n if (payload === null || typeof payload !== \"object\") return false;\n const obj = payload as Record<string, unknown>;\n if (typeof obj.name !== \"string\" || obj.name.length === 0) return false;\n const kind = obj.kind;\n if (kind !== \"pre_tool\" && kind !== \"post_tool\" && kind !== \"on_error\") return false;\n return true;\n}\n\nconst _handleHookEvent = (\n payload: unknown,\n options: InstallHookInstrumentationOptions | undefined,\n): void => {\n if (!isHookEvent(payload)) return;\n const { name, kind } = payload;\n const durationMs =\n typeof payload.duration_ms === \"number\" && Number.isFinite(payload.duration_ms)\n ? payload.duration_ms\n : undefined;\n const toolUseId =\n typeof payload.tool_use_id === \"string\" && payload.tool_use_id.length > 0\n ? payload.tool_use_id\n : undefined;\n\n const lookup = options?.toolSpanLookup;\n const toolSpanId =\n toolUseId !== undefined && typeof lookup === \"function\" ? lookup(toolUseId) : null;\n\n if (toolSpanId !== null && toolSpanId !== undefined && toolSpanId.length > 0) {\n const hookMeta: Record<string, unknown> = { name, kind };\n if (durationMs !== undefined) hookMeta.duration_ms = durationMs;\n const handle = emitAsToolSibling({\n name: `anthropic-agent-sdk.hook.${kind}.${name}`,\n type: \"tool\",\n metadata: {\n adapter: \"anthropic-agent-sdk\",\n tool_kind: \"hook\",\n hook: hookMeta,\n },\n toolSpanId,\n });\n // `emitAsToolSibling` may return null when there's no active trace or\n // the tool span can't be found in the current trace. In the latter\n // case we fall back to a plain hook span so the event isn't dropped.\n if (handle !== null && handle !== undefined) {\n handle.end();\n return;\n }\n }\n\n const fallback = emitHookSpan({\n adapter: \"anthropic-agent-sdk\",\n hookName: name,\n hookKind: kind,\n durationMs,\n });\n if (fallback !== null && fallback !== undefined) {\n fallback.end();\n }\n};\n\nconst handleHookEvent: (\n payload: unknown,\n options: InstallHookInstrumentationOptions | undefined,\n) => void = absorbErrorsSync(_handleHookEvent, {\n fingerprint: \"morse.anthropic-agent-sdk.hook-instrumentation.handle\",\n}) as (payload: unknown, options: InstallHookInstrumentationOptions | undefined) => void;\n\n/* ------------------------------------------------------------------------ */\n/* Public installer */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Subscribe to the client's `\"hook\"` event channel and emit one hook\n * span per fired hook. Returns an unsubscribe function.\n *\n * If `client.on` is not a function (the user didn't wire hooks at all),\n * returns a no-op unsubscriber.\n */\nexport function installHookInstrumentation(\n client: ClaudeSDKClientLike,\n options?: InstallHookInstrumentationOptions,\n): () => void {\n if (client === null || typeof client !== \"object\" || typeof client.on !== \"function\") {\n return () => {\n /* no-op */\n };\n }\n\n const listener = (payload: unknown): void => {\n handleHookEvent(payload, options);\n };\n\n try {\n client.on(\"hook\", listener);\n } catch {\n return () => {\n /* no-op */\n };\n }\n\n return (): void => {\n try {\n if (typeof client.off === \"function\") {\n client.off(\"hook\", listener);\n }\n } catch {\n /* swallow — telemetry must never throw at the caller */\n }\n };\n}\n","/**\n * `anthropic-agent-sdk/llm-instrumentation.ts` — taps `message_start` /\n * `message_stop` event pairs in a Claude Agent SDK stream and emits one\n * `llm` span per pair.\n *\n * The wrapper is a passthrough generator: every event is yielded to the\n * downstream caller unchanged. Span emission is a side-effect.\n *\n * One agent run can contain MULTIPLE llm calls (the agent loops on\n * tool-use → tool-result), so we emit one span PER message_start /\n * message_stop pair, not one for the whole stream.\n *\n * `context_segments` are extracted via `extractAnthropicSegments` from the\n * low-level Anthropic adapter (`../anthropic`) when the caller provides the\n * original request params. We DO NOT duplicate that logic here.\n *\n * Sibling W2-A files in this directory handle agent / tool / subagent /\n * hook spans separately.\n */\n\nimport { extractAnthropicSegments } from \"../anthropic\";\nimport { emitLlmSpan } from \"../_agent-sdk-common/span-emitter\";\nimport { calculateCost } from \"../_internal/pricing\";\nimport type { SpanHandle } from \"../_internal/tracing\";\n\nimport type {\n AnthropicMessageCreateParams,\n AnthropicMessageResponse,\n SDKMessageLike,\n} from \"./types\";\nimport { report } from \"../_internal/diagnostics\";\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\nexport interface InstrumentLlmCallsOptions {\n /** Override the model name when the SDK doesn't report one on `message_start`. */\n fallbackModel?: string;\n /**\n * Original request params (the prompt + messages + tools the user passed\n * to `query()`). When provided, allows `extractAnthropicSegments` to\n * build `context_segments`. When omitted, `context_segments` is left\n * unset on the emitted span.\n */\n requestParams?: AnthropicMessageCreateParams;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------------ */\n\ntype UsageBlock = NonNullable<NonNullable<SDKMessageLike[\"message\"]>[\"usage\"]>;\n\n/**\n * Read total input tokens from a `usage` block. We sum the regular\n * `input_tokens` with both cache-related counters because, per the\n * Anthropic Messages API, those represent input tokens that were either\n * written to or read from the prompt cache and are NOT included in\n * `input_tokens` itself.\n *\n * Returns `undefined` if NO input-related counter is present at all.\n */\nfunction readInputTokens(usage: UsageBlock | undefined): number | undefined {\n if (usage === undefined || usage === null || typeof usage !== \"object\") return undefined;\n const base =\n typeof usage.input_tokens === \"number\" && Number.isFinite(usage.input_tokens)\n ? usage.input_tokens\n : 0;\n const cacheWrite =\n typeof usage.cache_creation_input_tokens === \"number\" &&\n Number.isFinite(usage.cache_creation_input_tokens)\n ? usage.cache_creation_input_tokens\n : 0;\n const cacheRead =\n typeof usage.cache_read_input_tokens === \"number\" &&\n Number.isFinite(usage.cache_read_input_tokens)\n ? usage.cache_read_input_tokens\n : 0;\n if (\n usage.input_tokens === undefined &&\n usage.cache_creation_input_tokens === undefined &&\n usage.cache_read_input_tokens === undefined\n ) {\n return undefined;\n }\n return base + cacheWrite + cacheRead;\n}\n\nfunction readOutputTokens(usage: UsageBlock | undefined): number | undefined {\n if (usage === undefined || usage === null || typeof usage !== \"object\") return undefined;\n if (typeof usage.output_tokens === \"number\" && Number.isFinite(usage.output_tokens)) {\n return usage.output_tokens;\n }\n return undefined;\n}\n\nfunction readCacheWriteTokens(usage: UsageBlock | undefined): number | undefined {\n if (usage === undefined || usage === null || typeof usage !== \"object\") return undefined;\n if (\n typeof usage.cache_creation_input_tokens === \"number\" &&\n Number.isFinite(usage.cache_creation_input_tokens) &&\n usage.cache_creation_input_tokens > 0\n ) {\n return usage.cache_creation_input_tokens;\n }\n return undefined;\n}\n\nfunction readCachedInputTokens(usage: UsageBlock | undefined): number | undefined {\n if (usage === undefined || usage === null || typeof usage !== \"object\") return undefined;\n if (\n typeof usage.cache_read_input_tokens === \"number\" &&\n Number.isFinite(usage.cache_read_input_tokens) &&\n usage.cache_read_input_tokens > 0\n ) {\n return usage.cache_read_input_tokens;\n }\n return undefined;\n}\n\n/**\n * Compute and set `handle.span.cost_usd` from the pricing table when the\n * model + token counts are known and no cost has already been set.\n * Mirrors the Python adapter's `calculate_cost(...)` call after usage\n * extraction.\n */\nfunction applyCost(\n handle: SpanHandle,\n model: string,\n inputTokens: number | undefined,\n outputTokens: number | undefined,\n cacheWriteTokens: number | undefined,\n cachedInputTokens: number | undefined,\n): void {\n if (handle.span.cost_usd !== undefined) return;\n if (inputTokens === undefined && outputTokens === undefined) return;\n const cost = calculateCost({\n inputTokens: inputTokens ?? 0,\n outputTokens: outputTokens ?? 0,\n model,\n cachedInputTokens: cachedInputTokens ?? 0,\n cacheWriteTokens: cacheWriteTokens ?? 0,\n });\n if (cost !== undefined) handle.span.cost_usd = cost;\n}\n\n/**\n * Safely run a function; swallow any thrown errors. Telemetry must NEVER\n * surface failures to the caller's iteration.\n */\nfunction safe(fn: () => void): void {\n try {\n fn();\n } catch (err) {\n // intentionally swallowed\n reportSwallowed(err, \"morse.anthropic_agent_sdk.llm_instrumentation\");\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* instrumentLlmCalls */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Wrap an async iterable of `SDKMessageLike` events: pass each event through\n * unchanged, but tap `message_start` / `message_stop` pairs and emit one\n * `llm` span per pair.\n *\n * Behaviour:\n *\n * - The span opens at `message_start` (model is read from `event.message.model`\n * or falls back to `options.fallbackModel`).\n * - Token usage is read from `event.message.usage` on `message_stop` —\n * the start-event usage is only partial. `input_tokens` sums\n * `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`.\n * - If `requestParams` is provided, `context_segments` is populated via\n * `extractAnthropicSegments(requestParams, response)`.\n * - Orphan `message_stop` events (with no preceding start) are tolerated:\n * no span, no error.\n * - If the iterator ends with an open span (a start without a matching\n * stop), the span is closed as failed.\n * - All telemetry is wrapped in try/catch — it MUST NOT break iteration.\n */\nexport async function* instrumentLlmCalls(\n events: AsyncIterable<SDKMessageLike>,\n options?: InstrumentLlmCallsOptions,\n): AsyncIterable<SDKMessageLike> {\n let openSpan: SpanHandle | null = null;\n const fallbackModel = options?.fallbackModel;\n const requestParams = options?.requestParams;\n\n try {\n for await (const event of events) {\n const eventType = typeof event?.type === \"string\" ? event.type : \"\";\n\n // Real Claude Agent SDK shape: type=`assistant` events carry the full\n // assistant message (one per assistant turn). Each maps to one `llm`\n // span. Mock-shape `message_start`/`message_stop` is still handled\n // below for the unit-test fixtures.\n if (eventType === \"assistant\" && event.message) {\n safe(() => {\n // Close any prior open span — should be rare; assistant events\n // are non-overlapping turns.\n if (openSpan !== null) {\n openSpan.end();\n openSpan = null;\n }\n const reportedModel =\n typeof event.message?.model === \"string\" && event.message.model.length > 0\n ? event.message.model\n : undefined;\n const model = reportedModel ?? fallbackModel;\n if (!model) return;\n const handle = emitLlmSpan({ adapter: \"anthropic-agent-sdk\", model });\n if (!handle) return;\n const usage = event.message?.usage;\n const inputTokens = readInputTokens(usage);\n const outputTokens = readOutputTokens(usage);\n const cacheWriteTokens = readCacheWriteTokens(usage);\n const cachedInputTokens = readCachedInputTokens(usage);\n if (inputTokens !== undefined) handle.span.input_tokens = inputTokens;\n if (outputTokens !== undefined) handle.span.output_tokens = outputTokens;\n if (cacheWriteTokens !== undefined) handle.span.cache_write_tokens = cacheWriteTokens;\n if (cachedInputTokens !== undefined) handle.span.cached_input_tokens = cachedInputTokens;\n if (inputTokens !== undefined && outputTokens !== undefined) {\n handle.span.total_tokens = inputTokens + outputTokens;\n }\n applyCost(handle, model, inputTokens, outputTokens, cacheWriteTokens, cachedInputTokens);\n if (requestParams !== undefined) {\n try {\n const segments = extractAnthropicSegments(\n requestParams,\n event.message as AnthropicMessageResponse | undefined,\n );\n if (Array.isArray(segments) && segments.length > 0) {\n handle.span.context_segments = segments;\n }\n } catch {\n // segment extraction failed; leave context_segments unset\n }\n }\n handle.end();\n });\n } else if (eventType === \"message_start\") {\n // Open a new span. If there's already an open span (start without\n // stop), close the previous one as failed before opening the new one.\n safe(() => {\n if (openSpan !== null) {\n openSpan.end(new Error(\"morse: message_start without preceding message_stop\"));\n openSpan = null;\n }\n const reportedModel =\n typeof event.message?.model === \"string\" && event.message.model.length > 0\n ? event.message.model\n : undefined;\n const model = reportedModel ?? fallbackModel;\n if (model === undefined || model.length === 0) {\n // emitLlmSpan requires a model; skip silently.\n return;\n }\n openSpan = emitLlmSpan({\n adapter: \"anthropic-agent-sdk\",\n model,\n });\n });\n } else if (eventType === \"message_stop\") {\n if (openSpan !== null) {\n const handle: SpanHandle = openSpan;\n openSpan = null;\n safe(() => {\n const usage = event.message?.usage;\n const inputTokens = readInputTokens(usage);\n const outputTokens = readOutputTokens(usage);\n const cacheWriteTokens = readCacheWriteTokens(usage);\n const cachedInputTokens = readCachedInputTokens(usage);\n if (inputTokens !== undefined) {\n handle.span.input_tokens = inputTokens;\n }\n if (outputTokens !== undefined) {\n handle.span.output_tokens = outputTokens;\n }\n if (cacheWriteTokens !== undefined) {\n handle.span.cache_write_tokens = cacheWriteTokens;\n }\n if (cachedInputTokens !== undefined) {\n handle.span.cached_input_tokens = cachedInputTokens;\n }\n if (inputTokens !== undefined && outputTokens !== undefined) {\n handle.span.total_tokens = inputTokens + outputTokens;\n }\n if (handle.span.model) {\n applyCost(\n handle,\n handle.span.model,\n inputTokens,\n outputTokens,\n cacheWriteTokens,\n cachedInputTokens,\n );\n }\n if (requestParams !== undefined) {\n try {\n const segments = extractAnthropicSegments(\n requestParams,\n event.message as AnthropicMessageResponse | undefined,\n );\n if (Array.isArray(segments) && segments.length > 0) {\n handle.span.context_segments = segments;\n }\n } catch {\n // segment extraction failed; leave context_segments unset\n }\n }\n handle.end();\n });\n }\n // Orphan message_stop: ignore silently.\n }\n\n yield event;\n }\n } finally {\n // If iteration ended mid-message (start without stop), close the span as failed.\n if (openSpan !== null) {\n const handle: SpanHandle = openSpan;\n openSpan = null;\n safe(() => {\n handle.end(new Error(\"morse: iterator ended before message_stop\"));\n });\n }\n }\n}\n\n/**\n * Route a swallowed internal error to the diagnostics channel (SDKDIAG-07).\n *\n * Control flow is unchanged — the site still swallows, still returns the same\n * value. It is simply no longer invisible to us.\n */\nfunction reportSwallowed(err: unknown, fingerprint: string): void {\n try {\n report(err, { fingerprint });\n } catch {\n // Reporting must never break the swallow it is reporting on.\n }\n}\n","/**\n * `anthropic-agent-sdk/tool-and-subagent.ts` — instrument the `tool_use` /\n * `tool_result` event pairs emitted by `@anthropic-ai/claude-agent-sdk`'s\n * `ClaudeSDKClient.query()`.\n *\n * Phase 13 W2-A.3. The Anthropic Agent SDK streams a discriminated union\n * of `SDKMessage` events; this module wraps such a stream as a tap that\n * (a) passes every event through unchanged and (b) emits matching\n * Morse spans for tool invocations:\n *\n * - `tool_use` with `name !== \"Task\"` → `type=tool` span (held open\n * until the matching `tool_result` arrives, indexed by\n * `tool_use_id`).\n * - `tool_use` with `name === \"Task\"` → `type=agent` span carrying\n * `metadata.spawn_kind=\"subagent\"` (the canonical subagent.spawn\n * pattern from `_agent-sdk-common/span-emitter.ts`). The span is also\n * held open until the matching `tool_result`.\n * - `tool_result` → look up the open span by `tool_use_id`, stamp the\n * output summary + success flag, close with the appropriate status.\n *\n * **Task-tool fan-out parent pinning.** When the agent loop spawns more\n * than one subagent in the same turn it emits N Task `tool_use` blocks\n * sequentially before any matching `tool_result`. The default\n * top-of-stack parent lookup in `startSpan` would (incorrectly) make\n * later subagent spans children of the earlier siblings. We snapshot\n * the current top-of-stack at the first Task `tool_use` via\n * `captureParentForFanOut` and route every subagent span through\n * `emitWithPinnedParent` so they all share the same parent. The\n * snapshot is cleared once all open Task spans close (or the iterator\n * ends).\n *\n * **Error containment.** All emission is wrapped — telemetry MUST NOT\n * break iteration. If an internal helper throws, the event still flows\n * through to the caller and the offending span is best-effort skipped.\n *\n * **Orphan tolerance.** `tool_result` without a matching `tool_use` is\n * silently ignored. `tool_use` without a matching `tool_result` is\n * closed as failed when the iterator ends.\n */\n\nimport {\n captureParentForFanOut,\n emitWithPinnedParent,\n type ParentSnapshot,\n} from \"../_agent-sdk-common/context-propagation\";\nimport { summarizeToolInput, summarizeToolOutput } from \"../_agent-sdk-common/redaction\";\nimport { emitToolSpan } from \"../_agent-sdk-common/span-emitter\";\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport type { SDKMessageLike } from \"./types\";\nimport { report } from \"../_internal/diagnostics\";\n\nconst ADAPTER = \"anthropic-agent-sdk\" as const;\nconst TASK_TOOL_NAME = \"Task\";\n\nexport interface InstrumentToolsOptions {\n /** Override input byte cap passed to `summarizeToolInput`. */\n toolInputMaxBytes?: number;\n /** Override output byte cap passed to `summarizeToolOutput`. */\n toolOutputMaxBytes?: number;\n}\n\ninterface OpenSpanEntry {\n handle: SpanHandle;\n isSubagent: boolean;\n}\n\nfunction safeCloseFailed(handle: SpanHandle, message: string): void {\n try {\n handle.end(new Error(message));\n } catch {\n /* never propagate */\n }\n}\n\nfunction safeCloseOk(handle: SpanHandle): void {\n try {\n handle.end();\n } catch {\n /* never propagate */\n }\n}\n\n/**\n * Wrap an async iterable of `SDKMessageLike` events: yield every event\n * unchanged but tap `tool_use` / `tool_result` pairs and emit matching\n * `tool` and `subagent` spans against the active Morse trace.\n *\n * No-op outside an active trace (the emitter helpers return `null`).\n * Iterator order and timing are preserved; emission errors are\n * absorbed.\n */\nexport async function* instrumentTools(\n events: AsyncIterable<SDKMessageLike>,\n options?: InstrumentToolsOptions,\n): AsyncIterable<SDKMessageLike> {\n const open = new Map<string, OpenSpanEntry>();\n let fanOutSnapshot: ParentSnapshot | null = null;\n let openSubagentCount = 0;\n\n const inputOpts = options?.toolInputMaxBytes\n ? { maxBytes: options.toolInputMaxBytes }\n : undefined;\n const outputOpts = options?.toolOutputMaxBytes\n ? { maxBytes: options.toolOutputMaxBytes }\n : undefined;\n\n const extractContentBlocks = (event: SDKMessageLike): unknown[] => {\n const msg = (event as { message?: { content?: unknown } }).message;\n const content = msg?.content;\n return Array.isArray(content) ? content : [];\n };\n\n const handleToolUse = (event: SDKMessageLike): void => {\n const toolUseId = typeof event.tool_use_id === \"string\" ? event.tool_use_id : null;\n const name = typeof event.name === \"string\" ? event.name : null;\n if (toolUseId === null || name === null) return;\n if (open.has(toolUseId)) return; // duplicate id — skip\n\n if (name === TASK_TOOL_NAME) {\n // Subagent fan-out: snapshot the parent on the FIRST Task tool_use\n // of this fan-out, then pin every subagent span to that snapshot.\n if (fanOutSnapshot === null) {\n fanOutSnapshot = captureParentForFanOut();\n }\n const input =\n event.input && typeof event.input === \"object\"\n ? (event.input as Record<string, unknown>)\n : {};\n const description =\n typeof input.description === \"string\" && input.description.length > 0\n ? input.description\n : `subagent_${toolUseId}`;\n const taskPrompt = typeof input.prompt === \"string\" ? input.prompt : undefined;\n\n const metadata: Record<string, unknown> = {\n adapter: ADAPTER,\n spawn_kind: \"subagent\",\n parent_agent_name: \"anthropic-agent-sdk\",\n subagent_name: description,\n tool_use_id: toolUseId,\n };\n if (taskPrompt !== undefined) {\n // Reuse the same byte cap policy as tool inputs.\n metadata.task_description = summarizeToolInput(taskPrompt, inputOpts);\n }\n\n let handle: SpanHandle | null = null;\n try {\n if (fanOutSnapshot !== null) {\n handle = emitWithPinnedParent({\n name: `${ADAPTER}.subagent.spawn`,\n type: \"agent\",\n metadata,\n snapshot: fanOutSnapshot,\n });\n }\n } catch {\n handle = null;\n }\n if (handle === null) return;\n open.set(toolUseId, { handle, isSubagent: true });\n openSubagentCount++;\n return;\n }\n\n // Regular tool.\n let handle: SpanHandle | null = null;\n try {\n handle = emitToolSpan({\n adapter: ADAPTER,\n toolName: name,\n inputSummary: summarizeToolInput(event.input, inputOpts),\n attributes: { tool_use_id: toolUseId },\n });\n } catch {\n handle = null;\n }\n if (handle === null) return;\n open.set(toolUseId, { handle, isSubagent: false });\n };\n\n const handleToolResult = (event: SDKMessageLike): void => {\n const toolUseId = typeof event.tool_use_id === \"string\" ? event.tool_use_id : null;\n if (toolUseId === null) return;\n const entry = open.get(toolUseId);\n if (!entry) return; // orphan tolerated\n\n open.delete(toolUseId);\n const isError = event.is_error === true;\n try {\n const outputSummary = summarizeToolOutput(event.content, outputOpts);\n entry.handle.span.metadata = {\n ...(entry.handle.span.metadata ?? {}),\n tool_output_summary: outputSummary,\n };\n if (entry.isSubagent) {\n // Mirror the success flag on subagent metadata for UI rollup.\n (entry.handle.span.metadata as Record<string, unknown>).success = !isError;\n } else {\n // For tool spans, success lives inside metadata.tool per\n // emitToolSpan; mirror it for visibility.\n (entry.handle.span.metadata as Record<string, unknown>).success = !isError;\n }\n } catch (err) {\n /* fall through to end */\n reportSwallowed(err, \"morse.anthropic_agent_sdk.tool_end\");\n }\n if (isError) {\n safeCloseFailed(entry.handle, \"tool error\");\n } else {\n safeCloseOk(entry.handle);\n }\n\n if (entry.isSubagent) {\n openSubagentCount = Math.max(0, openSubagentCount - 1);\n if (openSubagentCount === 0) {\n fanOutSnapshot = null;\n }\n }\n };\n\n try {\n for await (const event of events) {\n try {\n const type = typeof event?.type === \"string\" ? event.type : null;\n if (type === \"tool_use\") {\n handleToolUse(event);\n } else if (type === \"tool_result\") {\n handleToolResult(event);\n } else if (type === \"assistant\" || type === \"user\") {\n // Real Claude Agent SDK shape: tool_use blocks live INSIDE\n // event.message.content[] (assistant) and tool_result blocks\n // live INSIDE event.message.content[] (user). Synthesize the\n // legacy-shape events and route through the same handlers.\n const blocks = extractContentBlocks(event);\n for (const block of blocks) {\n if (!block || typeof block !== \"object\") continue;\n const bt =\n typeof (block as { type?: unknown }).type === \"string\"\n ? (block as { type: string }).type\n : null;\n if (bt === \"tool_use\" && type === \"assistant\") {\n handleToolUse({\n type: \"tool_use\",\n tool_use_id: (block as { id?: string }).id,\n name: (block as { name?: string }).name,\n input: (block as { input?: unknown }).input,\n } as SDKMessageLike);\n } else if (bt === \"tool_result\" && type === \"user\") {\n handleToolResult({\n type: \"tool_result\",\n tool_use_id: (block as { tool_use_id?: string }).tool_use_id,\n content: (block as { content?: unknown }).content,\n is_error: (block as { is_error?: boolean }).is_error,\n } as SDKMessageLike);\n }\n }\n }\n } catch {\n /* never let telemetry break iteration */\n }\n yield event;\n }\n } finally {\n // Iterator ended (normal or abrupt) — fail-close any spans still\n // open. We don't know if the host loop will rerun, so cleanup here\n // is the only safe time.\n for (const [, entry] of open) {\n safeCloseFailed(entry.handle, \"tool_use without matching tool_result\");\n if (entry.isSubagent) {\n openSubagentCount = Math.max(0, openSubagentCount - 1);\n }\n }\n open.clear();\n fanOutSnapshot = null;\n }\n}\n\n/**\n * Route a swallowed internal error to the diagnostics channel (SDKDIAG-07).\n *\n * Control flow is unchanged — the site still swallows, still returns the same\n * value. It is simply no longer invisible to us.\n */\nfunction reportSwallowed(err: unknown, fingerprint: string): void {\n try {\n report(err, { fingerprint });\n } catch {\n // Reporting must never break the swallow it is reporting on.\n }\n}\n","/**\n * Bridge an async generator into a fresh Morse trace.\n *\n * `emitAgentSpan` no-ops (returns `null`) when there is no active trace, so an\n * adapter invoked outside `morse.run()` would emit nothing at all. Both\n * entry points for `@anthropic-ai/claude-agent-sdk` need the same fix: if a\n * trace is already active, attach to it; otherwise open one whose lifetime is\n * bound to the iteration, not to the synchronous call.\n *\n * The awkward part is that `runAsync` owns a callback's lifetime while an\n * adapter must hand a generator back to the caller. So the generator is driven\n * *inside* `runAsync` and its events are teed out through a promise-handoff\n * queue. Extracted from `client-wrapper.ts` (where it was written for the\n * client path) so the `query()` path in `query-wrapper.ts` reuses it rather\n * than growing a second, subtly different copy — MHQ-936.\n */\nimport { getActiveTraceState, runAsync as _runAsync } from \"../_internal/tracing\";\n\nimport type { SDKMessageLike } from \"./types\";\n\ntype QueueItem =\n | { kind: \"value\"; value: SDKMessageLike }\n | { kind: \"error\"; error: unknown }\n | { kind: \"end\" };\n\n/**\n * Run `makeGenerator()` inside a trace and yield its events.\n *\n * Inside an existing trace this is a straight pass-through — the caller's\n * spans nest under their root. Outside one, a fresh trace named `agentName`\n * is opened and drains when iteration completes or throws.\n */\nexport function iterateInTrace(\n agentName: string,\n makeGenerator: () => AsyncGenerator<SDKMessageLike, void, unknown>,\n): AsyncGenerator<SDKMessageLike, void, unknown> {\n if (getActiveTraceState() !== null) {\n return makeGenerator();\n }\n\n return (async function* outerTrace(): AsyncGenerator<SDKMessageLike, void, unknown> {\n const queue: QueueItem[] = [];\n let notify: (() => void) | null = null;\n const waitForItem = (): Promise<void> =>\n new Promise((resolve) => {\n if (queue.length > 0) {\n resolve();\n } else {\n notify = (): void => {\n notify = null;\n resolve();\n };\n }\n });\n\n const runPromise = _runAsync({ agentName }, async (runHandle) => {\n try {\n for await (const event of makeGenerator()) {\n queue.push({ kind: \"value\", value: event });\n notify?.();\n }\n runHandle.setOutcome(true);\n } catch (err) {\n queue.push({ kind: \"error\", error: err });\n notify?.();\n throw err;\n } finally {\n queue.push({ kind: \"end\" });\n notify?.();\n }\n return null;\n });\n // runAsync rethrows; the error is already queued for the consumer, so\n // swallow here purely to avoid an unhandled rejection.\n runPromise.catch(() => {\n /* already handled via queue */\n });\n\n while (true) {\n if (queue.length === 0) await waitForItem();\n const item = queue.shift();\n if (!item) continue;\n if (item.kind === \"value\") {\n yield item.value;\n } else if (item.kind === \"error\") {\n throw item.error;\n } else {\n return;\n }\n }\n })();\n}\n","/**\n * `wrapClaudeAgentQuery` — the supported entry point for\n * `@anthropic-ai/claude-agent-sdk` (MHQ-936).\n *\n * ## Why this replaced the client-based path\n *\n * The adapter was originally written against `ClaudeSDKClient`, a class the\n * TypeScript package has never exported — it exists in the *Python* package\n * (`claude_agent_sdk`), and the TS docs were written from those. The global\n * install path looked for `mod.ClaudeSDKClient.prototype.query`, never found\n * it, and silently did nothing; the documented `new ClaudeSDKClient(...)`\n * example threw `TypeError: ClaudeSDKClient is not a constructor`.\n *\n * The package's real surface is a top-level function, and it is the only\n * entry point stable across the versions we support — 0.1.x offered\n * `unstable_v2_createSession` as an alternative and 0.3.x removed it again,\n * while `query` was present throughout:\n *\n * function query(params: {\n * prompt: string | AsyncIterable<SDKUserMessage>;\n * options?: Options;\n * }): Query\n *\n * Note the shape: **one object argument**, not `(prompt, options)`. The old\n * wrapper's two-argument assumption was the Python signature, another symptom\n * of the same root cause.\n *\n * ## The part that is easy to get wrong\n *\n * `Query extends AsyncGenerator<SDKMessage, void>` **plus** control methods —\n * `interrupt()`, `setPermissionMode()`, and others. Wrapping it with a plain\n * `async function*` would return something that iterates correctly and has\n * quietly lost every control method: `interrupt()` becomes `undefined`, and a\n * caller relying on it fails at runtime with no hint that telemetry caused it.\n *\n * So the traced return value is a Proxy: the iteration protocol\n * (`Symbol.asyncIterator` / `next` / `return` / `throw`) is served by the\n * instrumented generator, and every other property is forwarded, bound, to\n * the real `Query`. `tests/agent-sdk/anthropic/query-wrapper.test.ts` asserts\n * that control methods survive, because losing them is invisible otherwise.\n */\nimport { emitAgentSpan } from \"../_agent-sdk-common/span-emitter\";\nimport { instrumentLlmCalls } from \"./llm-instrumentation\";\nimport { instrumentTools } from \"./tool-and-subagent\";\nimport { iterateInTrace } from \"./trace-bridge\";\n\nimport type { SDKMessageLike } from \"./types\";\n\n/** The subset of `Query` we depend on: async iteration. Everything else is forwarded. */\nexport interface ClaudeAgentQueryLike extends AsyncIterable<SDKMessageLike> {\n [key: string]: unknown;\n}\n\n/** Real shape of the package's `query` export. One object argument. */\nexport type ClaudeAgentQueryFn = (params: {\n prompt: unknown;\n options?: { model?: unknown; [key: string]: unknown };\n}) => ClaudeAgentQueryLike;\n\nexport interface WrapClaudeAgentQueryOptions {\n /** Agent name on the outer span when none can be derived. */\n defaultAgentName?: string;\n /** Model for the outer span when `params.options.model` is absent. */\n defaultModel?: string;\n /** Max bytes of serialized tool input captured per tool span. */\n toolInputMaxBytes?: number;\n /** Max bytes of serialized tool output captured per tool span. */\n toolOutputMaxBytes?: number;\n}\n\nconst WRAPPED = Symbol.for(\"morse.claudeAgentQuery.wrapped\");\n\n/** True if `fn` is already a traced query — wrapping twice would double-count spans. */\nexport function isClaudeAgentQueryWrapped(fn: unknown): boolean {\n return typeof fn === \"function\" && (fn as unknown as Record<symbol, unknown>)[WRAPPED] === true;\n}\n\n/**\n * Wrap the package's `query` function. The returned function has the same\n * signature and returns a `Query`-compatible object.\n *\n * ```ts\n * import { query } from \"@anthropic-ai/claude-agent-sdk\";\n * import { wrapClaudeAgentQuery } from \"@morsehq-dev/sdk/anthropic-agent-sdk\";\n *\n * const tracedQuery = wrapClaudeAgentQuery(query);\n * for await (const message of tracedQuery({ prompt: \"...\" })) { ... }\n * ```\n *\n * Telemetry never changes what the caller sees: messages are yielded through\n * untouched, and a throw from the underlying query propagates unchanged after\n * the span is closed with the error.\n */\nexport function wrapClaudeAgentQuery<Q extends ClaudeAgentQueryFn>(\n query: Q,\n options: WrapClaudeAgentQueryOptions = {},\n): Q {\n if (typeof query !== \"function\" || isClaudeAgentQueryWrapped(query)) return query;\n\n const traced = function tracedQuery(\n params: Parameters<ClaudeAgentQueryFn>[0],\n ): ClaudeAgentQueryLike {\n // Call through first: the real Query carries the control methods, and we\n // must hand back something that still has them.\n const real = query(params);\n\n const model =\n typeof params?.options?.model === \"string\" ? params.options.model : options.defaultModel;\n\n // The agent span opens on first iteration, not here. A Query that is\n // created and never consumed should not leave a span open forever.\n let handle: ReturnType<typeof emitAgentSpan> = null;\n let opened = false;\n\n async function* withAgentSpan(): AsyncGenerator<SDKMessageLike, void, unknown> {\n if (!opened) {\n opened = true;\n handle = emitAgentSpan({\n adapter: \"anthropic-agent-sdk\",\n agentName: options.defaultAgentName ?? \"claude-agent-sdk\",\n model,\n });\n }\n try {\n for await (const message of real) {\n yield message;\n }\n } catch (err) {\n handle?.end(err);\n handle = null;\n throw err;\n }\n handle?.end();\n handle = null;\n }\n\n const tapOpts = {\n toolInputMaxBytes: options.toolInputMaxBytes,\n toolOutputMaxBytes: options.toolOutputMaxBytes,\n };\n // tools wraps llm wraps the agent-span generator — same composition order\n // as the previous client path, so span nesting is unchanged.\n //\n // The whole stack runs inside iterateInTrace: without an active trace\n // emitAgentSpan no-ops and the customer sees nothing, which is exactly\n // the silent-failure mode this adapter keeps being bitten by.\n const instrumented = iterateInTrace(\n options.defaultAgentName ?? \"claude-agent-sdk\",\n () =>\n instrumentTools(\n instrumentLlmCalls(withAgentSpan(), { fallbackModel: model }),\n tapOpts,\n ) as AsyncGenerator<SDKMessageLike, void, unknown>,\n );\n\n return new Proxy(real, {\n get(target, prop, receiver) {\n if (prop === Symbol.asyncIterator) return () => instrumented;\n if (prop === \"next\" || prop === \"return\" || prop === \"throw\") {\n const fn = instrumented[prop as \"next\" | \"return\" | \"throw\"];\n return typeof fn === \"function\" ? fn.bind(instrumented) : fn;\n }\n // Everything else — interrupt(), setPermissionMode(), future control\n // methods we have never heard of — goes to the real Query untouched.\n const value = Reflect.get(target, prop, receiver);\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n }) as ClaudeAgentQueryLike;\n } as Q;\n\n Object.defineProperty(traced, WRAPPED, { value: true, enumerable: false });\n return traced;\n}\n","/**\n * `@morsehq-dev/sdk/anthropic-agent-sdk` — public surface for the\n * `@anthropic-ai/claude-agent-sdk` adapter.\n *\n * Composes the four W2-A surfaces:\n *\n * - `client-wrapper.ts` opens the outer `agent` span around `query()`.\n * - `llm-instrumentation.ts` taps `message_start` / `message_stop` pairs\n * and emits `llm` spans.\n * - `tool-and-subagent.ts` taps `tool_use` / `tool_result` pairs and\n * emits `tool` spans (regular tools) or `agent` spans with\n * `metadata.spawn_kind=\"subagent\"` (Task fan-out).\n * - `hook-instrumentation.ts` subscribes to the client's `\"hook\"` event\n * channel and emits one `tool`-typed `tool_kind=\"hook\"` span per hook.\n *\n * The convenience composer `wrapClaudeAgentSDKWithFullInstrumentation`\n * stacks them in the correct order: outer `wrapClaudeAgentSDK` opens the\n * agent span; inner generators (`instrumentLlmCalls`, `instrumentTools`)\n * are chained around the underlying query iterator so events flow once\n * through both taps before reaching the caller. Hook subscription is\n * event-based (decoupled).\n *\n * See `openspec/changes/2026-05-26-phase-13-ts-agent-sdk-adapters/`.\n */\n\nimport { wrapClaudeAgentSDK, type WrapClaudeAgentSDKOptions } from \"./client-wrapper\";\nimport {\n installHookInstrumentation,\n type InstallHookInstrumentationOptions,\n} from \"./hook-instrumentation\";\nimport { instrumentLlmCalls, type InstrumentLlmCallsOptions } from \"./llm-instrumentation\";\nimport { instrumentTools, type InstrumentToolsOptions } from \"./tool-and-subagent\";\n\nimport type { ClaudeSDKClientLike, ClaudeSDKQueryOptions, SDKMessageLike } from \"./types\";\n\n/* ------------------------------------------------------------------------ */\n/* Re-exports */\n/* ------------------------------------------------------------------------ */\n\nexport type { ClaudeSDKClientLike, ClaudeSDKQueryOptions, SDKMessageLike } from \"./types\";\n\n// MHQ-936: `wrapClaudeAgentQuery` is THE entry point for the real\n// `@anthropic-ai/claude-agent-sdk`, whose public surface is a top-level\n// `query({ prompt, options })`. The client-based exports below work for any\n// object with a `.query` method but do not match the TS package's own API.\nexport { isClaudeAgentQueryWrapped, wrapClaudeAgentQuery } from \"./query-wrapper\";\nexport type {\n ClaudeAgentQueryFn,\n ClaudeAgentQueryLike,\n WrapClaudeAgentQueryOptions,\n} from \"./query-wrapper\";\n\nexport {\n instrumentClaudeAgentSDK,\n isClaudeAgentSDKWrapped,\n wrapClaudeAgentSDK,\n} from \"./client-wrapper\";\nexport type { WrapClaudeAgentSDKOptions } from \"./client-wrapper\";\n\nexport { instrumentLlmCalls } from \"./llm-instrumentation\";\nexport type { InstrumentLlmCallsOptions } from \"./llm-instrumentation\";\n\nexport { instrumentTools } from \"./tool-and-subagent\";\nexport type { InstrumentToolsOptions } from \"./tool-and-subagent\";\n\nexport { installHookInstrumentation } from \"./hook-instrumentation\";\nexport type { HookEventLike, InstallHookInstrumentationOptions } from \"./hook-instrumentation\";\n\n/* ------------------------------------------------------------------------ */\n/* Composed convenience: wrapClaudeAgentSDKWithFullInstrumentation */\n/* ------------------------------------------------------------------------ */\n\nexport interface FullInstrumentationOptions\n extends\n WrapClaudeAgentSDKOptions,\n InstrumentLlmCallsOptions,\n InstrumentToolsOptions,\n InstallHookInstrumentationOptions {}\n\nexport interface FullInstrumentationResult<C extends ClaudeSDKClientLike> {\n /** The Proxy-wrapped client. Drop-in replacement for the original. */\n client: C;\n /**\n * Tear-down. Currently disconnects the hook listener. The outer-span\n * Proxy and generator wrapping are inert when not invoked, so there's\n * no other cleanup required — subsequent `query()` calls on the\n * returned client will still emit telemetry until callers drop the\n * reference.\n */\n dispose: () => void;\n}\n\nconst FULL_WRAP_SENTINEL = Symbol.for(\"morse.anthropic-agent-sdk.full-wrapped\");\n\ninterface FullWrappedMarker {\n [FULL_WRAP_SENTINEL]?: FullInstrumentationResult<ClaudeSDKClientLike>;\n}\n\n/**\n * Compose all four W2-A instrumentation layers on a single\n * `ClaudeSDKClient`. Returns the wrapped client plus a `dispose()` that\n * removes the hook listener.\n *\n * Idempotent: re-wrapping a previously full-wrapped client returns the\n * original result (same `client` reference, same `dispose`).\n *\n * Composition order (outer → inner):\n *\n * 1. `wrapClaudeAgentSDK` — opens the outer `agent` span around the\n * whole iteration and ensures a trace is active.\n * 2. `instrumentLlmCalls` — taps `message_start` / `message_stop`\n * pairs.\n * 3. `instrumentTools` — taps `tool_use` / `tool_result` pairs.\n * 4. The underlying `client.query()` iterator.\n *\n * `installHookInstrumentation` runs in parallel via the event channel.\n */\nexport function wrapClaudeAgentSDKWithFullInstrumentation<C extends ClaudeSDKClientLike>(\n client: C,\n options: FullInstrumentationOptions = {},\n): FullInstrumentationResult<C> {\n // Idempotency: a client we've already full-wrapped carries the sentinel.\n const existing = (client as FullWrappedMarker)[FULL_WRAP_SENTINEL];\n if (existing) {\n return existing as FullInstrumentationResult<C>;\n }\n\n const wrapOpts: WrapClaudeAgentSDKOptions = {\n defaultAgentName: options.defaultAgentName,\n defaultModel: options.defaultModel,\n };\n const llmOpts: InstrumentLlmCallsOptions = {\n fallbackModel: options.defaultModel,\n };\n const toolOpts: InstrumentToolsOptions = {\n toolInputMaxBytes: options.toolInputMaxBytes,\n toolOutputMaxBytes: options.toolOutputMaxBytes,\n };\n const hookOpts: InstallHookInstrumentationOptions = {\n toolSpanLookup: options.toolSpanLookup,\n };\n\n // Layer 1: outer agent span via the standard wrapper.\n const outerWrapped = wrapClaudeAgentSDK(client, wrapOpts);\n\n // Layer 2 + 3: wrap the wrapped client's `query()` in a Proxy that\n // composes the llm + tool generators around the outer wrapper's\n // returned iterator.\n const composed = new Proxy(outerWrapped, {\n get(target, prop, receiver) {\n if (prop === \"query\") {\n const outerQuery = (target as ClaudeSDKClientLike).query.bind(target) as (\n prompt: string | unknown,\n options?: ClaudeSDKQueryOptions,\n ) => AsyncIterable<SDKMessageLike> | Promise<AsyncIterable<SDKMessageLike>>;\n\n return function composedQuery(\n prompt: string | unknown,\n callOptions?: ClaudeSDKQueryOptions,\n ): AsyncIterable<SDKMessageLike> {\n async function* compose(): AsyncGenerator<SDKMessageLike, void, unknown> {\n const ret = outerQuery(prompt, callOptions);\n const iter = (\n ret instanceof Promise ? await ret : ret\n ) as AsyncIterable<SDKMessageLike>;\n // Compose: tools wraps llm wraps the outer iterator. Order\n // between the two passthrough taps doesn't affect span\n // emission (they observe disjoint event types) but we keep\n // tools as the outermost tap so its fan-out parent snapshot\n // sees the deepest available active span.\n const llmTapped = instrumentLlmCalls(iter, llmOpts);\n const toolTapped = instrumentTools(llmTapped, toolOpts);\n for await (const event of toolTapped) {\n yield event;\n }\n }\n return compose();\n };\n }\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") {\n return (value as (...a: unknown[]) => unknown).bind(target);\n }\n return value;\n },\n });\n\n // Layer 4: hook subscription (event-driven).\n const unsubscribeHooks = installHookInstrumentation(client, hookOpts);\n\n let disposed = false;\n const dispose = (): void => {\n if (disposed) return;\n disposed = true;\n try {\n unsubscribeHooks();\n } catch {\n /* never propagate */\n }\n };\n\n const result: FullInstrumentationResult<C> = {\n client: composed as C,\n dispose,\n };\n\n // Mark the original client so re-wrapping is idempotent. We tag both\n // the original and the composed proxy so callers passing either back\n // in get the same result.\n try {\n (client as FullWrappedMarker)[FULL_WRAP_SENTINEL] =\n result as FullInstrumentationResult<ClaudeSDKClientLike>;\n } catch {\n /* read-only target — best-effort idempotency only */\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"sources":["../../src/anthropic-agent-sdk/client-wrapper.ts","../../src/_agent-sdk-common/context-propagation.ts","../../src/anthropic-agent-sdk/hook-instrumentation.ts","../../src/anthropic-agent-sdk/llm-instrumentation.ts","../../src/anthropic-agent-sdk/tool-and-subagent.ts","../../src/anthropic-agent-sdk/query-wrapper.ts","../../src/anthropic-agent-sdk/trace-bridge.ts","../../src/anthropic-agent-sdk/index.ts"],"names":["init_tracing","absorbErrorsAsync","iterateInTrace","emitAgentSpan","getActiveTraceState","runAsync","absorbErrorsSync","startSpan","emitHookSpan","init_diagnostics","calculateCost","emitLlmSpan","extractAnthropicSegments","report","summarizeToolInput","handle","emitToolSpan","summarizeToolOutput","reportSwallowed","adoptThreadId"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * `@morsehq-dev/sdk/anthropic-agent-sdk` — Claude Agent SDK client wrapper.\n *\n * This module implements ONLY the outer-span (agent) instrumentation around\n * `ClaudeSDKClient.query()`. Sibling files (`llm-instrumentation.ts`,\n * `tool-and-subagent.ts`, `hook-instrumentation.ts`) layer the inner llm /\n * tool / hook spans; Wave 3-A composes them via `src/anthropic-agent-sdk/index.ts`.\n *\n * Two entry points (mirroring `src/anthropic/index.ts`):\n *\n * - `wrapClaudeAgentSDK(client)` — returns a Proxy-of-Proxy that\n * intercepts `query()` and opens an outer `agent` span around the async\n * iteration. The rest of the client surface (`on`, `off`, anything\n * else) is forwarded unchanged.\n *\n * - `instrumentClaudeAgentSDK(clientOrOptions, options?)` — two-mode\n * installer. With a client, equivalent to `wrapClaudeAgentSDK`. With\n * `{ claudeAgentSdkModule }`, best-effort patches\n * `ClaudeSDKClient.prototype.query`. Always returns the wrapped client\n * or a boolean; never throws.\n *\n * All telemetry paths are wrapped in `absorbErrors*` — a tracing failure\n * MUST NEVER break the customer's `query()`.\n */\n\nimport { absorbErrorsAsync } from \"../_internal/errors\";\nimport { getActiveTraceState, runAsync as _runAsync } from \"../_internal/tracing\";\nimport { emitAgentSpan } from \"../_agent-sdk-common/span-emitter\";\n\nimport type { ClaudeSDKClientLike, ClaudeSDKQueryOptions, SDKMessageLike } from \"./types\";\n\n/* ------------------------------------------------------------------------ */\n/* Module-level install sentinels */\n/* ------------------------------------------------------------------------ */\n\nconst WRAPPED_CLIENT = Symbol.for(\"morse.anthropic-agent-sdk.wrapped\");\n/* ------------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------------ */\n\nexport interface WrapClaudeAgentSDKOptions {\n /** Override the agent name on the outer span. Default: `\"claude-agent-sdk\"`. */\n defaultAgentName?: string;\n /** Override the model name passed to the outer span metadata. Default: inferred. */\n defaultModel?: string;\n}\n\n/**\n * Wrap a `ClaudeSDKClient` so each `query()` call opens an outer `agent`\n * span (via `emitAgentSpan` from `_agent-sdk-common`). The rest of the\n * client's surface is forwarded unchanged via a Proxy. Idempotent.\n *\n * THIS WRAPPER ONLY HANDLES THE OUTER AGENT SPAN. llm / tool / hook spans\n * are layered by sibling files in the same directory and composed via\n * `src/anthropic-agent-sdk/index.ts` in Wave 3.\n */\nexport function wrapClaudeAgentSDK<C extends ClaudeSDKClientLike>(\n client: C,\n options: WrapClaudeAgentSDKOptions = {},\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\n const originalQuery = client.query?.bind(client);\n if (typeof originalQuery !== \"function\") return client;\n\n const patchedQuery = buildPatchedQuery(\n originalQuery as (\n prompt: unknown,\n options?: ClaudeSDKQueryOptions,\n ) => AsyncIterable<SDKMessageLike> | Promise<AsyncIterable<SDKMessageLike>>,\n options,\n );\n\n const wrapper = new Proxy(client, {\n get(target, prop, receiver) {\n if (prop === WRAPPED_CLIENT) return true;\n if (prop === \"query\") return patchedQuery;\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") {\n return (value as (...a: unknown[]) => unknown).bind(target);\n }\n return value;\n },\n });\n\n return wrapper as C;\n}\n\n/**\n * Instance wrapper. This once had a second mode that patched\n * `ClaudeSDKClient.prototype.query` on the module. Deleted in MHQ-936 —\n * neither half of it could ever work in TypeScript:\n *\n * - `ClaudeSDKClient` is the *Python* package's API. The TS package has\n * never exported it (checked at 0.1.77 and 0.3.223), so the carrier\n * lookup always returned null and the install silently no-opped.\n * - Patching the real `query` export is impossible regardless: it is\n * read-only and non-configurable, so assignment throws — the same wall\n * `ai` hit in MHQ-758.\n *\n * For the real package use `wrapClaudeAgentQuery(query)` (`./query-wrapper.ts`).\n * This remains for any object exposing a `.query` method.\n *\n * Never throws; returns the wrapped client, or a falsy value otherwise.\n */\nexport const instrumentClaudeAgentSDK: (\n client?: ClaudeSDKClientLike,\n maybeOptions?: WrapClaudeAgentSDKOptions,\n) => Promise<unknown | undefined> = absorbErrorsAsync(\n async (\n client: ClaudeSDKClientLike | undefined = undefined,\n maybeOptions: WrapClaudeAgentSDKOptions = {},\n ): Promise<unknown> => {\n if (client && isClient(client)) return wrapClaudeAgentSDK(client, maybeOptions);\n return false;\n },\n { fingerprint: \"morse.adapters.anthropic-agent-sdk.install\" },\n);\n\n/** True when a wrapped Claude Agent SDK client is passed in. */\nexport function isClaudeAgentSDKWrapped(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 ClaudeSDKClientLike {\n if (!x || typeof x !== \"object\") return false;\n const q = (x as { query?: unknown }).query;\n return typeof q === \"function\";\n}\n\n/* ------------------------------------------------------------------------ */\n/* Internals — wrapper that opens the outer `agent` span */\n/* ------------------------------------------------------------------------ */\n\nfunction buildPatchedQuery(\n original: (\n prompt: unknown,\n options?: ClaudeSDKQueryOptions,\n ) => AsyncIterable<SDKMessageLike> | Promise<AsyncIterable<SDKMessageLike>>,\n options: WrapClaudeAgentSDKOptions,\n): (prompt: unknown, options?: ClaudeSDKQueryOptions) => AsyncIterable<SDKMessageLike> {\n const defaultAgentName = options.defaultAgentName ?? \"claude-agent-sdk\";\n const defaultModel = options.defaultModel;\n\n return function patchedQuery(\n this: unknown,\n prompt: unknown,\n callOptions?: ClaudeSDKQueryOptions,\n ): AsyncIterable<SDKMessageLike> {\n // Capture `this` for the inner generator via Reflect.apply-style closure.\n const boundOriginal = (\n p: unknown,\n o?: ClaudeSDKQueryOptions,\n ): AsyncIterable<SDKMessageLike> | Promise<AsyncIterable<SDKMessageLike>> =>\n original.call(this, p, o);\n const model =\n (callOptions && typeof callOptions.model === \"string\" ? callOptions.model : undefined) ??\n defaultModel;\n\n async function* iterateInTrace(): AsyncGenerator<SDKMessageLike, void, unknown> {\n // Open the outer agent span BEFORE invoking the original query so the\n // model/prompt are visible to any caller that introspects the span\n // mid-iteration.\n const handle = emitAgentSpan({\n adapter: \"anthropic-agent-sdk\",\n agentName: defaultAgentName,\n model,\n });\n let iter: AsyncIterable<SDKMessageLike>;\n try {\n const ret = boundOriginal(prompt, callOptions);\n iter = (ret instanceof Promise ? await ret : ret) as AsyncIterable<SDKMessageLike>;\n } catch (err) {\n handle?.end(err);\n throw err;\n }\n try {\n for await (const event of iter) {\n yield event;\n }\n } catch (err) {\n handle?.end(err);\n throw err;\n }\n handle?.end();\n }\n\n // If we're already inside an active trace, the agent span attaches as a\n // child of the existing root. Otherwise, open a fresh trace so the span\n // has a parent — without this, `emitAgentSpan` would no-op (return null)\n // and the customer would see no telemetry.\n if (getActiveTraceState() !== null) {\n return iterateInTrace();\n }\n\n // Wrap in a fresh trace. We can't simply `return _runAsync(...)` because\n // the trace must drain on iterator completion — so we tee the events out\n // via a passthrough generator and let _runAsync own the trace lifecycle.\n return (async function* outerTrace(): AsyncGenerator<SDKMessageLike, void, unknown> {\n // Buffer events into a queue and yield as they arrive. We use a\n // simple promise-based handoff to bridge the _runAsync callback's\n // for-await loop into our generator's consumer.\n const queue: Array<\n | { kind: \"value\"; value: SDKMessageLike }\n | { kind: \"error\"; error: unknown }\n | { kind: \"end\" }\n > = [];\n let notify: (() => void) | null = null;\n const waitForItem = (): Promise<void> =>\n new Promise((resolve) => {\n if (queue.length > 0) {\n resolve();\n } else {\n notify = (): void => {\n notify = null;\n resolve();\n };\n }\n });\n\n // Drive the inner generator inside _runAsync so the trace lifecycle\n // is bound to the iteration's completion.\n const runPromise = _runAsync({ agentName: defaultAgentName }, async (runHandle) => {\n try {\n for await (const event of iterateInTrace()) {\n queue.push({ kind: \"value\", value: event });\n notify?.();\n }\n runHandle.setOutcome(true);\n } catch (err) {\n queue.push({ kind: \"error\", error: err });\n notify?.();\n throw err;\n } finally {\n queue.push({ kind: \"end\" });\n notify?.();\n }\n return null;\n });\n // _runAsync absorbs upstream errors? No — runAsync rethrows. Catch so\n // the unhandled rejection doesn't leak; we already enqueued the error.\n runPromise.catch(() => {\n /* already handled via queue */\n });\n\n while (true) {\n if (queue.length === 0) await waitForItem();\n const item = queue.shift();\n if (!item) continue;\n if (item.kind === \"value\") {\n yield item.value;\n } else if (item.kind === \"error\") {\n // Drain & rethrow.\n throw item.error;\n } else {\n return;\n }\n }\n })();\n };\n}\n","/**\n * Context propagation helpers shared by the agent-SDK adapters\n * (Anthropic Agent SDK, OpenAI Agents SDK, LangGraph).\n *\n * The default `startSpan()` parent-linkage strategy in `_internal/tracing`\n * always picks the top of the active `spanStack` as the parent. That\n * works for synchronous, well-nested workflows but breaks for two common\n * agent-SDK patterns:\n *\n * 1. **Fan-out** — Anthropic's Task tool and OpenAI's handoffs spawn N\n * children that run concurrently. The default top-of-stack lookup\n * sees whichever sibling started most recently, not the shared\n * parent agent span. We capture the parent ID at fan-out time and\n * pin every child's `parent_span_id` to that snapshot.\n *\n * 2. **Hook siblings** — `pre_tool` / `post_tool` hooks logically sit\n * next to the `tool` span they bracket, not nested under it. We\n * look up the tool span (open or completed) and reuse its\n * `parent_span_id` for the hook span.\n *\n * All public functions are wrapped in `absorbErrorsSync` so a malformed\n * snapshot or unexpected runtime state can never escape into the host\n * application.\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { SpanData, SpanType } from \"../_internal/spans\";\nimport {\n getActiveTraceState,\n startSpan,\n type SpanHandle,\n type TraceState,\n} from \"../_internal/tracing\";\n\nexport interface ParentSnapshot {\n parentSpanId: string;\n traceId: string;\n}\n\nexport interface EmitWithPinnedParentOptions {\n name: string;\n type: SpanType;\n metadata?: Record<string, unknown>;\n snapshot: ParentSnapshot;\n}\n\nexport interface EmitAsToolSiblingOptions {\n name: string;\n type: SpanType;\n metadata?: Record<string, unknown>;\n toolSpanId: string;\n}\n\nexport interface TraceStateSnapshot {\n traceId: string;\n spanStack: ReadonlyArray<SpanData>;\n completedSpans: ReadonlyArray<SpanData>;\n}\n\n/**\n * Snapshot the current parent span (top of `spanStack`) so child spans\n * emitted later — possibly after the parent has moved off the stack —\n * can be linked explicitly via `parent_span_id`.\n *\n * Returns `null` if there is no active trace or the stack is empty.\n */\nexport const captureParentForFanOut = absorbErrorsSync(\n (): ParentSnapshot | null => {\n const state = getActiveTraceState();\n if (state === null) return null;\n const top = state.spanStack[state.spanStack.length - 1];\n if (!top) return null;\n return {\n parentSpanId: top.span_id,\n traceId: state.traceId,\n };\n },\n { fingerprint: \"agent-sdk-common.captureParentForFanOut\" },\n) as () => ParentSnapshot | null;\n\n/**\n * Emit a span linked to a previously captured parent (from\n * `captureParentForFanOut`). The span is started/ended via the normal\n * tracing lifecycle but its `parent_span_id` is forced to the snapshot\n * rather than the current top-of-stack.\n *\n * Returns `null` if there is no active trace or the snapshot's\n * `traceId` doesn't match the active trace.\n */\nexport const emitWithPinnedParent = absorbErrorsSync(\n (opts: EmitWithPinnedParentOptions): SpanHandle | null => {\n const state = getActiveTraceState();\n if (state === null) return null;\n const snap = opts.snapshot;\n if (!snap || snap.traceId !== state.traceId) return null;\n\n const handle = startSpan({\n name: opts.name,\n type: opts.type,\n metadata: opts.metadata,\n });\n if (handle === null) return null;\n handle.span.parent_span_id = snap.parentSpanId;\n return handle;\n },\n { fingerprint: \"agent-sdk-common.emitWithPinnedParent\" },\n) as (opts: EmitWithPinnedParentOptions) => SpanHandle | null;\n\nfunction findSpanById(state: TraceState, spanId: string): SpanData | undefined {\n for (let i = state.spanStack.length - 1; i >= 0; i--) {\n const s = state.spanStack[i];\n if (s && s.span_id === spanId) return s;\n }\n for (let i = state.completedSpans.length - 1; i >= 0; i--) {\n const s = state.completedSpans[i];\n if (s && s.span_id === spanId) return s;\n }\n return undefined;\n}\n\n/**\n * Emit a span as a sibling of a specific tool span — i.e. attach it to\n * the same parent as the tool, not nested inside the tool. Used by\n * `pre_tool` / `post_tool` hook spans.\n *\n * Looks up the tool span in `spanStack` (still open) then\n * `completedSpans` (already closed). Returns `null` if the tool span\n * cannot be found in the current trace.\n */\nexport const emitAsToolSibling = absorbErrorsSync(\n (opts: EmitAsToolSiblingOptions): SpanHandle | null => {\n const state = getActiveTraceState();\n if (state === null) return null;\n const tool = findSpanById(state, opts.toolSpanId);\n if (!tool) return null;\n\n const handle = startSpan({\n name: opts.name,\n type: opts.type,\n metadata: opts.metadata,\n });\n if (handle === null) return null;\n // `parent_span_id` may be undefined if the tool itself was a root\n // child of the trace's agent span only — propagate that as-is.\n handle.span.parent_span_id = tool.parent_span_id;\n return handle;\n },\n { fingerprint: \"agent-sdk-common.emitAsToolSibling\" },\n) as (opts: EmitAsToolSiblingOptions) => SpanHandle | null;\n\n/**\n * Read-only inspector for adapter-side debugging and tests. Returns a\n * shallow copy of the current `spanStack` and `completedSpans` plus the\n * active `traceId`, or `null` if there is no active trace.\n */\nexport const inspectTraceState = absorbErrorsSync(\n (): TraceStateSnapshot | null => {\n const state = getActiveTraceState();\n if (state === null) return null;\n return {\n traceId: state.traceId,\n spanStack: state.spanStack.slice(),\n completedSpans: state.completedSpans.slice(),\n };\n },\n { fingerprint: \"agent-sdk-common.inspectTraceState\" },\n) as () => TraceStateSnapshot | null;\n","/**\n * `anthropic-agent-sdk/hook-instrumentation.ts` — W2-A.4\n *\n * Subscribes to `ClaudeSDKClient`'s `\"hook\"` event channel and emits one\n * `hook`-shaped span (wire `type=tool` + `metadata.tool_kind=\"hook\"`) per\n * fired hook. Hooks logically bracket a tool invocation (`pre_tool` /\n * `post_tool`) or react to a failure (`on_error`); we therefore emit them\n * as SIBLINGS of the wrapped tool span (sharing the tool's parent), not\n * nested under it.\n *\n * When the caller provides a `toolSpanLookup` (typically wired in by the\n * tool-and-subagent W2-A.3 integration), we use `emitAsToolSibling` so\n * the hook attaches to the tool's parent. When no lookup is provided —\n * or the lookup returns null for an unknown tool_use_id — we fall back\n * to `emitHookSpan` which attaches to whatever parent is on top of the\n * active span stack.\n *\n * Hooks are synchronous from our perspective: we emit and immediately\n * close the span. When the hook payload reports `duration_ms`, it lands\n * in `metadata.hook.duration_ms` (the span's own `duration_ms` reflects\n * our emit/close roundtrip, which is effectively zero).\n *\n * Every emission is wrapped in `absorbErrorsSync` per the foundational\n * \"telemetry must never break the host\" guarantee.\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport { emitAsToolSibling } from \"../_agent-sdk-common/context-propagation\";\nimport { emitHookSpan } from \"../_agent-sdk-common/span-emitter\";\nimport type { ClaudeSDKClientLike } from \"./types\";\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\nexport interface InstallHookInstrumentationOptions {\n /**\n * Map of toolUseId → spanId for the currently-open tool spans.\n * Provided by W2-A.3 (tool-and-subagent.ts) when the integration layer\n * composes both. When omitted, hook spans are emitted without sibling\n * linkage (they attach to whatever parent is on top of the stack).\n */\n toolSpanLookup?: (toolUseId: string) => string | null;\n}\n\nexport interface HookEventLike {\n /** Hook name (user-defined identifier from their hook registration). */\n name: string;\n /** Hook kind. */\n kind: \"pre_tool\" | \"post_tool\" | \"on_error\";\n /** When known, the tool_use_id this hook wraps (for sibling linkage). */\n tool_use_id?: string;\n /** Duration in ms reported by the hook callback, if available. */\n duration_ms?: number;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Internal helpers */\n/* ------------------------------------------------------------------------ */\n\nfunction isHookEvent(payload: unknown): payload is HookEventLike {\n if (payload === null || typeof payload !== \"object\") return false;\n const obj = payload as Record<string, unknown>;\n if (typeof obj.name !== \"string\" || obj.name.length === 0) return false;\n const kind = obj.kind;\n if (kind !== \"pre_tool\" && kind !== \"post_tool\" && kind !== \"on_error\") return false;\n return true;\n}\n\nconst _handleHookEvent = (\n payload: unknown,\n options: InstallHookInstrumentationOptions | undefined,\n): void => {\n if (!isHookEvent(payload)) return;\n const { name, kind } = payload;\n const durationMs =\n typeof payload.duration_ms === \"number\" && Number.isFinite(payload.duration_ms)\n ? payload.duration_ms\n : undefined;\n const toolUseId =\n typeof payload.tool_use_id === \"string\" && payload.tool_use_id.length > 0\n ? payload.tool_use_id\n : undefined;\n\n const lookup = options?.toolSpanLookup;\n const toolSpanId =\n toolUseId !== undefined && typeof lookup === \"function\" ? lookup(toolUseId) : null;\n\n if (toolSpanId !== null && toolSpanId !== undefined && toolSpanId.length > 0) {\n const hookMeta: Record<string, unknown> = { name, kind };\n if (durationMs !== undefined) hookMeta.duration_ms = durationMs;\n const handle = emitAsToolSibling({\n name: `anthropic-agent-sdk.hook.${kind}.${name}`,\n type: \"tool\",\n metadata: {\n adapter: \"anthropic-agent-sdk\",\n tool_kind: \"hook\",\n hook: hookMeta,\n },\n toolSpanId,\n });\n // `emitAsToolSibling` may return null when there's no active trace or\n // the tool span can't be found in the current trace. In the latter\n // case we fall back to a plain hook span so the event isn't dropped.\n if (handle !== null && handle !== undefined) {\n handle.end();\n return;\n }\n }\n\n const fallback = emitHookSpan({\n adapter: \"anthropic-agent-sdk\",\n hookName: name,\n hookKind: kind,\n durationMs,\n });\n if (fallback !== null && fallback !== undefined) {\n fallback.end();\n }\n};\n\nconst handleHookEvent: (\n payload: unknown,\n options: InstallHookInstrumentationOptions | undefined,\n) => void = absorbErrorsSync(_handleHookEvent, {\n fingerprint: \"morse.anthropic-agent-sdk.hook-instrumentation.handle\",\n}) as (payload: unknown, options: InstallHookInstrumentationOptions | undefined) => void;\n\n/* ------------------------------------------------------------------------ */\n/* Public installer */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Subscribe to the client's `\"hook\"` event channel and emit one hook\n * span per fired hook. Returns an unsubscribe function.\n *\n * If `client.on` is not a function (the user didn't wire hooks at all),\n * returns a no-op unsubscriber.\n */\nexport function installHookInstrumentation(\n client: ClaudeSDKClientLike,\n options?: InstallHookInstrumentationOptions,\n): () => void {\n if (client === null || typeof client !== \"object\" || typeof client.on !== \"function\") {\n return () => {\n /* no-op */\n };\n }\n\n const listener = (payload: unknown): void => {\n handleHookEvent(payload, options);\n };\n\n try {\n client.on(\"hook\", listener);\n } catch {\n return () => {\n /* no-op */\n };\n }\n\n return (): void => {\n try {\n if (typeof client.off === \"function\") {\n client.off(\"hook\", listener);\n }\n } catch {\n /* swallow — telemetry must never throw at the caller */\n }\n };\n}\n","/**\n * `anthropic-agent-sdk/llm-instrumentation.ts` — taps `message_start` /\n * `message_stop` event pairs in a Claude Agent SDK stream and emits one\n * `llm` span per pair.\n *\n * The wrapper is a passthrough generator: every event is yielded to the\n * downstream caller unchanged. Span emission is a side-effect.\n *\n * One agent run can contain MULTIPLE llm calls (the agent loops on\n * tool-use → tool-result), so we emit one span PER message_start /\n * message_stop pair, not one for the whole stream.\n *\n * `context_segments` are extracted via `extractAnthropicSegments` from the\n * low-level Anthropic adapter (`../anthropic`) when the caller provides the\n * original request params. We DO NOT duplicate that logic here.\n *\n * Sibling W2-A files in this directory handle agent / tool / subagent /\n * hook spans separately.\n */\n\nimport { extractAnthropicSegments } from \"../anthropic\";\nimport { emitLlmSpan } from \"../_agent-sdk-common/span-emitter\";\nimport { calculateCost } from \"../_internal/pricing\";\nimport type { SpanHandle } from \"../_internal/tracing\";\n\nimport type {\n AnthropicMessageCreateParams,\n AnthropicMessageResponse,\n SDKMessageLike,\n} from \"./types\";\nimport { report } from \"../_internal/diagnostics\";\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\nexport interface InstrumentLlmCallsOptions {\n /** Override the model name when the SDK doesn't report one on `message_start`. */\n fallbackModel?: string;\n /**\n * Original request params (the prompt + messages + tools the user passed\n * to `query()`). When provided, allows `extractAnthropicSegments` to\n * build `context_segments`. When omitted, `context_segments` is left\n * unset on the emitted span.\n */\n requestParams?: AnthropicMessageCreateParams;\n}\n\n/* ------------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------------ */\n\ntype UsageBlock = NonNullable<NonNullable<SDKMessageLike[\"message\"]>[\"usage\"]>;\n\n/**\n * Read total input tokens from a `usage` block. We sum the regular\n * `input_tokens` with both cache-related counters because, per the\n * Anthropic Messages API, those represent input tokens that were either\n * written to or read from the prompt cache and are NOT included in\n * `input_tokens` itself.\n *\n * Returns `undefined` if NO input-related counter is present at all.\n */\nfunction readInputTokens(usage: UsageBlock | undefined): number | undefined {\n if (usage === undefined || usage === null || typeof usage !== \"object\") return undefined;\n const base =\n typeof usage.input_tokens === \"number\" && Number.isFinite(usage.input_tokens)\n ? usage.input_tokens\n : 0;\n const cacheWrite =\n typeof usage.cache_creation_input_tokens === \"number\" &&\n Number.isFinite(usage.cache_creation_input_tokens)\n ? usage.cache_creation_input_tokens\n : 0;\n const cacheRead =\n typeof usage.cache_read_input_tokens === \"number\" &&\n Number.isFinite(usage.cache_read_input_tokens)\n ? usage.cache_read_input_tokens\n : 0;\n if (\n usage.input_tokens === undefined &&\n usage.cache_creation_input_tokens === undefined &&\n usage.cache_read_input_tokens === undefined\n ) {\n return undefined;\n }\n return base + cacheWrite + cacheRead;\n}\n\nfunction readOutputTokens(usage: UsageBlock | undefined): number | undefined {\n if (usage === undefined || usage === null || typeof usage !== \"object\") return undefined;\n if (typeof usage.output_tokens === \"number\" && Number.isFinite(usage.output_tokens)) {\n return usage.output_tokens;\n }\n return undefined;\n}\n\nfunction readCacheWriteTokens(usage: UsageBlock | undefined): number | undefined {\n if (usage === undefined || usage === null || typeof usage !== \"object\") return undefined;\n if (\n typeof usage.cache_creation_input_tokens === \"number\" &&\n Number.isFinite(usage.cache_creation_input_tokens) &&\n usage.cache_creation_input_tokens > 0\n ) {\n return usage.cache_creation_input_tokens;\n }\n return undefined;\n}\n\nfunction readCachedInputTokens(usage: UsageBlock | undefined): number | undefined {\n if (usage === undefined || usage === null || typeof usage !== \"object\") return undefined;\n if (\n typeof usage.cache_read_input_tokens === \"number\" &&\n Number.isFinite(usage.cache_read_input_tokens) &&\n usage.cache_read_input_tokens > 0\n ) {\n return usage.cache_read_input_tokens;\n }\n return undefined;\n}\n\n/**\n * Compute and set `handle.span.cost_usd` from the pricing table when the\n * model + token counts are known and no cost has already been set.\n * Mirrors the Python adapter's `calculate_cost(...)` call after usage\n * extraction.\n */\nfunction applyCost(\n handle: SpanHandle,\n model: string,\n inputTokens: number | undefined,\n outputTokens: number | undefined,\n cacheWriteTokens: number | undefined,\n cachedInputTokens: number | undefined,\n): void {\n if (handle.span.cost_usd !== undefined) return;\n if (inputTokens === undefined && outputTokens === undefined) return;\n const cost = calculateCost({\n inputTokens: inputTokens ?? 0,\n outputTokens: outputTokens ?? 0,\n model,\n cachedInputTokens: cachedInputTokens ?? 0,\n cacheWriteTokens: cacheWriteTokens ?? 0,\n });\n if (cost !== undefined) handle.span.cost_usd = cost;\n}\n\n/**\n * Safely run a function; swallow any thrown errors. Telemetry must NEVER\n * surface failures to the caller's iteration.\n */\nfunction safe(fn: () => void): void {\n try {\n fn();\n } catch (err) {\n // intentionally swallowed\n reportSwallowed(err, \"morse.anthropic_agent_sdk.llm_instrumentation\");\n }\n}\n\n/* ------------------------------------------------------------------------ */\n/* instrumentLlmCalls */\n/* ------------------------------------------------------------------------ */\n\n/**\n * Wrap an async iterable of `SDKMessageLike` events: pass each event through\n * unchanged, but tap `message_start` / `message_stop` pairs and emit one\n * `llm` span per pair.\n *\n * Behaviour:\n *\n * - The span opens at `message_start` (model is read from `event.message.model`\n * or falls back to `options.fallbackModel`).\n * - Token usage is read from `event.message.usage` on `message_stop` —\n * the start-event usage is only partial. `input_tokens` sums\n * `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`.\n * - If `requestParams` is provided, `context_segments` is populated via\n * `extractAnthropicSegments(requestParams, response)`.\n * - Orphan `message_stop` events (with no preceding start) are tolerated:\n * no span, no error.\n * - If the iterator ends with an open span (a start without a matching\n * stop), the span is closed as failed.\n * - All telemetry is wrapped in try/catch — it MUST NOT break iteration.\n */\nexport async function* instrumentLlmCalls(\n events: AsyncIterable<SDKMessageLike>,\n options?: InstrumentLlmCallsOptions,\n): AsyncIterable<SDKMessageLike> {\n let openSpan: SpanHandle | null = null;\n const fallbackModel = options?.fallbackModel;\n const requestParams = options?.requestParams;\n\n try {\n for await (const event of events) {\n const eventType = typeof event?.type === \"string\" ? event.type : \"\";\n\n // Real Claude Agent SDK shape: type=`assistant` events carry the full\n // assistant message (one per assistant turn). Each maps to one `llm`\n // span. Mock-shape `message_start`/`message_stop` is still handled\n // below for the unit-test fixtures.\n if (eventType === \"assistant\" && event.message) {\n safe(() => {\n // Close any prior open span — should be rare; assistant events\n // are non-overlapping turns.\n if (openSpan !== null) {\n openSpan.end();\n openSpan = null;\n }\n const reportedModel =\n typeof event.message?.model === \"string\" && event.message.model.length > 0\n ? event.message.model\n : undefined;\n const model = reportedModel ?? fallbackModel;\n if (!model) return;\n const handle = emitLlmSpan({ adapter: \"anthropic-agent-sdk\", model });\n if (!handle) return;\n const usage = event.message?.usage;\n const inputTokens = readInputTokens(usage);\n const outputTokens = readOutputTokens(usage);\n const cacheWriteTokens = readCacheWriteTokens(usage);\n const cachedInputTokens = readCachedInputTokens(usage);\n if (inputTokens !== undefined) handle.span.input_tokens = inputTokens;\n if (outputTokens !== undefined) handle.span.output_tokens = outputTokens;\n if (cacheWriteTokens !== undefined) handle.span.cache_write_tokens = cacheWriteTokens;\n if (cachedInputTokens !== undefined) handle.span.cached_input_tokens = cachedInputTokens;\n if (inputTokens !== undefined && outputTokens !== undefined) {\n handle.span.total_tokens = inputTokens + outputTokens;\n }\n applyCost(handle, model, inputTokens, outputTokens, cacheWriteTokens, cachedInputTokens);\n if (requestParams !== undefined) {\n try {\n const segments = extractAnthropicSegments(\n requestParams,\n event.message as AnthropicMessageResponse | undefined,\n );\n if (Array.isArray(segments) && segments.length > 0) {\n handle.span.context_segments = segments;\n }\n } catch {\n // segment extraction failed; leave context_segments unset\n }\n }\n handle.end();\n });\n } else if (eventType === \"message_start\") {\n // Open a new span. If there's already an open span (start without\n // stop), close the previous one as failed before opening the new one.\n safe(() => {\n if (openSpan !== null) {\n openSpan.end(new Error(\"morse: message_start without preceding message_stop\"));\n openSpan = null;\n }\n const reportedModel =\n typeof event.message?.model === \"string\" && event.message.model.length > 0\n ? event.message.model\n : undefined;\n const model = reportedModel ?? fallbackModel;\n if (model === undefined || model.length === 0) {\n // emitLlmSpan requires a model; skip silently.\n return;\n }\n openSpan = emitLlmSpan({\n adapter: \"anthropic-agent-sdk\",\n model,\n });\n });\n } else if (eventType === \"message_stop\") {\n if (openSpan !== null) {\n const handle: SpanHandle = openSpan;\n openSpan = null;\n safe(() => {\n const usage = event.message?.usage;\n const inputTokens = readInputTokens(usage);\n const outputTokens = readOutputTokens(usage);\n const cacheWriteTokens = readCacheWriteTokens(usage);\n const cachedInputTokens = readCachedInputTokens(usage);\n if (inputTokens !== undefined) {\n handle.span.input_tokens = inputTokens;\n }\n if (outputTokens !== undefined) {\n handle.span.output_tokens = outputTokens;\n }\n if (cacheWriteTokens !== undefined) {\n handle.span.cache_write_tokens = cacheWriteTokens;\n }\n if (cachedInputTokens !== undefined) {\n handle.span.cached_input_tokens = cachedInputTokens;\n }\n if (inputTokens !== undefined && outputTokens !== undefined) {\n handle.span.total_tokens = inputTokens + outputTokens;\n }\n if (handle.span.model) {\n applyCost(\n handle,\n handle.span.model,\n inputTokens,\n outputTokens,\n cacheWriteTokens,\n cachedInputTokens,\n );\n }\n if (requestParams !== undefined) {\n try {\n const segments = extractAnthropicSegments(\n requestParams,\n event.message as AnthropicMessageResponse | undefined,\n );\n if (Array.isArray(segments) && segments.length > 0) {\n handle.span.context_segments = segments;\n }\n } catch {\n // segment extraction failed; leave context_segments unset\n }\n }\n handle.end();\n });\n }\n // Orphan message_stop: ignore silently.\n }\n\n yield event;\n }\n } finally {\n // If iteration ended mid-message (start without stop), close the span as failed.\n if (openSpan !== null) {\n const handle: SpanHandle = openSpan;\n openSpan = null;\n safe(() => {\n handle.end(new Error(\"morse: iterator ended before message_stop\"));\n });\n }\n }\n}\n\n/**\n * Route a swallowed internal error to the diagnostics channel (SDKDIAG-07).\n *\n * Control flow is unchanged — the site still swallows, still returns the same\n * value. It is simply no longer invisible to us.\n */\nfunction reportSwallowed(err: unknown, fingerprint: string): void {\n try {\n report(err, { fingerprint });\n } catch {\n // Reporting must never break the swallow it is reporting on.\n }\n}\n","/**\n * `anthropic-agent-sdk/tool-and-subagent.ts` — instrument the `tool_use` /\n * `tool_result` event pairs emitted by `@anthropic-ai/claude-agent-sdk`'s\n * `ClaudeSDKClient.query()`.\n *\n * Phase 13 W2-A.3. The Anthropic Agent SDK streams a discriminated union\n * of `SDKMessage` events; this module wraps such a stream as a tap that\n * (a) passes every event through unchanged and (b) emits matching\n * Morse spans for tool invocations:\n *\n * - `tool_use` with `name !== \"Task\"` → `type=tool` span (held open\n * until the matching `tool_result` arrives, indexed by\n * `tool_use_id`).\n * - `tool_use` with `name === \"Task\"` → `type=agent` span carrying\n * `metadata.spawn_kind=\"subagent\"` (the canonical subagent.spawn\n * pattern from `_agent-sdk-common/span-emitter.ts`). The span is also\n * held open until the matching `tool_result`.\n * - `tool_result` → look up the open span by `tool_use_id`, stamp the\n * output summary + success flag, close with the appropriate status.\n *\n * **Task-tool fan-out parent pinning.** When the agent loop spawns more\n * than one subagent in the same turn it emits N Task `tool_use` blocks\n * sequentially before any matching `tool_result`. The default\n * top-of-stack parent lookup in `startSpan` would (incorrectly) make\n * later subagent spans children of the earlier siblings. We snapshot\n * the current top-of-stack at the first Task `tool_use` via\n * `captureParentForFanOut` and route every subagent span through\n * `emitWithPinnedParent` so they all share the same parent. The\n * snapshot is cleared once all open Task spans close (or the iterator\n * ends).\n *\n * **Error containment.** All emission is wrapped — telemetry MUST NOT\n * break iteration. If an internal helper throws, the event still flows\n * through to the caller and the offending span is best-effort skipped.\n *\n * **Orphan tolerance.** `tool_result` without a matching `tool_use` is\n * silently ignored. `tool_use` without a matching `tool_result` is\n * closed as failed when the iterator ends.\n */\n\nimport {\n captureParentForFanOut,\n emitWithPinnedParent,\n type ParentSnapshot,\n} from \"../_agent-sdk-common/context-propagation\";\nimport { summarizeToolInput, summarizeToolOutput } from \"../_agent-sdk-common/redaction\";\nimport { emitToolSpan } from \"../_agent-sdk-common/span-emitter\";\nimport type { SpanHandle } from \"../_internal/tracing\";\nimport type { SDKMessageLike } from \"./types\";\nimport { report } from \"../_internal/diagnostics\";\n\nconst ADAPTER = \"anthropic-agent-sdk\" as const;\nconst TASK_TOOL_NAME = \"Task\";\n\nexport interface InstrumentToolsOptions {\n /** Override input byte cap passed to `summarizeToolInput`. */\n toolInputMaxBytes?: number;\n /** Override output byte cap passed to `summarizeToolOutput`. */\n toolOutputMaxBytes?: number;\n}\n\ninterface OpenSpanEntry {\n handle: SpanHandle;\n isSubagent: boolean;\n}\n\nfunction safeCloseFailed(handle: SpanHandle, message: string): void {\n try {\n handle.end(new Error(message));\n } catch {\n /* never propagate */\n }\n}\n\nfunction safeCloseOk(handle: SpanHandle): void {\n try {\n handle.end();\n } catch {\n /* never propagate */\n }\n}\n\n/**\n * Wrap an async iterable of `SDKMessageLike` events: yield every event\n * unchanged but tap `tool_use` / `tool_result` pairs and emit matching\n * `tool` and `subagent` spans against the active Morse trace.\n *\n * No-op outside an active trace (the emitter helpers return `null`).\n * Iterator order and timing are preserved; emission errors are\n * absorbed.\n */\nexport async function* instrumentTools(\n events: AsyncIterable<SDKMessageLike>,\n options?: InstrumentToolsOptions,\n): AsyncIterable<SDKMessageLike> {\n const open = new Map<string, OpenSpanEntry>();\n let fanOutSnapshot: ParentSnapshot | null = null;\n let openSubagentCount = 0;\n\n const inputOpts = options?.toolInputMaxBytes\n ? { maxBytes: options.toolInputMaxBytes }\n : undefined;\n const outputOpts = options?.toolOutputMaxBytes\n ? { maxBytes: options.toolOutputMaxBytes }\n : undefined;\n\n const extractContentBlocks = (event: SDKMessageLike): unknown[] => {\n const msg = (event as { message?: { content?: unknown } }).message;\n const content = msg?.content;\n return Array.isArray(content) ? content : [];\n };\n\n const handleToolUse = (event: SDKMessageLike): void => {\n const toolUseId = typeof event.tool_use_id === \"string\" ? event.tool_use_id : null;\n const name = typeof event.name === \"string\" ? event.name : null;\n if (toolUseId === null || name === null) return;\n if (open.has(toolUseId)) return; // duplicate id — skip\n\n if (name === TASK_TOOL_NAME) {\n // Subagent fan-out: snapshot the parent on the FIRST Task tool_use\n // of this fan-out, then pin every subagent span to that snapshot.\n if (fanOutSnapshot === null) {\n fanOutSnapshot = captureParentForFanOut();\n }\n const input =\n event.input && typeof event.input === \"object\"\n ? (event.input as Record<string, unknown>)\n : {};\n const description =\n typeof input.description === \"string\" && input.description.length > 0\n ? input.description\n : `subagent_${toolUseId}`;\n const taskPrompt = typeof input.prompt === \"string\" ? input.prompt : undefined;\n\n const metadata: Record<string, unknown> = {\n adapter: ADAPTER,\n spawn_kind: \"subagent\",\n parent_agent_name: \"anthropic-agent-sdk\",\n subagent_name: description,\n tool_use_id: toolUseId,\n };\n if (taskPrompt !== undefined) {\n // Reuse the same byte cap policy as tool inputs.\n metadata.task_description = summarizeToolInput(taskPrompt, inputOpts);\n }\n\n let handle: SpanHandle | null = null;\n try {\n if (fanOutSnapshot !== null) {\n handle = emitWithPinnedParent({\n name: `${ADAPTER}.subagent.spawn`,\n type: \"agent\",\n metadata,\n snapshot: fanOutSnapshot,\n });\n }\n } catch {\n handle = null;\n }\n if (handle === null) return;\n open.set(toolUseId, { handle, isSubagent: true });\n openSubagentCount++;\n return;\n }\n\n // Regular tool.\n let handle: SpanHandle | null = null;\n try {\n handle = emitToolSpan({\n adapter: ADAPTER,\n toolName: name,\n inputSummary: summarizeToolInput(event.input, inputOpts),\n attributes: { tool_use_id: toolUseId },\n });\n } catch {\n handle = null;\n }\n if (handle === null) return;\n open.set(toolUseId, { handle, isSubagent: false });\n };\n\n const handleToolResult = (event: SDKMessageLike): void => {\n const toolUseId = typeof event.tool_use_id === \"string\" ? event.tool_use_id : null;\n if (toolUseId === null) return;\n const entry = open.get(toolUseId);\n if (!entry) return; // orphan tolerated\n\n open.delete(toolUseId);\n const isError = event.is_error === true;\n try {\n const outputSummary = summarizeToolOutput(event.content, outputOpts);\n entry.handle.span.metadata = {\n ...(entry.handle.span.metadata ?? {}),\n tool_output_summary: outputSummary,\n };\n if (entry.isSubagent) {\n // Mirror the success flag on subagent metadata for UI rollup.\n (entry.handle.span.metadata as Record<string, unknown>).success = !isError;\n } else {\n // For tool spans, success lives inside metadata.tool per\n // emitToolSpan; mirror it for visibility.\n (entry.handle.span.metadata as Record<string, unknown>).success = !isError;\n }\n } catch (err) {\n /* fall through to end */\n reportSwallowed(err, \"morse.anthropic_agent_sdk.tool_end\");\n }\n if (isError) {\n safeCloseFailed(entry.handle, \"tool error\");\n } else {\n safeCloseOk(entry.handle);\n }\n\n if (entry.isSubagent) {\n openSubagentCount = Math.max(0, openSubagentCount - 1);\n if (openSubagentCount === 0) {\n fanOutSnapshot = null;\n }\n }\n };\n\n try {\n for await (const event of events) {\n try {\n const type = typeof event?.type === \"string\" ? event.type : null;\n if (type === \"tool_use\") {\n handleToolUse(event);\n } else if (type === \"tool_result\") {\n handleToolResult(event);\n } else if (type === \"assistant\" || type === \"user\") {\n // Real Claude Agent SDK shape: tool_use blocks live INSIDE\n // event.message.content[] (assistant) and tool_result blocks\n // live INSIDE event.message.content[] (user). Synthesize the\n // legacy-shape events and route through the same handlers.\n const blocks = extractContentBlocks(event);\n for (const block of blocks) {\n if (!block || typeof block !== \"object\") continue;\n const bt =\n typeof (block as { type?: unknown }).type === \"string\"\n ? (block as { type: string }).type\n : null;\n if (bt === \"tool_use\" && type === \"assistant\") {\n handleToolUse({\n type: \"tool_use\",\n tool_use_id: (block as { id?: string }).id,\n name: (block as { name?: string }).name,\n input: (block as { input?: unknown }).input,\n } as SDKMessageLike);\n } else if (bt === \"tool_result\" && type === \"user\") {\n handleToolResult({\n type: \"tool_result\",\n tool_use_id: (block as { tool_use_id?: string }).tool_use_id,\n content: (block as { content?: unknown }).content,\n is_error: (block as { is_error?: boolean }).is_error,\n } as SDKMessageLike);\n }\n }\n }\n } catch {\n /* never let telemetry break iteration */\n }\n yield event;\n }\n } finally {\n // Iterator ended (normal or abrupt) — fail-close any spans still\n // open. We don't know if the host loop will rerun, so cleanup here\n // is the only safe time.\n for (const [, entry] of open) {\n safeCloseFailed(entry.handle, \"tool_use without matching tool_result\");\n if (entry.isSubagent) {\n openSubagentCount = Math.max(0, openSubagentCount - 1);\n }\n }\n open.clear();\n fanOutSnapshot = null;\n }\n}\n\n/**\n * Route a swallowed internal error to the diagnostics channel (SDKDIAG-07).\n *\n * Control flow is unchanged — the site still swallows, still returns the same\n * value. It is simply no longer invisible to us.\n */\nfunction reportSwallowed(err: unknown, fingerprint: string): void {\n try {\n report(err, { fingerprint });\n } catch {\n // Reporting must never break the swallow it is reporting on.\n }\n}\n","/**\n * `wrapClaudeAgentQuery` — the supported entry point for\n * `@anthropic-ai/claude-agent-sdk` (MHQ-936).\n *\n * ## Why this replaced the client-based path\n *\n * The adapter was originally written against `ClaudeSDKClient`, a class the\n * TypeScript package has never exported — it exists in the *Python* package\n * (`claude_agent_sdk`), and the TS docs were written from those. The global\n * install path looked for `mod.ClaudeSDKClient.prototype.query`, never found\n * it, and silently did nothing; the documented `new ClaudeSDKClient(...)`\n * example threw `TypeError: ClaudeSDKClient is not a constructor`.\n *\n * The package's real surface is a top-level function, and it is the only\n * entry point stable across the versions we support — 0.1.x offered\n * `unstable_v2_createSession` as an alternative and 0.3.x removed it again,\n * while `query` was present throughout:\n *\n * function query(params: {\n * prompt: string | AsyncIterable<SDKUserMessage>;\n * options?: Options;\n * }): Query\n *\n * Note the shape: **one object argument**, not `(prompt, options)`. The old\n * wrapper's two-argument assumption was the Python signature, another symptom\n * of the same root cause.\n *\n * ## The part that is easy to get wrong\n *\n * `Query extends AsyncGenerator<SDKMessage, void>` **plus** control methods —\n * `interrupt()`, `setPermissionMode()`, and others. Wrapping it with a plain\n * `async function*` would return something that iterates correctly and has\n * quietly lost every control method: `interrupt()` becomes `undefined`, and a\n * caller relying on it fails at runtime with no hint that telemetry caused it.\n *\n * So the traced return value is a Proxy: the iteration protocol\n * (`Symbol.asyncIterator` / `next` / `return` / `throw`) is served by the\n * instrumented generator, and every other property is forwarded, bound, to\n * the real `Query`. `tests/agent-sdk/anthropic/query-wrapper.test.ts` asserts\n * that control methods survive, because losing them is invisible otherwise.\n */\nimport { adoptThreadId } from \"../_internal/tracing\";\nimport { emitAgentSpan } from \"../_agent-sdk-common/span-emitter\";\nimport { instrumentLlmCalls } from \"./llm-instrumentation\";\nimport { instrumentTools } from \"./tool-and-subagent\";\nimport { iterateInTrace } from \"./trace-bridge\";\n\nimport type { SDKMessageLike } from \"./types\";\n\n/** The subset of `Query` we depend on: async iteration. Everything else is forwarded. */\nexport interface ClaudeAgentQueryLike extends AsyncIterable<SDKMessageLike> {\n [key: string]: unknown;\n}\n\n/** Real shape of the package's `query` export. One object argument. */\nexport type ClaudeAgentQueryFn = (params: {\n prompt: unknown;\n options?: { model?: unknown; [key: string]: unknown };\n}) => ClaudeAgentQueryLike;\n\nexport interface WrapClaudeAgentQueryOptions {\n /** Agent name on the outer span when none can be derived. */\n defaultAgentName?: string;\n /** Model for the outer span when `params.options.model` is absent. */\n defaultModel?: string;\n /** Max bytes of serialized tool input captured per tool span. */\n toolInputMaxBytes?: number;\n /** Max bytes of serialized tool output captured per tool span. */\n toolOutputMaxBytes?: number;\n}\n\nconst WRAPPED = Symbol.for(\"morse.claudeAgentQuery.wrapped\");\n\n/** True if `fn` is already a traced query — wrapping twice would double-count spans. */\nexport function isClaudeAgentQueryWrapped(fn: unknown): boolean {\n return typeof fn === \"function\" && (fn as unknown as Record<symbol, unknown>)[WRAPPED] === true;\n}\n\n/**\n * Wrap the package's `query` function. The returned function has the same\n * signature and returns a `Query`-compatible object.\n *\n * ```ts\n * import { query } from \"@anthropic-ai/claude-agent-sdk\";\n * import { wrapClaudeAgentQuery } from \"@morsehq-dev/sdk/anthropic-agent-sdk\";\n *\n * const tracedQuery = wrapClaudeAgentQuery(query);\n * for await (const message of tracedQuery({ prompt: \"...\" })) { ... }\n * ```\n *\n * Telemetry never changes what the caller sees: messages are yielded through\n * untouched, and a throw from the underlying query propagates unchanged after\n * the span is closed with the error.\n */\nexport function wrapClaudeAgentQuery<Q extends ClaudeAgentQueryFn>(\n query: Q,\n options: WrapClaudeAgentQueryOptions = {},\n): Q {\n if (typeof query !== \"function\" || isClaudeAgentQueryWrapped(query)) return query;\n\n const traced = function tracedQuery(\n params: Parameters<ClaudeAgentQueryFn>[0],\n ): ClaudeAgentQueryLike {\n // Call through first: the real Query carries the control methods, and we\n // must hand back something that still has them.\n const real = query(params);\n\n const model =\n typeof params?.options?.model === \"string\" ? params.options.model : options.defaultModel;\n\n // The agent span opens on first iteration, not here. A Query that is\n // created and never consumed should not leave a span open forever.\n let handle: ReturnType<typeof emitAgentSpan> = null;\n let opened = false;\n\n async function* withAgentSpan(): AsyncGenerator<SDKMessageLike, void, unknown> {\n if (!opened) {\n opened = true;\n handle = emitAgentSpan({\n adapter: \"anthropic-agent-sdk\",\n agentName: options.defaultAgentName ?? \"claude-agent-sdk\",\n model,\n });\n }\n try {\n for await (const message of real) {\n // MHQ-1029: every CLI message carries the session id, and it is\n // stable across turns of one session — exactly the grouping the\n // dashboard's thread_id expresses.\n adoptThreadId((message as { session_id?: unknown } | undefined)?.session_id);\n yield message;\n }\n } catch (err) {\n handle?.end(err);\n handle = null;\n throw err;\n }\n handle?.end();\n handle = null;\n }\n\n const tapOpts = {\n toolInputMaxBytes: options.toolInputMaxBytes,\n toolOutputMaxBytes: options.toolOutputMaxBytes,\n };\n // tools wraps llm wraps the agent-span generator — same composition order\n // as the previous client path, so span nesting is unchanged.\n //\n // The whole stack runs inside iterateInTrace: without an active trace\n // emitAgentSpan no-ops and the customer sees nothing, which is exactly\n // the silent-failure mode this adapter keeps being bitten by.\n const instrumented = iterateInTrace(\n options.defaultAgentName ?? \"claude-agent-sdk\",\n () =>\n instrumentTools(\n instrumentLlmCalls(withAgentSpan(), { fallbackModel: model }),\n tapOpts,\n ) as AsyncGenerator<SDKMessageLike, void, unknown>,\n );\n\n return new Proxy(real, {\n get(target, prop, receiver) {\n if (prop === Symbol.asyncIterator) return () => instrumented;\n if (prop === \"next\" || prop === \"return\" || prop === \"throw\") {\n const fn = instrumented[prop as \"next\" | \"return\" | \"throw\"];\n return typeof fn === \"function\" ? fn.bind(instrumented) : fn;\n }\n // Everything else — interrupt(), setPermissionMode(), future control\n // methods we have never heard of — goes to the real Query untouched.\n const value = Reflect.get(target, prop, receiver);\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n }) as ClaudeAgentQueryLike;\n } as Q;\n\n Object.defineProperty(traced, WRAPPED, { value: true, enumerable: false });\n return traced;\n}\n","/**\n * Bridge an async generator into a fresh Morse trace.\n *\n * `emitAgentSpan` no-ops (returns `null`) when there is no active trace, so an\n * adapter invoked outside `morse.run()` would emit nothing at all. Both\n * entry points for `@anthropic-ai/claude-agent-sdk` need the same fix: if a\n * trace is already active, attach to it; otherwise open one whose lifetime is\n * bound to the iteration, not to the synchronous call.\n *\n * The awkward part is that `runAsync` owns a callback's lifetime while an\n * adapter must hand a generator back to the caller. So the generator is driven\n * *inside* `runAsync` and its events are teed out through a promise-handoff\n * queue. Extracted from `client-wrapper.ts` (where it was written for the\n * client path) so the `query()` path in `query-wrapper.ts` reuses it rather\n * than growing a second, subtly different copy — MHQ-936.\n */\nimport { getActiveTraceState, runAsync as _runAsync } from \"../_internal/tracing\";\n\nimport type { SDKMessageLike } from \"./types\";\n\ntype QueueItem =\n | { kind: \"value\"; value: SDKMessageLike }\n | { kind: \"error\"; error: unknown }\n | { kind: \"end\" };\n\n/**\n * Run `makeGenerator()` inside a trace and yield its events.\n *\n * Inside an existing trace this is a straight pass-through — the caller's\n * spans nest under their root. Outside one, a fresh trace named `agentName`\n * is opened and drains when iteration completes or throws.\n */\nexport function iterateInTrace(\n agentName: string,\n makeGenerator: () => AsyncGenerator<SDKMessageLike, void, unknown>,\n): AsyncGenerator<SDKMessageLike, void, unknown> {\n if (getActiveTraceState() !== null) {\n return makeGenerator();\n }\n\n return (async function* outerTrace(): AsyncGenerator<SDKMessageLike, void, unknown> {\n const queue: QueueItem[] = [];\n let notify: (() => void) | null = null;\n const waitForItem = (): Promise<void> =>\n new Promise((resolve) => {\n if (queue.length > 0) {\n resolve();\n } else {\n notify = (): void => {\n notify = null;\n resolve();\n };\n }\n });\n\n const runPromise = _runAsync({ agentName }, async (runHandle) => {\n try {\n for await (const event of makeGenerator()) {\n queue.push({ kind: \"value\", value: event });\n notify?.();\n }\n runHandle.setOutcome(true);\n } catch (err) {\n queue.push({ kind: \"error\", error: err });\n notify?.();\n throw err;\n } finally {\n queue.push({ kind: \"end\" });\n notify?.();\n }\n return null;\n });\n // runAsync rethrows; the error is already queued for the consumer, so\n // swallow here purely to avoid an unhandled rejection.\n runPromise.catch(() => {\n /* already handled via queue */\n });\n\n while (true) {\n if (queue.length === 0) await waitForItem();\n const item = queue.shift();\n if (!item) continue;\n if (item.kind === \"value\") {\n yield item.value;\n } else if (item.kind === \"error\") {\n throw item.error;\n } else {\n return;\n }\n }\n })();\n}\n","/**\n * `@morsehq-dev/sdk/anthropic-agent-sdk` — public surface for the\n * `@anthropic-ai/claude-agent-sdk` adapter.\n *\n * Composes the four W2-A surfaces:\n *\n * - `client-wrapper.ts` opens the outer `agent` span around `query()`.\n * - `llm-instrumentation.ts` taps `message_start` / `message_stop` pairs\n * and emits `llm` spans.\n * - `tool-and-subagent.ts` taps `tool_use` / `tool_result` pairs and\n * emits `tool` spans (regular tools) or `agent` spans with\n * `metadata.spawn_kind=\"subagent\"` (Task fan-out).\n * - `hook-instrumentation.ts` subscribes to the client's `\"hook\"` event\n * channel and emits one `tool`-typed `tool_kind=\"hook\"` span per hook.\n *\n * The convenience composer `wrapClaudeAgentSDKWithFullInstrumentation`\n * stacks them in the correct order: outer `wrapClaudeAgentSDK` opens the\n * agent span; inner generators (`instrumentLlmCalls`, `instrumentTools`)\n * are chained around the underlying query iterator so events flow once\n * through both taps before reaching the caller. Hook subscription is\n * event-based (decoupled).\n *\n * See `openspec/changes/2026-05-26-phase-13-ts-agent-sdk-adapters/`.\n */\n\nimport { wrapClaudeAgentSDK, type WrapClaudeAgentSDKOptions } from \"./client-wrapper\";\nimport {\n installHookInstrumentation,\n type InstallHookInstrumentationOptions,\n} from \"./hook-instrumentation\";\nimport { instrumentLlmCalls, type InstrumentLlmCallsOptions } from \"./llm-instrumentation\";\nimport { instrumentTools, type InstrumentToolsOptions } from \"./tool-and-subagent\";\n\nimport type { ClaudeSDKClientLike, ClaudeSDKQueryOptions, SDKMessageLike } from \"./types\";\n\n/* ------------------------------------------------------------------------ */\n/* Re-exports */\n/* ------------------------------------------------------------------------ */\n\nexport type { ClaudeSDKClientLike, ClaudeSDKQueryOptions, SDKMessageLike } from \"./types\";\n\n// MHQ-936: `wrapClaudeAgentQuery` is THE entry point for the real\n// `@anthropic-ai/claude-agent-sdk`, whose public surface is a top-level\n// `query({ prompt, options })`. The client-based exports below work for any\n// object with a `.query` method but do not match the TS package's own API.\nexport { isClaudeAgentQueryWrapped, wrapClaudeAgentQuery } from \"./query-wrapper\";\nexport type {\n ClaudeAgentQueryFn,\n ClaudeAgentQueryLike,\n WrapClaudeAgentQueryOptions,\n} from \"./query-wrapper\";\n\nexport {\n instrumentClaudeAgentSDK,\n isClaudeAgentSDKWrapped,\n wrapClaudeAgentSDK,\n} from \"./client-wrapper\";\nexport type { WrapClaudeAgentSDKOptions } from \"./client-wrapper\";\n\nexport { instrumentLlmCalls } from \"./llm-instrumentation\";\nexport type { InstrumentLlmCallsOptions } from \"./llm-instrumentation\";\n\nexport { instrumentTools } from \"./tool-and-subagent\";\nexport type { InstrumentToolsOptions } from \"./tool-and-subagent\";\n\nexport { installHookInstrumentation } from \"./hook-instrumentation\";\nexport type { HookEventLike, InstallHookInstrumentationOptions } from \"./hook-instrumentation\";\n\n/* ------------------------------------------------------------------------ */\n/* Composed convenience: wrapClaudeAgentSDKWithFullInstrumentation */\n/* ------------------------------------------------------------------------ */\n\nexport interface FullInstrumentationOptions\n extends\n WrapClaudeAgentSDKOptions,\n InstrumentLlmCallsOptions,\n InstrumentToolsOptions,\n InstallHookInstrumentationOptions {}\n\nexport interface FullInstrumentationResult<C extends ClaudeSDKClientLike> {\n /** The Proxy-wrapped client. Drop-in replacement for the original. */\n client: C;\n /**\n * Tear-down. Currently disconnects the hook listener. The outer-span\n * Proxy and generator wrapping are inert when not invoked, so there's\n * no other cleanup required — subsequent `query()` calls on the\n * returned client will still emit telemetry until callers drop the\n * reference.\n */\n dispose: () => void;\n}\n\nconst FULL_WRAP_SENTINEL = Symbol.for(\"morse.anthropic-agent-sdk.full-wrapped\");\n\ninterface FullWrappedMarker {\n [FULL_WRAP_SENTINEL]?: FullInstrumentationResult<ClaudeSDKClientLike>;\n}\n\n/**\n * Compose all four W2-A instrumentation layers on a single\n * `ClaudeSDKClient`. Returns the wrapped client plus a `dispose()` that\n * removes the hook listener.\n *\n * Idempotent: re-wrapping a previously full-wrapped client returns the\n * original result (same `client` reference, same `dispose`).\n *\n * Composition order (outer → inner):\n *\n * 1. `wrapClaudeAgentSDK` — opens the outer `agent` span around the\n * whole iteration and ensures a trace is active.\n * 2. `instrumentLlmCalls` — taps `message_start` / `message_stop`\n * pairs.\n * 3. `instrumentTools` — taps `tool_use` / `tool_result` pairs.\n * 4. The underlying `client.query()` iterator.\n *\n * `installHookInstrumentation` runs in parallel via the event channel.\n */\nexport function wrapClaudeAgentSDKWithFullInstrumentation<C extends ClaudeSDKClientLike>(\n client: C,\n options: FullInstrumentationOptions = {},\n): FullInstrumentationResult<C> {\n // Idempotency: a client we've already full-wrapped carries the sentinel.\n const existing = (client as FullWrappedMarker)[FULL_WRAP_SENTINEL];\n if (existing) {\n return existing as FullInstrumentationResult<C>;\n }\n\n const wrapOpts: WrapClaudeAgentSDKOptions = {\n defaultAgentName: options.defaultAgentName,\n defaultModel: options.defaultModel,\n };\n const llmOpts: InstrumentLlmCallsOptions = {\n fallbackModel: options.defaultModel,\n };\n const toolOpts: InstrumentToolsOptions = {\n toolInputMaxBytes: options.toolInputMaxBytes,\n toolOutputMaxBytes: options.toolOutputMaxBytes,\n };\n const hookOpts: InstallHookInstrumentationOptions = {\n toolSpanLookup: options.toolSpanLookup,\n };\n\n // Layer 1: outer agent span via the standard wrapper.\n const outerWrapped = wrapClaudeAgentSDK(client, wrapOpts);\n\n // Layer 2 + 3: wrap the wrapped client's `query()` in a Proxy that\n // composes the llm + tool generators around the outer wrapper's\n // returned iterator.\n const composed = new Proxy(outerWrapped, {\n get(target, prop, receiver) {\n if (prop === \"query\") {\n const outerQuery = (target as ClaudeSDKClientLike).query.bind(target) as (\n prompt: string | unknown,\n options?: ClaudeSDKQueryOptions,\n ) => AsyncIterable<SDKMessageLike> | Promise<AsyncIterable<SDKMessageLike>>;\n\n return function composedQuery(\n prompt: string | unknown,\n callOptions?: ClaudeSDKQueryOptions,\n ): AsyncIterable<SDKMessageLike> {\n async function* compose(): AsyncGenerator<SDKMessageLike, void, unknown> {\n const ret = outerQuery(prompt, callOptions);\n const iter = (\n ret instanceof Promise ? await ret : ret\n ) as AsyncIterable<SDKMessageLike>;\n // Compose: tools wraps llm wraps the outer iterator. Order\n // between the two passthrough taps doesn't affect span\n // emission (they observe disjoint event types) but we keep\n // tools as the outermost tap so its fan-out parent snapshot\n // sees the deepest available active span.\n const llmTapped = instrumentLlmCalls(iter, llmOpts);\n const toolTapped = instrumentTools(llmTapped, toolOpts);\n for await (const event of toolTapped) {\n yield event;\n }\n }\n return compose();\n };\n }\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === \"function\") {\n return (value as (...a: unknown[]) => unknown).bind(target);\n }\n return value;\n },\n });\n\n // Layer 4: hook subscription (event-driven).\n const unsubscribeHooks = installHookInstrumentation(client, hookOpts);\n\n let disposed = false;\n const dispose = (): void => {\n if (disposed) return;\n disposed = true;\n try {\n unsubscribeHooks();\n } catch {\n /* never propagate */\n }\n };\n\n const result: FullInstrumentationResult<C> = {\n client: composed as C,\n dispose,\n };\n\n // Mark the original client so re-wrapping is idempotent. We tag both\n // the original and the composed proxy so callers passing either back\n // in get the same result.\n try {\n (client as FullWrappedMarker)[FULL_WRAP_SENTINEL] =\n result as FullInstrumentationResult<ClaudeSDKClientLike>;\n } catch {\n /* read-only target — best-effort idempotency only */\n }\n\n return result;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { AnthropicMessageCreateParams } from '../anthropic/index.cjs';
2
- import '../spans-DZtMuBvc.cjs';
2
+ import '../spans-CBMWNg2C.cjs';
3
3
 
4
4
  /**
5
5
  * Structural types for `@anthropic-ai/claude-agent-sdk` integration.
@@ -1,5 +1,5 @@
1
1
  import { AnthropicMessageCreateParams } from '../anthropic/index.js';
2
- import '../spans-DZtMuBvc.js';
2
+ import '../spans-CBMWNg2C.js';
3
3
 
4
4
  /**
5
5
  * Structural types for `@anthropic-ai/claude-agent-sdk` integration.
@@ -1,11 +1,11 @@
1
- import { extractAnthropicSegments } from '../chunk-J5FEPM7L.js';
2
- import '../chunk-3ONFIKKC.js';
3
- import { summarizeToolInput, summarizeToolOutput } from '../chunk-SFI36VWW.js';
4
- import { emitHookSpan, emitAgentSpan, emitLlmSpan, emitToolSpan } from '../chunk-KWOSUW7B.js';
5
- import { absorbErrorsAsync, absorbErrorsSync } from '../chunk-6FLGLD72.js';
1
+ import { extractAnthropicSegments } from '../chunk-XS4P7XPV.js';
2
+ import '../chunk-L7AD4KUD.js';
3
+ import { summarizeToolInput, summarizeToolOutput } from '../chunk-QBDTQTMN.js';
4
+ import { emitHookSpan, emitAgentSpan, emitLlmSpan, emitToolSpan } from '../chunk-GULJAURY.js';
5
+ import { absorbErrorsAsync, absorbErrorsSync } from '../chunk-ERH3TNXZ.js';
6
6
  import { calculateCost } from '../chunk-XTKMUJWI.js';
7
7
  import '../chunk-4JPZV2VZ.js';
8
- import { init_tracing, getActiveTraceState, startSpan, init_diagnostics, runAsync, report } from '../chunk-ZIMGB7IT.js';
8
+ import { init_tracing, getActiveTraceState, startSpan, init_diagnostics, runAsync, report, adoptThreadId } from '../chunk-HJV35HWL.js';
9
9
 
10
10
  // src/anthropic-agent-sdk/client-wrapper.ts
11
11
  init_tracing();
@@ -622,6 +622,9 @@ function reportSwallowed2(err, fingerprint) {
622
622
  }
623
623
  }
624
624
 
625
+ // src/anthropic-agent-sdk/query-wrapper.ts
626
+ init_tracing();
627
+
625
628
  // src/anthropic-agent-sdk/trace-bridge.ts
626
629
  init_tracing();
627
630
  function iterateInTrace(agentName, makeGenerator) {
@@ -698,6 +701,7 @@ function wrapClaudeAgentQuery(query, options = {}) {
698
701
  }
699
702
  try {
700
703
  for await (const message of real) {
704
+ adoptThreadId(message?.session_id);
701
705
  yield message;
702
706
  }
703
707
  } catch (err) {