@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
@@ -254,7 +254,7 @@ function redactValue(value, config, depth = 0) {
254
254
  }
255
255
  return value;
256
256
  }
257
- var PATTERN_ORDER, MANDATORY_PATTERNS, DEFAULT_OFF_PATTERNS, SHORT_KEYS, PATTERNS, EXTRA_PATTERN_CAP, EXTRA_PATTERN_CHAR_CAP, MAX_DEPTH;
257
+ var PATTERN_ORDER, MANDATORY_PATTERNS, DEFAULT_OFF_PATTERNS, SHORT_KEYS, SECRET_ASSIGNMENT_SOURCE, PATTERNS, EXTRA_PATTERN_CAP, EXTRA_PATTERN_CHAR_CAP, MAX_DEPTH;
258
258
  var init_redaction = __esm({
259
259
  "src/_internal/redaction.ts"() {
260
260
  PATTERN_ORDER = [
@@ -265,7 +265,10 @@ var init_redaction = __esm({
265
265
  "phone_us",
266
266
  "phone_e164",
267
267
  "ssn_us",
268
- "ip_address"
268
+ "ip_address",
269
+ // Last: the value-shaped patterns above are more specific, so a JWT inside
270
+ // `authorization: Bearer eyJ...` gets its own tag before this one runs.
271
+ "secret_assignment"
269
272
  ];
270
273
  MANDATORY_PATTERNS = /* @__PURE__ */ new Set([
271
274
  "api_key_prefixed",
@@ -282,8 +285,13 @@ var init_redaction = __esm({
282
285
  phone_us: "phone",
283
286
  phone_e164: "phone",
284
287
  ssn_us: "ssn",
285
- ip_address: "ip"
288
+ ip_address: "ip",
289
+ secret_assignment: "secret"
290
+ // pragma: allowlist secret — a label, not a value
286
291
  };
292
+ SECRET_ASSIGNMENT_SOURCE = // Compound keys accept `=` or `:`; bare `secret` requires `=`, because with
293
+ // `:` it is more often a marker (`k8s-secret: mounted`) than an assignment.
294
+ `(?:(?:password|passwd|pwd|client[-_]?secret|secret[-_]?key|private[-_]?key|access[-_]?key|api[-_]?key|auth[-_]?token|access[-_]?token|refresh[-_]?token|id[-_]?token|session[-_]?token|authorization|credentials?)["']?\\s*[=:]|\\bsecret["']?\\s*=)\\s*(?:bearer\\s+)?(?:"[^"]*"|'[^']*'|\\S+)`;
287
295
  PATTERNS = {
288
296
  api_key_prefixed: new RegExp(
289
297
  "\\b(?:sk-[A-Za-z0-9_-]{20,}|sk_(?:live|test)_[A-Za-z0-9]{20,}|mhq_[A-Za-z0-9]{20,}|av_[A-Za-z0-9]{20,}|ghp_[A-Za-z0-9]{36}|gho_[A-Za-z0-9]{36}|ghu_[A-Za-z0-9]{36}|ghs_[A-Za-z0-9]{36}|ghr_[A-Za-z0-9]{36}|xox[bopsa]-[0-9A-Za-z\\-]{10,}|(?:AKIA|ASIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASCA)[0-9A-Z]{16})\\b",
@@ -314,7 +322,17 @@ var init_redaction = __esm({
314
322
  ip_address: new RegExp(
315
323
  "\\b(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}|(?:[A-F0-9]{1,4}:){2,7}[A-F0-9]{1,4})\\b",
316
324
  "gi"
317
- )
325
+ ),
326
+ // MHQ-973 — key-context secret assignment. Every pattern above is
327
+ // VALUE-shaped: it recognises a credential by its own format. That cannot
328
+ // catch `password=hunter2` — `hunter2` is an ordinary word, and only the KEY
329
+ // marks it as a secret.
330
+ //
331
+ // Deliberately excludes a bare `token`: this is an LLM-observability SDK, and
332
+ // `input_tokens=100` / `max_tokens=4096` are core telemetry. Only unambiguous
333
+ // `*_token` compounds match. No leading `\\b` either, so `PGPASSWORD=` and
334
+ // `MYSQL_PWD=` are caught; the `[=:]` anchor is what prevents false positives.
335
+ secret_assignment: new RegExp(SECRET_ASSIGNMENT_SOURCE, "gi")
318
336
  };
319
337
  EXTRA_PATTERN_CAP = 10;
320
338
  EXTRA_PATTERN_CHAR_CAP = 256;
@@ -409,6 +427,7 @@ function redactedMessage(error) {
409
427
  const out = redactValue(raw, activeRedactionConfig);
410
428
  raw = typeof out === "string" ? out : String(out);
411
429
  }
430
+ raw = raw.replace(new RegExp(SECRET_ASSIGNMENT_SOURCE, "gi"), "[REDACTED:secret]");
412
431
  } catch {
413
432
  return "<redaction unavailable>";
414
433
  }
@@ -434,6 +453,7 @@ function recordDrop(reason, category, quantity = 1) {
434
453
  if (checkBucket(localLogBuckets, `drop:${key}`, LOCAL_LOG_LIMIT_PER_WINDOW, LOCAL_LOG_WINDOW_MS)) {
435
454
  console.warn(`morse: dropped ${quantity} ${category} (${reason}) \u2014 telemetry is being lost`);
436
455
  }
456
+ if (transmissionAllowed()) ensureTimer();
437
457
  } catch {
438
458
  }
439
459
  }
@@ -602,12 +622,12 @@ function _resetForTesting() {
602
622
  level = LEVEL_ERROR;
603
623
  activeRedactionConfig = null;
604
624
  }
605
- var SDK_VERSION, LEVEL_OFF, LEVEL_ERROR, LEVEL_DEBUG, VALID_LEVELS, level, RATE_WINDOW_MS, RATE_LIMIT_PER_WINDOW, RATE_LIMIT_PER_WINDOW_DEBUG, rateBuckets, LOCAL_LOG_WINDOW_MS, LOCAL_LOG_LIMIT_PER_WINDOW, localLogBuckets, MAX_STACK_ENTRIES, MAX_MESSAGE_CHARS, MAX_BATCH_EVENTS, ALLOWED_EXTRA_KEYS, DIAGNOSTICS_PATH, MAX_PENDING, FLUSH_INTERVAL_MS, BREAKER_THRESHOLD, BREAKER_COOLDOWN_MS, REASON_QUEUE_FULL, REASON_RETRY_EXHAUSTED, REASON_QUOTA_REJECTED, REASON_SHUTDOWN_DROP, counters, activeRedactionConfig, pending, timer, consecutiveFailures, breakerOpenUntil, reporting, MORSE_PATH_MARKERS, clientConfig;
625
+ var SDK_VERSION, LEVEL_OFF, LEVEL_ERROR, LEVEL_DEBUG, VALID_LEVELS, level, RATE_WINDOW_MS, RATE_LIMIT_PER_WINDOW, RATE_LIMIT_PER_WINDOW_DEBUG, rateBuckets, LOCAL_LOG_WINDOW_MS, LOCAL_LOG_LIMIT_PER_WINDOW, localLogBuckets, MAX_STACK_ENTRIES, MAX_MESSAGE_CHARS, MAX_BATCH_EVENTS, ALLOWED_EXTRA_KEYS, DIAGNOSTICS_PATH, MAX_PENDING, FLUSH_INTERVAL_MS, BREAKER_THRESHOLD, BREAKER_COOLDOWN_MS, REASON_QUEUE_FULL, REASON_RETRY_EXHAUSTED, REASON_QUOTA_REJECTED, REASON_ENCODE_FAILED, REASON_SHUTDOWN_DROP, REASON_AUTH_REJECTED, REASON_ENDPOINT_REJECTED, REASON_SEND_FAILED, counters, activeRedactionConfig, pending, timer, consecutiveFailures, breakerOpenUntil, reporting, MORSE_PATH_MARKERS, clientConfig;
606
626
  var init_diagnostics = __esm({
607
627
  "src/_internal/diagnostics.ts"() {
608
628
  init_env();
609
629
  init_redaction();
610
- SDK_VERSION = "0.5.0" ;
630
+ SDK_VERSION = "0.6.0-rc.1" ;
611
631
  LEVEL_OFF = "off";
612
632
  LEVEL_ERROR = "error";
613
633
  LEVEL_DEBUG = "debug";
@@ -638,7 +658,11 @@ var init_diagnostics = __esm({
638
658
  REASON_QUEUE_FULL = "queue_full";
639
659
  REASON_RETRY_EXHAUSTED = "retry_exhausted";
640
660
  REASON_QUOTA_REJECTED = "quota_rejected";
661
+ REASON_ENCODE_FAILED = "encode_failed";
641
662
  REASON_SHUTDOWN_DROP = "shutdown_drop";
663
+ REASON_AUTH_REJECTED = "auth_rejected";
664
+ REASON_ENDPOINT_REJECTED = "endpoint_rejected";
665
+ REASON_SEND_FAILED = "send_failed";
642
666
  counters = /* @__PURE__ */ new Map();
643
667
  activeRedactionConfig = null;
644
668
  pending = [];
@@ -706,7 +730,10 @@ var init_spans = __esm({
706
730
  // MHQ-482: matches Python's `SpanType.RETRIEVER` (apps/sdk/python/src/morse_ai/spans.py).
707
731
  // @beta — retriever span type is subject to change before SDK v1.0 (see
708
732
  // the plain-LangChain adapter's on_retriever_* callbacks in src/langchain/).
709
- RETRIEVER: "retriever"
733
+ RETRIEVER: "retriever",
734
+ // MHQ-1025: matches Python's `SpanType.HANDOFF`. One span per routing
735
+ // decision between two agents, with `from_agent` / `to_agent` metadata.
736
+ HANDOFF: "handoff"
710
737
  };
711
738
  }
712
739
  });
@@ -781,6 +808,14 @@ function redactAttrValue(value, config) {
781
808
  }
782
809
  return value;
783
810
  }
811
+ function dropReasonForExportError(error) {
812
+ const code = error?.code;
813
+ if (typeof code !== "number") return REASON_RETRY_EXHAUSTED;
814
+ if (code === 429) return REASON_QUOTA_REJECTED;
815
+ if (code === 401 || code === 403) return REASON_AUTH_REJECTED;
816
+ if (code >= 400 && code < 500) return REASON_ENDPOINT_REJECTED;
817
+ return REASON_SEND_FAILED;
818
+ }
784
819
  function getEngine() {
785
820
  if (engine === null) engine = new OtelEngine();
786
821
  return engine;
@@ -788,7 +823,7 @@ function getEngine() {
788
823
  function spanDictToOtelAttributes(spanDict, traceDict, resourceDict, opts) {
789
824
  const attrs = {};
790
825
  const spanType = spanDict.type;
791
- if (typeof spanType === "string" && spanType) attrs["av.span_type"] = spanType;
826
+ if (typeof spanType === "string" && spanType) attrs["morse.span_type"] = spanType;
792
827
  const model = spanDict.model;
793
828
  if (model !== void 0 && model !== null) attrs["gen_ai.request.model"] = String(model);
794
829
  const tokenFields = [
@@ -807,12 +842,12 @@ function spanDictToOtelAttributes(spanDict, traceDict, resourceDict, opts) {
807
842
  }
808
843
  const costUsd = spanDict.cost_usd;
809
844
  if (costUsd !== void 0 && costUsd !== null) {
810
- attrs["av.cost_usd"] = String(costUsd);
845
+ attrs["morse.cost_usd"] = String(costUsd);
811
846
  }
812
847
  for (const [src, otelKey] of [
813
- ["input_data", "av.input_data"],
814
- ["output_data", "av.output_data"],
815
- ["context_segments", "av.context_segments"]
848
+ ["input_data", "morse.input_data"],
849
+ ["output_data", "morse.output_data"],
850
+ ["context_segments", "morse.context_segments"]
816
851
  ]) {
817
852
  const v = spanDict[src];
818
853
  if (v !== void 0 && v !== null) {
@@ -824,35 +859,36 @@ function spanDictToOtelAttributes(spanDict, traceDict, resourceDict, opts) {
824
859
  if (metadata && typeof metadata === "object") {
825
860
  for (const [key, value] of Object.entries(metadata)) {
826
861
  const encoded = jsonCapped(value, opts.maxFieldBytes);
827
- if (encoded !== null) attrs[`av.metadata.${key}`] = encoded;
862
+ if (encoded !== null) attrs[`morse.metadata.${key}`] = encoded;
828
863
  }
829
864
  }
830
865
  const errorMessage = spanDict.error_message;
831
866
  if (opts.isRoot) {
832
867
  const threadId = traceDict.thread_id;
833
- if (threadId !== void 0 && threadId !== null) attrs["av.thread_id"] = String(threadId);
868
+ if (threadId !== void 0 && threadId !== null) attrs["morse.thread_id"] = String(threadId);
834
869
  const userId = traceDict.user_id;
835
- if (userId !== void 0 && userId !== null) attrs["av.user_id"] = String(userId);
870
+ if (userId !== void 0 && userId !== null) attrs["morse.user_id"] = String(userId);
836
871
  const userMetadata = traceDict.user_metadata;
837
872
  if (userMetadata && typeof userMetadata === "object") {
838
873
  const entries = Object.entries(userMetadata);
839
874
  if (entries.length > 0) {
840
- attrs["av.user_metadata"] = JSON.stringify(
875
+ attrs["morse.user_metadata"] = JSON.stringify(
841
876
  Object.fromEntries(entries.map(([k, v]) => [k, String(v)]))
842
877
  );
843
878
  }
844
879
  }
845
880
  const success = traceDict.success;
846
- if (success !== void 0 && success !== null) attrs["av.outcome.success"] = Boolean(success);
881
+ if (success !== void 0 && success !== null)
882
+ attrs["morse.outcome.success"] = Boolean(success);
847
883
  const outcome = traceDict.outcome;
848
- if (outcome !== void 0 && outcome !== null) attrs["av.outcome.label"] = String(outcome);
884
+ if (outcome !== void 0 && outcome !== null) attrs["morse.outcome.label"] = String(outcome);
849
885
  const framework = resourceDict["morse_ai.framework"];
850
- if (typeof framework === "string" && framework) attrs["av.framework"] = framework;
886
+ if (typeof framework === "string" && framework) attrs["morse.framework"] = framework;
851
887
  const source = resourceDict["morse_ai.source"];
852
- if (typeof source === "string" && source) attrs["av.source"] = source;
888
+ if (typeof source === "string" && source) attrs["morse.source"] = source;
853
889
  }
854
890
  if (errorMessage && spanDict.status === "failed") {
855
- attrs["av.error_message"] = String(errorMessage);
891
+ attrs["morse.error_message"] = String(errorMessage);
856
892
  }
857
893
  return attrs;
858
894
  }
@@ -944,7 +980,7 @@ function reportSwallowed(err, fingerprint) {
944
980
  } catch {
945
981
  }
946
982
  }
947
- var INSTRUMENTATION_NAME, DEFAULT_MAX_FIELD_BYTES, TRUNCATION_MARKER, contextManagerRegistered, MAX_U64, RedactingSpanExporter, RecordingSpanExporter, ResultCapturingExporter, OtelEngine, engine;
983
+ var INSTRUMENTATION_NAME, DEFAULT_MAX_FIELD_BYTES, TRUNCATION_MARKER, contextManagerRegistered, MAX_U64, RedactingSpanExporter, DropReportingExporter, RecordingSpanExporter, ResultCapturingExporter, OtelEngine, engine;
948
984
  var init_otel_provider = __esm({
949
985
  "src/_internal/otel-provider.ts"() {
950
986
  init_diagnostics();
@@ -981,6 +1017,29 @@ var init_otel_provider = __esm({
981
1017
  return this.inner.forceFlush ? this.inner.forceFlush() : Promise.resolve();
982
1018
  }
983
1019
  };
1020
+ DropReportingExporter = class {
1021
+ constructor(inner) {
1022
+ this.inner = inner;
1023
+ }
1024
+ inner;
1025
+ export(spans, resultCallback) {
1026
+ this.inner.export(spans, (result) => {
1027
+ if (result.code === ExportResultCode.FAILED) {
1028
+ try {
1029
+ recordDrop(dropReasonForExportError(result.error), "span", spans.length);
1030
+ } catch {
1031
+ }
1032
+ }
1033
+ resultCallback(result);
1034
+ });
1035
+ }
1036
+ shutdown() {
1037
+ return this.inner.shutdown();
1038
+ }
1039
+ forceFlush() {
1040
+ return this.inner.forceFlush ? this.inner.forceFlush() : Promise.resolve();
1041
+ }
1042
+ };
984
1043
  RecordingSpanExporter = class {
985
1044
  spans = [];
986
1045
  export(spans, resultCallback) {
@@ -1047,7 +1106,10 @@ var init_otel_provider = __esm({
1047
1106
  compression: CompressionAlgorithm.GZIP,
1048
1107
  timeoutMillis: opts.timeoutMillis
1049
1108
  });
1050
- let exporter = new RedactingSpanExporter(otlpExporter, opts.redactionConfig);
1109
+ let exporter = new RedactingSpanExporter(
1110
+ new DropReportingExporter(otlpExporter),
1111
+ opts.redactionConfig
1112
+ );
1051
1113
  if (opts.resultSink) {
1052
1114
  exporter = new ResultCapturingExporter(exporter, opts.resultSink);
1053
1115
  }
@@ -1465,6 +1527,18 @@ function setContext(dims) {
1465
1527
  if (state.userMetadata === void 0) state.userMetadata = {};
1466
1528
  Object.assign(state.userMetadata, coerceDims(dims, "morse.tracing.set_context"));
1467
1529
  }
1530
+ function adoptThreadId(value) {
1531
+ const state = getActiveTraceState();
1532
+ if (state === null || state.threadId !== void 0 || value === null || value === void 0) {
1533
+ return;
1534
+ }
1535
+ try {
1536
+ const s = String(value);
1537
+ if (s !== "") state.threadId = s;
1538
+ } catch (err) {
1539
+ report(err, { fingerprint: "morse.tracing.adopt_thread_id" });
1540
+ }
1541
+ }
1468
1542
  function coerceDims(dims, fingerprint) {
1469
1543
  const out = {};
1470
1544
  for (const k of Object.keys(dims)) {
@@ -1665,6 +1739,6 @@ var init_propagation = __esm({
1665
1739
  }
1666
1740
  });
1667
1741
 
1668
- export { DEFAULT_ENDPOINT, REASON_QUEUE_FULL, REASON_QUOTA_REJECTED, REASON_RETRY_EXHAUSTED, REASON_SHUTDOWN_DROP, SpanType, W3C_TRACEPARENT_HEADER, _resetForTesting, _resetForTesting2, buildRedactionConfig, buildTraceEntry, extractTraceparent, flushOnce, formatTraceparent, generateSpanId, generateTraceId, getActiveTraceState, getApiKey, getEndpoint, getEngine, getFlushIntervalSeconds, getInternalSource, getLastTrace, getMaxBatchSize, getMaxFieldBytes, getMaxQueueSize, getRedactionConfig, getSampleRate, getTransport, init_diagnostics, init_env, init_otel_provider, init_propagation, init_redaction, init_spans, init_tracing, injectIntoRequestInit, injectTraceparent, isAutoDetectDisabled, isDbCaptureEnabled, isDisabled, isValidInternalSource, nowIso, recordDrop, redactValue, report, runAsync, runSync, sendTrace, setContext, setDiagnosticsClientConfig, setLevel, setRedactionConfig2 as setRedactionConfig, setSource, setTransport, spanAsync, spanSync, startSpan };
1669
- //# sourceMappingURL=chunk-ZIMGB7IT.js.map
1670
- //# sourceMappingURL=chunk-ZIMGB7IT.js.map
1742
+ export { DEFAULT_ENDPOINT, REASON_AUTH_REJECTED, REASON_ENCODE_FAILED, REASON_ENDPOINT_REJECTED, REASON_QUEUE_FULL, REASON_QUOTA_REJECTED, REASON_RETRY_EXHAUSTED, REASON_SEND_FAILED, REASON_SHUTDOWN_DROP, SpanType, W3C_TRACEPARENT_HEADER, _resetForTesting, _resetForTesting2, adoptThreadId, buildRedactionConfig, buildTraceEntry, extractTraceparent, flushOnce, formatTraceparent, generateSpanId, generateTraceId, getActiveTraceState, getApiKey, getEndpoint, getEngine, getFlushIntervalSeconds, getInternalSource, getLastTrace, getMaxBatchSize, getMaxFieldBytes, getMaxQueueSize, getRedactionConfig, getSampleRate, getTransport, init_diagnostics, init_env, init_otel_provider, init_propagation, init_redaction, init_spans, init_tracing, injectIntoRequestInit, injectTraceparent, isAutoDetectDisabled, isDbCaptureEnabled, isDisabled, isValidInternalSource, nowIso, recordDrop, redactValue, report, runAsync, runSync, sendTrace, setContext, setDiagnosticsClientConfig, setLevel, setRedactionConfig2 as setRedactionConfig, setSource, setTransport, spanAsync, spanSync, startSpan };
1743
+ //# sourceMappingURL=chunk-HJV35HWL.js.map
1744
+ //# sourceMappingURL=chunk-HJV35HWL.js.map