@morphllm/morphsdk 0.2.179 → 0.2.180

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 (220) hide show
  1. package/dist/{chunk-Q5FAU76K.js → chunk-2DLMZDDB.js} +3 -3
  2. package/dist/{chunk-MA2LJGLZ.js → chunk-2WQTCETP.js} +2 -2
  3. package/dist/{chunk-5G3D45TP.js → chunk-35ZAMQ3A.js} +4 -4
  4. package/dist/{chunk-TROXSFNC.js → chunk-4RARO46V.js} +4 -4
  5. package/dist/{chunk-PP2GHVRI.js → chunk-4TMCQZNB.js} +2 -2
  6. package/dist/{chunk-PP2GHVRI.js.map → chunk-4TMCQZNB.js.map} +1 -1
  7. package/dist/{chunk-PSJXKCCP.js → chunk-AERVDGON.js} +2 -2
  8. package/dist/{chunk-PK2OTDD5.js → chunk-BN4IHFWR.js} +2 -2
  9. package/dist/{chunk-53RYMV2B.js → chunk-D4XCP2ZE.js} +3 -3
  10. package/dist/{chunk-GEPVEMCF.js → chunk-DFTKUEF5.js} +2 -2
  11. package/dist/{chunk-4YKNHDJI.js → chunk-EAGSRHRT.js} +2 -2
  12. package/dist/{chunk-S3V5JP26.js → chunk-EJZFQAKT.js} +2 -2
  13. package/dist/{chunk-U3XOCF4O.js → chunk-GVN6B4YX.js} +3 -3
  14. package/dist/{chunk-OK5Y6FH6.js → chunk-GZDRJBI2.js} +2 -2
  15. package/dist/{chunk-I3UFROCM.js → chunk-HXDITEO6.js} +2 -2
  16. package/dist/{chunk-2MSNIGVA.js → chunk-IDMKQWQG.js} +52 -4
  17. package/dist/chunk-IDMKQWQG.js.map +1 -0
  18. package/dist/{chunk-WKKPZO4I.js → chunk-IOZMMARY.js} +2 -2
  19. package/dist/{chunk-ABQMAHEA.js → chunk-IS5TDLAJ.js} +2 -2
  20. package/dist/{chunk-CXE7CVNL.js → chunk-JG5MJI34.js} +2 -2
  21. package/dist/{chunk-RANVC4NO.js → chunk-LBOFTF6A.js} +21 -21
  22. package/dist/{chunk-47MAQT6H.js → chunk-LDXKXBYN.js} +2 -2
  23. package/dist/{chunk-V2QYP4Z7.js → chunk-MWUFDBWQ.js} +2 -2
  24. package/dist/{chunk-OR27NPLB.js → chunk-OE2LFOYB.js} +2 -2
  25. package/dist/{chunk-6VFTPA27.js → chunk-QAZM5ELA.js} +2 -2
  26. package/dist/{chunk-V2BD6NXI.js → chunk-QW33U4EI.js} +4 -4
  27. package/dist/{chunk-WGIMYL4A.js → chunk-STJTJDAV.js} +28 -13
  28. package/dist/chunk-STJTJDAV.js.map +1 -0
  29. package/dist/{chunk-4PT4J6FV.js → chunk-SX2P5ZUP.js} +2 -2
  30. package/dist/{chunk-Y6QK7CDW.js → chunk-TBVIOQ5O.js} +2 -2
  31. package/dist/{chunk-6FQLA42K.js → chunk-TDT6J2X4.js} +2 -2
  32. package/dist/{chunk-CABQ652L.js → chunk-TLXVGE4R.js} +1 -1
  33. package/dist/chunk-TLXVGE4R.js.map +1 -0
  34. package/dist/{chunk-YO7D5VEC.js → chunk-U4KCWD3I.js} +2 -2
  35. package/dist/{chunk-CVH6TA6O.js → chunk-WQC3YOER.js} +3 -3
  36. package/dist/{chunk-ZMXPIXOS.js → chunk-X4VPV3A7.js} +2 -2
  37. package/dist/{chunk-BGRGUSNI.js → chunk-XEQZQTZR.js} +2 -2
  38. package/dist/{chunk-EQJEOG3S.js → chunk-XYHP2TFY.js} +2 -2
  39. package/dist/client.cjs +1 -1
  40. package/dist/client.cjs.map +1 -1
  41. package/dist/client.js +28 -28
  42. package/dist/core/client.cjs +1 -1
  43. package/dist/core/client.cjs.map +1 -1
  44. package/dist/core/client.js +4 -4
  45. package/dist/core/error.cjs +1 -1
  46. package/dist/core/error.cjs.map +1 -1
  47. package/dist/core/error.js +3 -3
  48. package/dist/core/index.cjs +1 -1
  49. package/dist/core/index.cjs.map +1 -1
  50. package/dist/core/index.js +4 -4
  51. package/dist/edge.cjs +1 -1
  52. package/dist/edge.cjs.map +1 -1
  53. package/dist/edge.js +7 -7
  54. package/dist/git/client.cjs +1 -1
  55. package/dist/git/client.cjs.map +1 -1
  56. package/dist/git/client.js +5 -5
  57. package/dist/git/index.cjs +1 -1
  58. package/dist/git/index.cjs.map +1 -1
  59. package/dist/git/index.js +5 -5
  60. package/dist/index.cjs +1 -1
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.js +28 -28
  63. package/dist/modelrouter/core.cjs +1 -1
  64. package/dist/modelrouter/core.cjs.map +1 -1
  65. package/dist/modelrouter/core.js +5 -5
  66. package/dist/modelrouter/index.cjs +1 -1
  67. package/dist/modelrouter/index.cjs.map +1 -1
  68. package/dist/modelrouter/index.js +5 -5
  69. package/dist/{otel-Dk8kdhmZ.d.ts → otel-CG0uqXjp.d.ts} +1 -1
  70. package/dist/subagents/anthropic.cjs +1 -1
  71. package/dist/subagents/anthropic.cjs.map +1 -1
  72. package/dist/subagents/anthropic.js +9 -9
  73. package/dist/subagents/vercel.cjs +1 -1
  74. package/dist/subagents/vercel.cjs.map +1 -1
  75. package/dist/subagents/vercel.js +9 -9
  76. package/dist/tools/browser/anthropic.cjs +1 -1
  77. package/dist/tools/browser/anthropic.cjs.map +1 -1
  78. package/dist/tools/browser/anthropic.js +7 -7
  79. package/dist/tools/browser/core.cjs +1 -1
  80. package/dist/tools/browser/core.cjs.map +1 -1
  81. package/dist/tools/browser/core.js +6 -6
  82. package/dist/tools/browser/index.cjs +1 -1
  83. package/dist/tools/browser/index.cjs.map +1 -1
  84. package/dist/tools/browser/index.js +9 -9
  85. package/dist/tools/browser/openai.cjs +1 -1
  86. package/dist/tools/browser/openai.cjs.map +1 -1
  87. package/dist/tools/browser/openai.js +7 -7
  88. package/dist/tools/browser/profiles/core.cjs +1 -1
  89. package/dist/tools/browser/profiles/core.cjs.map +1 -1
  90. package/dist/tools/browser/profiles/core.js +3 -3
  91. package/dist/tools/browser/profiles/index.cjs +1 -1
  92. package/dist/tools/browser/profiles/index.cjs.map +1 -1
  93. package/dist/tools/browser/profiles/index.js +3 -3
  94. package/dist/tools/browser/vercel.cjs +1 -1
  95. package/dist/tools/browser/vercel.cjs.map +1 -1
  96. package/dist/tools/browser/vercel.js +7 -7
  97. package/dist/tools/codebase_search/anthropic.cjs +1 -1
  98. package/dist/tools/codebase_search/anthropic.cjs.map +1 -1
  99. package/dist/tools/codebase_search/anthropic.js +6 -6
  100. package/dist/tools/codebase_search/core.cjs +1 -1
  101. package/dist/tools/codebase_search/core.cjs.map +1 -1
  102. package/dist/tools/codebase_search/core.js +5 -5
  103. package/dist/tools/codebase_search/index.cjs +1 -1
  104. package/dist/tools/codebase_search/index.cjs.map +1 -1
  105. package/dist/tools/codebase_search/index.js +8 -8
  106. package/dist/tools/codebase_search/openai.cjs +1 -1
  107. package/dist/tools/codebase_search/openai.cjs.map +1 -1
  108. package/dist/tools/codebase_search/openai.js +6 -6
  109. package/dist/tools/codebase_search/vercel.cjs +1 -1
  110. package/dist/tools/codebase_search/vercel.cjs.map +1 -1
  111. package/dist/tools/codebase_search/vercel.js +6 -6
  112. package/dist/tools/compact/core.cjs +1 -1
  113. package/dist/tools/compact/core.cjs.map +1 -1
  114. package/dist/tools/compact/core.js +5 -5
  115. package/dist/tools/compact/index.cjs +1 -1
  116. package/dist/tools/compact/index.cjs.map +1 -1
  117. package/dist/tools/compact/index.js +6 -6
  118. package/dist/tools/fastapply/anthropic.cjs +1 -1
  119. package/dist/tools/fastapply/anthropic.cjs.map +1 -1
  120. package/dist/tools/fastapply/anthropic.js +7 -7
  121. package/dist/tools/fastapply/apply.cjs +1 -1
  122. package/dist/tools/fastapply/apply.cjs.map +1 -1
  123. package/dist/tools/fastapply/apply.js +2 -2
  124. package/dist/tools/fastapply/core.cjs +1 -1
  125. package/dist/tools/fastapply/core.cjs.map +1 -1
  126. package/dist/tools/fastapply/core.js +6 -6
  127. package/dist/tools/fastapply/index.cjs +1 -1
  128. package/dist/tools/fastapply/index.cjs.map +1 -1
  129. package/dist/tools/fastapply/index.js +9 -9
  130. package/dist/tools/fastapply/openai.cjs +1 -1
  131. package/dist/tools/fastapply/openai.cjs.map +1 -1
  132. package/dist/tools/fastapply/openai.js +7 -7
  133. package/dist/tools/fastapply/vercel.cjs +1 -1
  134. package/dist/tools/fastapply/vercel.cjs.map +1 -1
  135. package/dist/tools/fastapply/vercel.js +7 -7
  136. package/dist/tools/index.cjs +1 -1
  137. package/dist/tools/index.cjs.map +1 -1
  138. package/dist/tools/index.js +9 -9
  139. package/dist/tools/reflex/core.cjs +1 -1
  140. package/dist/tools/reflex/core.cjs.map +1 -1
  141. package/dist/tools/reflex/core.js +5 -5
  142. package/dist/tools/reflex/index.cjs +1 -1
  143. package/dist/tools/reflex/index.cjs.map +1 -1
  144. package/dist/tools/reflex/index.js +5 -5
  145. package/dist/tools/utils/resilience.cjs +1 -1
  146. package/dist/tools/utils/resilience.cjs.map +1 -1
  147. package/dist/tools/utils/resilience.js +2 -2
  148. package/dist/tools/warp_grep/agent/runner.cjs +1 -1
  149. package/dist/tools/warp_grep/agent/runner.cjs.map +1 -1
  150. package/dist/tools/warp_grep/agent/runner.js +2 -2
  151. package/dist/tools/warp_grep/anthropic.cjs +1 -1
  152. package/dist/tools/warp_grep/anthropic.cjs.map +1 -1
  153. package/dist/tools/warp_grep/anthropic.js +9 -9
  154. package/dist/tools/warp_grep/client.cjs +1 -1
  155. package/dist/tools/warp_grep/client.cjs.map +1 -1
  156. package/dist/tools/warp_grep/client.js +8 -8
  157. package/dist/tools/warp_grep/gemini.cjs +1 -1
  158. package/dist/tools/warp_grep/gemini.cjs.map +1 -1
  159. package/dist/tools/warp_grep/gemini.js +8 -8
  160. package/dist/tools/warp_grep/index.cjs +1 -1
  161. package/dist/tools/warp_grep/index.cjs.map +1 -1
  162. package/dist/tools/warp_grep/index.js +8 -8
  163. package/dist/tools/warp_grep/openai.cjs +1 -1
  164. package/dist/tools/warp_grep/openai.cjs.map +1 -1
  165. package/dist/tools/warp_grep/openai.js +9 -9
  166. package/dist/tools/warp_grep/vercel.cjs +1 -1
  167. package/dist/tools/warp_grep/vercel.cjs.map +1 -1
  168. package/dist/tools/warp_grep/vercel.js +9 -9
  169. package/dist/tracing/core.cjs +71 -10
  170. package/dist/tracing/core.cjs.map +1 -1
  171. package/dist/tracing/core.d.ts +7 -2
  172. package/dist/tracing/core.js +3 -3
  173. package/dist/tracing/index.cjs +71 -10
  174. package/dist/tracing/index.cjs.map +1 -1
  175. package/dist/tracing/index.d.ts +1 -1
  176. package/dist/tracing/index.js +3 -3
  177. package/dist/tracing/interaction.cjs +52 -3
  178. package/dist/tracing/interaction.cjs.map +1 -1
  179. package/dist/tracing/interaction.d.ts +12 -2
  180. package/dist/tracing/interaction.js +6 -4
  181. package/dist/tracing/otel.cjs.map +1 -1
  182. package/dist/tracing/otel.d.ts +1 -1
  183. package/dist/tracing/otel.js +1 -1
  184. package/dist/version.cjs +1 -1
  185. package/dist/version.cjs.map +1 -1
  186. package/dist/version.js +1 -1
  187. package/package.json +1 -1
  188. package/dist/chunk-2MSNIGVA.js.map +0 -1
  189. package/dist/chunk-CABQ652L.js.map +0 -1
  190. package/dist/chunk-WGIMYL4A.js.map +0 -1
  191. /package/dist/{chunk-Q5FAU76K.js.map → chunk-2DLMZDDB.js.map} +0 -0
  192. /package/dist/{chunk-MA2LJGLZ.js.map → chunk-2WQTCETP.js.map} +0 -0
  193. /package/dist/{chunk-5G3D45TP.js.map → chunk-35ZAMQ3A.js.map} +0 -0
  194. /package/dist/{chunk-TROXSFNC.js.map → chunk-4RARO46V.js.map} +0 -0
  195. /package/dist/{chunk-PSJXKCCP.js.map → chunk-AERVDGON.js.map} +0 -0
  196. /package/dist/{chunk-PK2OTDD5.js.map → chunk-BN4IHFWR.js.map} +0 -0
  197. /package/dist/{chunk-53RYMV2B.js.map → chunk-D4XCP2ZE.js.map} +0 -0
  198. /package/dist/{chunk-GEPVEMCF.js.map → chunk-DFTKUEF5.js.map} +0 -0
  199. /package/dist/{chunk-4YKNHDJI.js.map → chunk-EAGSRHRT.js.map} +0 -0
  200. /package/dist/{chunk-S3V5JP26.js.map → chunk-EJZFQAKT.js.map} +0 -0
  201. /package/dist/{chunk-U3XOCF4O.js.map → chunk-GVN6B4YX.js.map} +0 -0
  202. /package/dist/{chunk-OK5Y6FH6.js.map → chunk-GZDRJBI2.js.map} +0 -0
  203. /package/dist/{chunk-I3UFROCM.js.map → chunk-HXDITEO6.js.map} +0 -0
  204. /package/dist/{chunk-WKKPZO4I.js.map → chunk-IOZMMARY.js.map} +0 -0
  205. /package/dist/{chunk-ABQMAHEA.js.map → chunk-IS5TDLAJ.js.map} +0 -0
  206. /package/dist/{chunk-CXE7CVNL.js.map → chunk-JG5MJI34.js.map} +0 -0
  207. /package/dist/{chunk-RANVC4NO.js.map → chunk-LBOFTF6A.js.map} +0 -0
  208. /package/dist/{chunk-47MAQT6H.js.map → chunk-LDXKXBYN.js.map} +0 -0
  209. /package/dist/{chunk-V2QYP4Z7.js.map → chunk-MWUFDBWQ.js.map} +0 -0
  210. /package/dist/{chunk-OR27NPLB.js.map → chunk-OE2LFOYB.js.map} +0 -0
  211. /package/dist/{chunk-6VFTPA27.js.map → chunk-QAZM5ELA.js.map} +0 -0
  212. /package/dist/{chunk-V2BD6NXI.js.map → chunk-QW33U4EI.js.map} +0 -0
  213. /package/dist/{chunk-4PT4J6FV.js.map → chunk-SX2P5ZUP.js.map} +0 -0
  214. /package/dist/{chunk-Y6QK7CDW.js.map → chunk-TBVIOQ5O.js.map} +0 -0
  215. /package/dist/{chunk-6FQLA42K.js.map → chunk-TDT6J2X4.js.map} +0 -0
  216. /package/dist/{chunk-YO7D5VEC.js.map → chunk-U4KCWD3I.js.map} +0 -0
  217. /package/dist/{chunk-CVH6TA6O.js.map → chunk-WQC3YOER.js.map} +0 -0
  218. /package/dist/{chunk-ZMXPIXOS.js.map → chunk-X4VPV3A7.js.map} +0 -0
  219. /package/dist/{chunk-BGRGUSNI.js.map → chunk-XEQZQTZR.js.map} +0 -0
  220. /package/dist/{chunk-EQJEOG3S.js.map → chunk-XYHP2TFY.js.map} +0 -0
@@ -8,7 +8,7 @@ import {
8
8
  executeGitHubReadFile,
9
9
  executeToolCall,
10
10
  executeToolCallStreaming
11
- } from "./chunk-5G3D45TP.js";
11
+ } from "./chunk-35ZAMQ3A.js";
12
12
 
13
13
  // tools/warp_grep/vercel.ts
14
14
  import { tool } from "ai";
@@ -115,4 +115,4 @@ export {
115
115
  createGitHubReadFileTool,
116
116
  vercel_default
117
117
  };
118
- //# sourceMappingURL=chunk-OR27NPLB.js.map
118
+ //# sourceMappingURL=chunk-OE2LFOYB.js.map
@@ -14,7 +14,7 @@ import {
14
14
  executeToolCall,
15
15
  formatGitHubReadFileResult,
16
16
  formatResult
17
- } from "./chunk-5G3D45TP.js";
17
+ } from "./chunk-35ZAMQ3A.js";
18
18
 
19
19
  // tools/warp_grep/openai.ts
20
20
  var TOOL_PARAMETERS = {
@@ -104,4 +104,4 @@ export {
104
104
  createGitHubReadFileTool,
105
105
  openai_default
106
106
  };
107
- //# sourceMappingURL=chunk-6VFTPA27.js.map
107
+ //# sourceMappingURL=chunk-QAZM5ELA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ProfilesClient
3
- } from "./chunk-6FQLA42K.js";
3
+ } from "./chunk-TDT6J2X4.js";
4
4
  import {
5
5
  buildEmbedCode,
6
6
  buildLiveIframe,
@@ -9,14 +9,14 @@ import {
9
9
  } from "./chunk-YTYCHRQ2.js";
10
10
  import {
11
11
  MorphAPIClient
12
- } from "./chunk-TROXSFNC.js";
12
+ } from "./chunk-4RARO46V.js";
13
13
  import {
14
14
  logger
15
15
  } from "./chunk-F3NCFNUX.js";
16
16
  import {
17
17
  fetchWithRetry,
18
18
  withTimeout
19
- } from "./chunk-47MAQT6H.js";
19
+ } from "./chunk-LDXKXBYN.js";
20
20
  import {
21
21
  APIResource
22
22
  } from "./chunk-LKFZBBTD.js";
@@ -619,4 +619,4 @@ export {
619
619
  getWebp,
620
620
  checkHealth
621
621
  };
622
- //# sourceMappingURL=chunk-V2BD6NXI.js.map
622
+ //# sourceMappingURL=chunk-QW33U4EI.js.map
@@ -2,11 +2,12 @@ import {
2
2
  shipSignal
3
3
  } from "./chunk-PICGNBUE.js";
4
4
  import {
5
- createInteractionApi
6
- } from "./chunk-2MSNIGVA.js";
5
+ createInteractionApi,
6
+ createNoopInteraction
7
+ } from "./chunk-IDMKQWQG.js";
7
8
  import {
8
9
  metadata
9
- } from "./chunk-CABQ652L.js";
10
+ } from "./chunk-TLXVGE4R.js";
10
11
 
11
12
  // tracing/core.ts
12
13
  import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
@@ -32,6 +33,7 @@ var MorphTracing = class {
32
33
  appName: config.appName ?? process.env.npm_package_name ?? "morph-app",
33
34
  disableBatching: config.disableBatching ?? !isProd,
34
35
  traceContent: config.traceContent ?? true,
36
+ headers: config.headers,
35
37
  debug
36
38
  };
37
39
  if (config.disabled) {
@@ -61,7 +63,7 @@ var MorphTracing = class {
61
63
  }
62
64
  const exporter = new OTLPTraceExporter({
63
65
  url: `${baseUrl}/v1/traces`,
64
- headers: { Authorization: `Bearer ${apiKey}`, ...config.headers }
66
+ headers: { Authorization: `Bearer ${apiKey}`, ...this.cfg.headers }
65
67
  });
66
68
  traceloop.initialize({
67
69
  baseUrl,
@@ -80,9 +82,18 @@ var MorphTracing = class {
80
82
  `initialized \u2192 ${baseUrl}/v1/traces (batching ${this.cfg.disableBatching ? "off" : "on"})`
81
83
  );
82
84
  }
83
- /** Begin a new traced interaction (a single user turn / agent run). */
85
+ /**
86
+ * Begin a new traced interaction (a single user turn / agent run). On a
87
+ * disabled instance this returns an inert no-op interaction — callbacks still
88
+ * run, but no spans are created or shipped.
89
+ */
84
90
  begin(ctx) {
85
- const interaction = createInteractionApi(ctx, this.cfg.traceContent);
91
+ if (!this.enabled) return createNoopInteraction(ctx);
92
+ const interaction = createInteractionApi(
93
+ ctx,
94
+ this.cfg.traceContent,
95
+ (eventId) => this.active.delete(eventId)
96
+ );
86
97
  this.active.set(interaction.getEventId(), interaction);
87
98
  return interaction;
88
99
  }
@@ -95,12 +106,11 @@ var MorphTracing = class {
95
106
  * spans/token usage, not a user-facing interaction.
96
107
  */
97
108
  tracer(globalProperties = {}) {
98
- return createInteractionApi(
99
- { userId: globalProperties.userId ?? "batch", properties: globalProperties },
100
- this.cfg.traceContent
101
- );
109
+ const ctx = { userId: globalProperties.userId ?? "batch", properties: globalProperties };
110
+ if (!this.enabled) return createNoopInteraction(ctx);
111
+ return createInteractionApi(ctx, this.cfg.traceContent);
102
112
  }
103
- /** Build Vercel AI SDK telemetry metadata (see `morphsdk/tracing/otel`). */
113
+ /** Build Vercel AI SDK telemetry metadata (see `@morphllm/morphsdk/tracing/otel`). */
104
114
  metadata(opts) {
105
115
  return metadata(opts);
106
116
  }
@@ -112,10 +122,15 @@ var MorphTracing = class {
112
122
  }
113
123
  /** Span processor for `useExternalOtel: true` integrations. */
114
124
  createSpanProcessor(options) {
125
+ const exporter = options?.exporter ?? new OTLPTraceExporter({
126
+ url: `${this.cfg.baseUrl}/v1/traces`,
127
+ headers: { Authorization: `Bearer ${this.cfg.apiKey}`, ...this.cfg.headers }
128
+ });
115
129
  return traceloop.createSpanProcessor({
116
130
  apiKey: this.cfg.apiKey,
117
131
  baseUrl: this.cfg.baseUrl,
118
- ...options
132
+ ...options,
133
+ exporter
119
134
  });
120
135
  }
121
136
  /** Flush any batched spans immediately. Safe to call when idle. */
@@ -140,4 +155,4 @@ export {
140
155
  MorphTracing,
141
156
  morphTracing
142
157
  };
143
- //# sourceMappingURL=chunk-WGIMYL4A.js.map
158
+ //# sourceMappingURL=chunk-STJTJDAV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../tracing/core.ts"],"sourcesContent":["/**\n * Morph Tracing — core initialization.\n *\n * Thin Morph layer over OpenLLMetry / Traceloop. `morphTracing()` initializes\n * Traceloop with a JSON OTLP exporter pointed at Morph's ingest endpoint\n * (`${baseUrl}/v1/traces`, `Authorization: Bearer <apiKey>`) and returns a\n * `MorphTracing` handle for interactions, tools, and signals.\n *\n * We deliberately override Traceloop's default protobuf exporter with the\n * JSON-over-HTTP exporter so the ingest service can parse plain OTLP/JSON.\n */\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport * as traceloop from '@traceloop/node-server-sdk';\n\nimport {\n createInteractionApi,\n createNoopInteraction,\n type Interaction,\n type Tracer,\n} from './interaction.js';\nimport { metadata as buildMetadata } from './otel.js';\nimport { shipSignal } from './signals.js';\nimport type {\n MetadataOptions,\n MorphTracingConfig,\n SignalEvent,\n TraceContext,\n} from './types.js';\n\nconst DEFAULT_BASE_URL = 'https://api.morphllm.com';\n\nexport interface ResolvedConfig {\n apiKey: string;\n baseUrl: string;\n signalsEndpoint: string;\n appName: string;\n disableBatching: boolean;\n traceContent: boolean;\n headers?: Record<string, string>;\n debug: boolean;\n}\n\nfunction log(debug: boolean, ...args: unknown[]): void {\n if (debug) console.log('[morph-tracing]', ...args);\n}\n\n/**\n * Handle returned by {@link morphTracing}. Create interactions with `begin()`,\n * get a non-interactive `tracer()`, attach feedback with `trackSignal()`, and\n * flush/shutdown the exporter.\n */\nexport class MorphTracing {\n private readonly cfg: ResolvedConfig;\n private readonly active = new Map<string, Interaction>();\n readonly enabled: boolean;\n\n constructor(config: MorphTracingConfig = {}) {\n const debug = config.debug ?? process.env.MORPH_TRACING_DEBUG === '1';\n const apiKey = config.apiKey ?? process.env.MORPH_API_KEY ?? '';\n const baseUrlRaw =\n config.baseUrl ?? process.env.MORPH_TRACES_URL ?? DEFAULT_BASE_URL;\n const baseUrl = baseUrlRaw.replace(/\\/+$/, '');\n const isProd = process.env.NODE_ENV === 'production';\n\n this.cfg = {\n apiKey,\n baseUrl,\n signalsEndpoint: `${baseUrl}/v1/signals`,\n appName: config.appName ?? process.env.npm_package_name ?? 'morph-app',\n disableBatching: config.disableBatching ?? !isProd,\n traceContent: config.traceContent ?? true,\n headers: config.headers,\n debug,\n };\n\n if (config.disabled) {\n log(debug, 'disabled — no tracing initialized');\n this.enabled = false;\n return;\n }\n if (!apiKey) {\n console.warn(\n '[morph-tracing] No API key (set MORPH_API_KEY or pass { apiKey }). Tracing disabled.',\n );\n this.enabled = false;\n return;\n }\n\n this.enabled = true;\n if (config.useExternalOtel) {\n // Customer drives their own NodeSDK; just register config, no SDK start.\n traceloop.initialize({\n baseUrl,\n apiKey,\n appName: this.cfg.appName,\n tracingEnabled: false,\n traceContent: this.cfg.traceContent,\n silenceInitializationMessage: true,\n });\n log(debug, 'external OTEL mode — add createSpanProcessor() to your NodeSDK');\n return;\n }\n\n const exporter = new OTLPTraceExporter({\n url: `${baseUrl}/v1/traces`,\n headers: { Authorization: `Bearer ${apiKey}`, ...this.cfg.headers },\n });\n\n traceloop.initialize({\n baseUrl,\n apiKey,\n appName: this.cfg.appName,\n exporter,\n disableBatch: this.cfg.disableBatching,\n traceContent: this.cfg.traceContent,\n instrumentModules: config.instrumentModules as NonNullable<\n Parameters<typeof traceloop.initialize>[0]\n >['instrumentModules'],\n tracingEnabled: true,\n traceloopSyncEnabled: false,\n silenceInitializationMessage: !debug,\n });\n log(\n debug,\n `initialized → ${baseUrl}/v1/traces (batching ${this.cfg.disableBatching ? 'off' : 'on'})`,\n );\n }\n\n /**\n * Begin a new traced interaction (a single user turn / agent run). On a\n * disabled instance this returns an inert no-op interaction — callbacks still\n * run, but no spans are created or shipped.\n */\n begin(ctx: TraceContext & { userId: string; event?: string }): Interaction {\n if (!this.enabled) return createNoopInteraction(ctx);\n const interaction = createInteractionApi(ctx, this.cfg.traceContent, (eventId) =>\n this.active.delete(eventId),\n );\n this.active.set(interaction.getEventId()!, interaction);\n return interaction;\n }\n\n /** Look up an in-flight interaction by its eventId. */\n getActiveInteraction(eventId: string): Interaction | undefined {\n return this.active.get(eventId);\n }\n\n /**\n * Non-interactive tracer for batch jobs where you only care about\n * spans/token usage, not a user-facing interaction.\n */\n tracer(globalProperties: Record<string, string> = {}): Tracer {\n const ctx = { userId: globalProperties.userId ?? 'batch', properties: globalProperties };\n if (!this.enabled) return createNoopInteraction(ctx);\n return createInteractionApi(ctx, this.cfg.traceContent);\n }\n\n /** Build Vercel AI SDK telemetry metadata (see `@morphllm/morphsdk/tracing/otel`). */\n metadata(opts: MetadataOptions): Record<string, string> {\n return buildMetadata(opts);\n }\n\n /** Attach a feedback/quality signal to an interaction by eventId. */\n async trackSignal(signal: SignalEvent | SignalEvent[]): Promise<void> {\n if (!this.enabled) return;\n const signals = Array.isArray(signal) ? signal : [signal];\n await shipSignal(this.cfg.signalsEndpoint, this.cfg.apiKey, signals, this.cfg.debug);\n }\n\n /** Span processor for `useExternalOtel: true` integrations. */\n createSpanProcessor(\n options?: Parameters<typeof traceloop.createSpanProcessor>[0],\n ): ReturnType<typeof traceloop.createSpanProcessor> {\n // Traceloop's default exporter here is OTLP/protobuf, but Morph's ingest\n // parses OTLP/JSON only — supply the JSON exporter unless the caller\n // brings their own.\n const exporter =\n options?.exporter ??\n new OTLPTraceExporter({\n url: `${this.cfg.baseUrl}/v1/traces`,\n headers: { Authorization: `Bearer ${this.cfg.apiKey}`, ...this.cfg.headers },\n });\n return traceloop.createSpanProcessor({\n apiKey: this.cfg.apiKey,\n baseUrl: this.cfg.baseUrl,\n ...options,\n exporter,\n });\n }\n\n /** Flush any batched spans immediately. Safe to call when idle. */\n async forceFlush(): Promise<void> {\n if (!this.enabled) return;\n try {\n await traceloop.forceFlush();\n } catch (err) {\n log(this.cfg.debug, 'forceFlush error (ignored):', err);\n }\n }\n\n /** Flush and stop tracing. */\n async shutdown(): Promise<void> {\n await this.forceFlush();\n }\n}\n\n/** Initialize Morph Tracing and auto-instrument supported AI SDKs. */\nexport function morphTracing(config: MorphTracingConfig = {}): MorphTracing {\n return new MorphTracing(config);\n}\n"],"mappings":"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","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-2HMEZZKK.js";
5
5
  import {
6
6
  executeBrowserTask
7
- } from "./chunk-V2BD6NXI.js";
7
+ } from "./chunk-QW33U4EI.js";
8
8
  import {
9
9
  __export
10
10
  } from "./chunk-PZ5AY32C.js";
@@ -93,4 +93,4 @@ export {
93
93
  createBrowserTool,
94
94
  openai_exports
95
95
  };
96
- //# sourceMappingURL=chunk-4PT4J6FV.js.map
96
+ //# sourceMappingURL=chunk-SX2P5ZUP.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  CompactClient
3
- } from "./chunk-CVH6TA6O.js";
3
+ } from "./chunk-WQC3YOER.js";
4
4
 
5
5
  // tools/compact/utils.ts
6
6
  async function compactFileContexts(files, query, apiKey, apiUrl, maxTokens = 1e4, maxConcurrency = 3) {
@@ -50,4 +50,4 @@ async function compactFileContexts(files, query, apiKey, apiUrl, maxTokens = 1e4
50
50
  export {
51
51
  compactFileContexts
52
52
  };
53
- //# sourceMappingURL=chunk-Y6QK7CDW.js.map
53
+ //# sourceMappingURL=chunk-TBVIOQ5O.js.map
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-2VERUKO2.js";
13
13
  import {
14
14
  fetchWithRetry
15
- } from "./chunk-47MAQT6H.js";
15
+ } from "./chunk-LDXKXBYN.js";
16
16
 
17
17
  // tools/browser/profiles/core.ts
18
18
  var DEFAULT_API_URL = process.env.MORPH_ENVIRONMENT === "DEV" ? "http://localhost:8000" : "https://browser.morphllm.com";
@@ -386,4 +386,4 @@ export {
386
386
  listRepos,
387
387
  getProfileState
388
388
  };
389
- //# sourceMappingURL=chunk-6FQLA42K.js.map
389
+ //# sourceMappingURL=chunk-TDT6J2X4.js.map
@@ -39,4 +39,4 @@ export {
39
39
  otel_default,
40
40
  otel_exports
41
41
  };
42
- //# sourceMappingURL=chunk-CABQ652L.js.map
42
+ //# sourceMappingURL=chunk-TLXVGE4R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../tracing/otel.ts"],"sourcesContent":["/**\n * Morph Tracing — Vercel AI SDK helper.\n *\n * The Vercel AI SDK emits its own OpenTelemetry spans when you pass\n * `experimental_telemetry`. There is nothing to monkey-patch; instead you tag\n * each call with `metadata()` so Morph can attribute the resulting spans to a\n * user/conversation/event.\n *\n * @example\n * ```ts\n * import { generateText } from \"ai\";\n * import { metadata } from \"@morphllm/morphsdk/tracing/otel\";\n *\n * const res = await generateText({\n * model: openai(\"gpt-4o\"),\n * prompt: \"Hello!\",\n * experimental_telemetry: {\n * isEnabled: true,\n * metadata: metadata({ userId: \"user-123\", convoId: \"convo-456\" }),\n * },\n * });\n * ```\n */\nimport type { MetadataOptions } from './types.js';\n\n/**\n * Reserved metadata keys Morph owns. Custom `properties` can't overwrite these,\n * so attribution (user_id / convo_id / event_id) stays intact.\n *\n * The AI SDK stores metadata as `ai.telemetry.metadata.<key>`; Traceloop's span\n * processor copies them to `traceloop.association.properties.<key>`, which is\n * what ClickHouse views read. Use snake_case names (user_id, convo_id, …).\n */\nconst RESERVED_KEYS = new Set(['user_id', 'convo_id', 'event_id', 'event_name']);\n\nfunction uuid(): string {\n // Node 18+ and modern runtimes expose globalThis.crypto.randomUUID.\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c?.randomUUID) return c.randomUUID();\n // Fallback: RFC4122-ish without crypto.\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (ch) => {\n const r = (Math.random() * 16) | 0;\n const v = ch === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * Build the metadata object for the Vercel AI SDK's\n * `experimental_telemetry.metadata`. The values are propagated to every span the\n * AI SDK creates for that call. Generate a fresh `eventId` per call for grouping.\n */\nexport function metadata(opts: MetadataOptions): Record<string, string> {\n const result: Record<string, string> = {\n user_id: opts.userId,\n event_id: opts.eventId ?? uuid(),\n };\n if (opts.convoId) result.convo_id = opts.convoId;\n if (opts.eventName) result.event_name = opts.eventName;\n if (opts.properties) {\n for (const [key, value] of Object.entries(opts.properties)) {\n if (!RESERVED_KEYS.has(key)) result[key] = value;\n }\n }\n return result;\n}\n\nexport default { metadata };\n"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCA,IAAM,gBAAgB,oBAAI,IAAI,CAAC,WAAW,YAAY,YAAY,YAAY,CAAC;AAE/E,SAAS,OAAe;AAEtB,QAAM,IAAK,WAA0D;AACrE,MAAI,GAAG,WAAY,QAAO,EAAE,WAAW;AAEvC,SAAO,uCAAuC,QAAQ,SAAS,CAAC,OAAO;AACrE,UAAM,IAAK,KAAK,OAAO,IAAI,KAAM;AACjC,UAAM,IAAI,OAAO,MAAM,IAAK,IAAI,IAAO;AACvC,WAAO,EAAE,SAAS,EAAE;AAAA,EACtB,CAAC;AACH;AAOO,SAAS,SAAS,MAA+C;AACtE,QAAM,SAAiC;AAAA,IACrC,SAAS,KAAK;AAAA,IACd,UAAU,KAAK,WAAW,KAAK;AAAA,EACjC;AACA,MAAI,KAAK,QAAS,QAAO,WAAW,KAAK;AACzC,MAAI,KAAK,UAAW,QAAO,aAAa,KAAK;AAC7C,MAAI,KAAK,YAAY;AACnB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,UAAU,GAAG;AAC1D,UAAI,CAAC,cAAc,IAAI,GAAG,EAAG,QAAO,GAAG,IAAI;AAAA,IAC7C;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAO,eAAQ,EAAE,SAAS;","names":[]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-2HMEZZKK.js";
4
4
  import {
5
5
  executeBrowserTask
6
- } from "./chunk-V2BD6NXI.js";
6
+ } from "./chunk-QW33U4EI.js";
7
7
  import {
8
8
  __export
9
9
  } from "./chunk-PZ5AY32C.js";
@@ -54,4 +54,4 @@ export {
54
54
  browserTool,
55
55
  vercel_exports
56
56
  };
57
- //# sourceMappingURL=chunk-YO7D5VEC.js.map
57
+ //# sourceMappingURL=chunk-U4KCWD3I.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  MorphAPIClient
3
- } from "./chunk-TROXSFNC.js";
3
+ } from "./chunk-4RARO46V.js";
4
4
  import {
5
5
  MorphError
6
- } from "./chunk-47MAQT6H.js";
6
+ } from "./chunk-LDXKXBYN.js";
7
7
  import {
8
8
  APIResource
9
9
  } from "./chunk-LKFZBBTD.js";
@@ -75,4 +75,4 @@ var CompactClient = class extends APIResource {
75
75
  export {
76
76
  CompactClient
77
77
  };
78
- //# sourceMappingURL=chunk-CVH6TA6O.js.map
78
+ //# sourceMappingURL=chunk-WQC3YOER.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  MorphError
3
- } from "./chunk-47MAQT6H.js";
3
+ } from "./chunk-LDXKXBYN.js";
4
4
 
5
5
  // core/error.ts
6
6
  async function toMorphError(response) {
@@ -21,4 +21,4 @@ async function toMorphError(response) {
21
21
  export {
22
22
  toMorphError
23
23
  };
24
- //# sourceMappingURL=chunk-ZMXPIXOS.js.map
24
+ //# sourceMappingURL=chunk-X4VPV3A7.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  WarpGrepClient,
3
3
  formatResult
4
- } from "./chunk-5G3D45TP.js";
4
+ } from "./chunk-35ZAMQ3A.js";
5
5
  import {
6
6
  CODEBASE_SEARCH_TOOL,
7
7
  SEND_MESSAGE_TOOL,
@@ -285,4 +285,4 @@ function deduplicateContexts(contexts) {
285
285
  export {
286
286
  createExploreSubagent
287
287
  };
288
- //# sourceMappingURL=chunk-BGRGUSNI.js.map
288
+ //# sourceMappingURL=chunk-XEQZQTZR.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  MorphAPIClient
3
- } from "./chunk-TROXSFNC.js";
3
+ } from "./chunk-4RARO46V.js";
4
4
  import {
5
5
  APIResource
6
6
  } from "./chunk-LKFZBBTD.js";
@@ -558,4 +558,4 @@ var MorphGit = class extends APIResource {
558
558
  export {
559
559
  MorphGit
560
560
  };
561
- //# sourceMappingURL=chunk-EQJEOG3S.js.map
561
+ //# sourceMappingURL=chunk-XYHP2TFY.js.map
package/dist/client.cjs CHANGED
@@ -36,7 +36,7 @@ var init_package = __esm({
36
36
  "package.json"() {
37
37
  package_default = {
38
38
  name: "@morphllm/morphsdk",
39
- version: "0.2.179",
39
+ version: "0.2.180",
40
40
  description: "TypeScript SDK and CLI for Morph Fast Apply integration",
41
41
  type: "module",
42
42
  main: "./dist/index.cjs",