@introspection-sdk/introspection-node 0.20.0 → 0.21.0

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 (211) hide show
  1. package/README.md +28 -8
  2. package/dist/auth.d.ts +1 -1
  3. package/dist/client.d.ts +4 -3
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +16 -7
  6. package/dist/client.js.map +1 -1
  7. package/dist/dev-target.js +1 -1
  8. package/dist/index.d.ts +3 -7
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -6
  11. package/dist/index.js.map +1 -1
  12. package/dist/otel/index.d.ts +1 -14
  13. package/dist/otel/index.d.ts.map +1 -1
  14. package/dist/otel/index.js +10 -18
  15. package/dist/otel/index.js.map +1 -1
  16. package/dist/otel/init.d.ts +19 -21
  17. package/dist/otel/init.d.ts.map +1 -1
  18. package/dist/otel/init.js +62 -48
  19. package/dist/otel/init.js.map +1 -1
  20. package/dist/otel/integrations/base.d.ts +17 -37
  21. package/dist/otel/integrations/base.d.ts.map +1 -1
  22. package/dist/otel/integrations/base.js +6 -13
  23. package/dist/otel/integrations/base.js.map +1 -1
  24. package/dist/otel/integrations/index.d.ts +3 -4
  25. package/dist/otel/integrations/index.d.ts.map +1 -1
  26. package/dist/otel/integrations/index.js +6 -25
  27. package/dist/otel/integrations/index.js.map +1 -1
  28. package/dist/otel/integrations/pi.d.ts.map +1 -1
  29. package/dist/otel/integrations/pi.js +9 -1
  30. package/dist/otel/integrations/pi.js.map +1 -1
  31. package/dist/otel/logs.d.ts +41 -8
  32. package/dist/otel/logs.d.ts.map +1 -1
  33. package/dist/otel/logs.js +95 -66
  34. package/dist/otel/logs.js.map +1 -1
  35. package/dist/otel/pi.d.ts +18 -5
  36. package/dist/otel/pi.d.ts.map +1 -1
  37. package/dist/otel/pi.js +38 -9
  38. package/dist/otel/pi.js.map +1 -1
  39. package/dist/otel/register.d.ts +2 -2
  40. package/dist/otel/register.d.ts.map +1 -1
  41. package/dist/otel/register.js +7 -9
  42. package/dist/otel/register.js.map +1 -1
  43. package/dist/otel/setup.d.ts +2 -2
  44. package/dist/otel/setup.d.ts.map +1 -1
  45. package/dist/otel/setup.js +16 -6
  46. package/dist/otel/setup.js.map +1 -1
  47. package/dist/otel/span-processor.d.ts +18 -5
  48. package/dist/otel/span-processor.d.ts.map +1 -1
  49. package/dist/otel/span-processor.js +50 -65
  50. package/dist/otel/span-processor.js.map +1 -1
  51. package/dist/resources/experiments.d.ts +10 -5
  52. package/dist/resources/experiments.d.ts.map +1 -1
  53. package/dist/resources/experiments.js +9 -25
  54. package/dist/resources/experiments.js.map +1 -1
  55. package/dist/resources/recipes.d.ts +6 -6
  56. package/dist/resources/recipes.d.ts.map +1 -1
  57. package/dist/resources/recipes.js +5 -23
  58. package/dist/resources/recipes.js.map +1 -1
  59. package/dist/resources/runtimes.d.ts +2 -2
  60. package/dist/resources/runtimes.d.ts.map +1 -1
  61. package/dist/resources/runtimes.js +2 -2
  62. package/dist/resources/runtimes.js.map +1 -1
  63. package/dist/runner.d.ts +8 -4
  64. package/dist/runner.d.ts.map +1 -1
  65. package/dist/runner.js +26 -18
  66. package/dist/runner.js.map +1 -1
  67. package/dist/types.d.ts +1 -1
  68. package/dist/types.d.ts.map +1 -1
  69. package/dist/types.js +1 -1
  70. package/dist/types.js.map +1 -1
  71. package/dist/utils.d.ts +45 -0
  72. package/dist/utils.d.ts.map +1 -1
  73. package/dist/utils.js +61 -2
  74. package/dist/utils.js.map +1 -1
  75. package/dist/version.d.ts +1 -1
  76. package/dist/version.d.ts.map +1 -1
  77. package/dist/version.js +1 -1
  78. package/dist/version.js.map +1 -1
  79. package/package.json +18 -60
  80. package/.turbo/turbo-build.log +0 -4
  81. package/dist/converters/claude.d.ts +0 -150
  82. package/dist/converters/claude.d.ts.map +0 -1
  83. package/dist/converters/claude.js +0 -211
  84. package/dist/converters/claude.js.map +0 -1
  85. package/dist/converters/gemini.d.ts +0 -90
  86. package/dist/converters/gemini.d.ts.map +0 -1
  87. package/dist/converters/gemini.js +0 -171
  88. package/dist/converters/gemini.js.map +0 -1
  89. package/dist/converters/index.d.ts +0 -9
  90. package/dist/converters/index.d.ts.map +0 -1
  91. package/dist/converters/index.js +0 -9
  92. package/dist/converters/index.js.map +0 -1
  93. package/dist/converters/openai.d.ts +0 -51
  94. package/dist/converters/openai.d.ts.map +0 -1
  95. package/dist/converters/openai.js +0 -269
  96. package/dist/converters/openai.js.map +0 -1
  97. package/dist/converters/openinference.d.ts +0 -107
  98. package/dist/converters/openinference.d.ts.map +0 -1
  99. package/dist/converters/openinference.js +0 -553
  100. package/dist/converters/openinference.js.map +0 -1
  101. package/dist/converters/vercel.d.ts +0 -21
  102. package/dist/converters/vercel.d.ts.map +0 -1
  103. package/dist/converters/vercel.js +0 -236
  104. package/dist/converters/vercel.js.map +0 -1
  105. package/dist/otel/anthropic.d.ts +0 -63
  106. package/dist/otel/anthropic.d.ts.map +0 -1
  107. package/dist/otel/anthropic.js +0 -475
  108. package/dist/otel/anthropic.js.map +0 -1
  109. package/dist/otel/claude-hooks.d.ts +0 -346
  110. package/dist/otel/claude-hooks.d.ts.map +0 -1
  111. package/dist/otel/claude-hooks.js +0 -647
  112. package/dist/otel/claude-hooks.js.map +0 -1
  113. package/dist/otel/claude-wrapper.d.ts +0 -93
  114. package/dist/otel/claude-wrapper.d.ts.map +0 -1
  115. package/dist/otel/claude-wrapper.js +0 -155
  116. package/dist/otel/claude-wrapper.js.map +0 -1
  117. package/dist/otel/gemini.d.ts +0 -56
  118. package/dist/otel/gemini.d.ts.map +0 -1
  119. package/dist/otel/gemini.js +0 -350
  120. package/dist/otel/gemini.js.map +0 -1
  121. package/dist/otel/integrations/anthropic.d.ts +0 -10
  122. package/dist/otel/integrations/anthropic.d.ts.map +0 -1
  123. package/dist/otel/integrations/anthropic.js +0 -26
  124. package/dist/otel/integrations/anthropic.js.map +0 -1
  125. package/dist/otel/integrations/claude-agent.d.ts +0 -12
  126. package/dist/otel/integrations/claude-agent.d.ts.map +0 -1
  127. package/dist/otel/integrations/claude-agent.js +0 -28
  128. package/dist/otel/integrations/claude-agent.js.map +0 -1
  129. package/dist/otel/integrations/gemini.d.ts +0 -11
  130. package/dist/otel/integrations/gemini.d.ts.map +0 -1
  131. package/dist/otel/integrations/gemini.js +0 -23
  132. package/dist/otel/integrations/gemini.js.map +0 -1
  133. package/dist/otel/integrations/langchain.d.ts +0 -15
  134. package/dist/otel/integrations/langchain.d.ts.map +0 -1
  135. package/dist/otel/integrations/langchain.js +0 -43
  136. package/dist/otel/integrations/langchain.js.map +0 -1
  137. package/dist/otel/integrations/mastra.d.ts +0 -14
  138. package/dist/otel/integrations/mastra.d.ts.map +0 -1
  139. package/dist/otel/integrations/mastra.js +0 -31
  140. package/dist/otel/integrations/mastra.js.map +0 -1
  141. package/dist/otel/integrations/openai-agents.d.ts +0 -11
  142. package/dist/otel/integrations/openai-agents.d.ts.map +0 -1
  143. package/dist/otel/integrations/openai-agents.js +0 -30
  144. package/dist/otel/integrations/openai-agents.js.map +0 -1
  145. package/dist/otel/integrations/vercel.d.ts +0 -14
  146. package/dist/otel/integrations/vercel.d.ts.map +0 -1
  147. package/dist/otel/integrations/vercel.js +0 -20
  148. package/dist/otel/integrations/vercel.js.map +0 -1
  149. package/dist/otel/langchain-handler.d.ts +0 -112
  150. package/dist/otel/langchain-handler.d.ts.map +0 -1
  151. package/dist/otel/langchain-handler.js +0 -561
  152. package/dist/otel/langchain-handler.js.map +0 -1
  153. package/dist/otel/mastra-exporter.d.ts +0 -87
  154. package/dist/otel/mastra-exporter.d.ts.map +0 -1
  155. package/dist/otel/mastra-exporter.js +0 -530
  156. package/dist/otel/mastra-exporter.js.map +0 -1
  157. package/dist/otel/openai.d.ts +0 -20
  158. package/dist/otel/openai.d.ts.map +0 -1
  159. package/dist/otel/openai.js +0 -55
  160. package/dist/otel/openai.js.map +0 -1
  161. package/dist/otel/tracing-processor.d.ts +0 -139
  162. package/dist/otel/tracing-processor.d.ts.map +0 -1
  163. package/dist/otel/tracing-processor.js +0 -434
  164. package/dist/otel/tracing-processor.js.map +0 -1
  165. package/eslint.config.mjs +0 -4
  166. package/src/auth.ts +0 -236
  167. package/src/client.ts +0 -163
  168. package/src/converters/claude.ts +0 -343
  169. package/src/converters/gemini.ts +0 -243
  170. package/src/converters/index.ts +0 -50
  171. package/src/converters/openai.ts +0 -300
  172. package/src/converters/openinference.ts +0 -665
  173. package/src/converters/vercel.ts +0 -302
  174. package/src/dev-target.ts +0 -79
  175. package/src/http.ts +0 -43
  176. package/src/index.ts +0 -277
  177. package/src/otel/anthropic.ts +0 -619
  178. package/src/otel/claude-hooks.ts +0 -1116
  179. package/src/otel/claude-wrapper.ts +0 -239
  180. package/src/otel/gemini.ts +0 -483
  181. package/src/otel/index.ts +0 -128
  182. package/src/otel/init.ts +0 -411
  183. package/src/otel/integrations/anthropic.ts +0 -36
  184. package/src/otel/integrations/base.ts +0 -158
  185. package/src/otel/integrations/claude-agent.ts +0 -36
  186. package/src/otel/integrations/gemini.ts +0 -30
  187. package/src/otel/integrations/index.ts +0 -152
  188. package/src/otel/integrations/langchain.ts +0 -60
  189. package/src/otel/integrations/mastra.ts +0 -48
  190. package/src/otel/integrations/openai-agents.ts +0 -47
  191. package/src/otel/integrations/pi.ts +0 -28
  192. package/src/otel/integrations/vercel.ts +0 -26
  193. package/src/otel/langchain-handler.ts +0 -804
  194. package/src/otel/logs.ts +0 -395
  195. package/src/otel/mastra-exporter.ts +0 -714
  196. package/src/otel/openai.ts +0 -93
  197. package/src/otel/pi.ts +0 -94
  198. package/src/otel/register.ts +0 -50
  199. package/src/otel/setup.ts +0 -215
  200. package/src/otel/span-processor.ts +0 -512
  201. package/src/otel/tracing-processor.ts +0 -637
  202. package/src/pagination.ts +0 -10
  203. package/src/proxy-from-env.d.ts +0 -7
  204. package/src/resources/experiments.ts +0 -176
  205. package/src/resources/recipes.ts +0 -74
  206. package/src/resources/runtimes.ts +0 -31
  207. package/src/runner.ts +0 -213
  208. package/src/types.ts +0 -13
  209. package/src/utils.ts +0 -95
  210. package/src/version.ts +0 -2
  211. package/tsconfig.json +0 -8
@@ -1,87 +0,0 @@
1
- /**
2
- * Mastra-compatible Exporter for Introspection.
3
- *
4
- * Extends Mastra's BaseExporter to receive TracingEvents (Mastra's native
5
- * span format) and convert them to gen_ai.* OTel spans for the Introspection
6
- * backend.
7
- *
8
- * **Important:** This module requires `@mastra/observability` and `@mastra/core`
9
- * at runtime. Import via the subpath: `@introspection-sdk/introspection-node/mastra`
10
- *
11
- * @example
12
- * ```ts
13
- * import { Mastra } from "@mastra/core/mastra";
14
- * import { IntrospectionMastraExporter } from "@introspection-sdk/introspection-node/mastra";
15
- *
16
- * const mastra = new Mastra({
17
- * agents: { myAgent },
18
- * observability: {
19
- * configs: {
20
- * otel: {
21
- * serviceName: "my-mastra-app",
22
- * exporters: [new IntrospectionMastraExporter()],
23
- * },
24
- * },
25
- * },
26
- * });
27
- * ```
28
- */
29
- import { BaseExporter } from "@mastra/observability";
30
- import type { TracingEvent, InitExporterOptions } from "@mastra/core/observability";
31
- import { type SpanExporter, type IdGenerator } from "@opentelemetry/sdk-trace-base";
32
- /** Advanced options for testing and customization. */
33
- export interface MastraExporterAdvancedOptions {
34
- /** Custom span exporter for testing. */
35
- spanExporter?: SpanExporter;
36
- /** Custom ID generator for testing. */
37
- idGenerator?: IdGenerator;
38
- /** Use SimpleSpanProcessor instead of BatchSpanProcessor. */
39
- useSimpleSpanProcessor?: boolean;
40
- }
41
- /** Configuration for {@link IntrospectionMastraExporter}. */
42
- export interface IntrospectionMastraExporterOptions {
43
- /** Authentication token (env: INTROSPECTION_TOKEN). */
44
- token?: string;
45
- /** Base URL for the API (env: INTROSPECTION_BASE_OTEL_URL). */
46
- baseUrl?: string;
47
- /** Additional headers to include in requests. */
48
- additionalHeaders?: Record<string, string>;
49
- /** Enable debug logging. */
50
- debug?: boolean;
51
- /** Advanced options for testing. */
52
- advanced?: MastraExporterAdvancedOptions;
53
- }
54
- export declare class IntrospectionMastraExporter extends BaseExporter {
55
- name: string;
56
- private _options;
57
- private _tracerProvider?;
58
- private _tracer?;
59
- private _conversationIds;
60
- private _rootSpans;
61
- constructor(options?: IntrospectionMastraExporterOptions);
62
- /**
63
- * Called by Mastra after the instance is fully configured.
64
- * We defer TracerProvider creation to here so we can use the service name.
65
- */
66
- init(options: InitExporterOptions): void;
67
- private _initProvider;
68
- protected _exportTracingEvent(event: TracingEvent): Promise<void>;
69
- flush(): Promise<void>;
70
- shutdown(): Promise<void>;
71
- private _exportSpan;
72
- /** Ensure a root OTel span exists for this Mastra trace.
73
- * Events arrive in end-order (children first, agent_run last),
74
- * so we create a synthetic root on first encounter. */
75
- private _ensureRoot;
76
- private _createSpan;
77
- private _exportAgentRun;
78
- private _exportModelStep;
79
- private _exportToolCall;
80
- private _getConversationId;
81
- private _convertInput;
82
- private _convertOutput;
83
- /** Extract plain text from a message content field (string, array of parts, or AIv5 parts). */
84
- private _extractTextContent;
85
- private _extractParts;
86
- }
87
- //# sourceMappingURL=mastra-exporter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mastra-exporter.d.ts","sourceRoot":"","sources":["../../src/otel/mastra-exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EAEpB,MAAM,4BAA4B,CAAC;AAOpC,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AAmBvC,sDAAsD;AACtD,MAAM,WAAW,6BAA6B;IAC5C,wCAAwC;IACxC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,uCAAuC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,6DAA6D;IAC7D,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,6DAA6D;AAC7D,MAAM,WAAW,kCAAkC;IACjD,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,4BAA4B;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,6BAA6B,CAAC;CAC1C;AAMD,qBAAa,2BAA4B,SAAQ,YAAY;IAC3D,IAAI,SAAmB;IAEvB,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,eAAe,CAAC,CAAsB;IAC9C,OAAO,CAAC,OAAO,CAAC,CAA+C;IAC/D,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,UAAU,CAAoC;gBAE1C,OAAO,GAAE,kCAAuC;IAU5D;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IASxC,OAAO,CAAC,aAAa;cA4EL,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B,OAAO,CAAC,WAAW;IAsBnB;;4DAEwD;IACxD,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,eAAe;IAuDvB,OAAO,CAAC,gBAAgB;IA+IxB,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,aAAa;IAuDrB,OAAO,CAAC,cAAc;IA6CtB,+FAA+F;IAC/F,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,aAAa;CA6DtB"}
@@ -1,530 +0,0 @@
1
- /**
2
- * Mastra-compatible Exporter for Introspection.
3
- *
4
- * Extends Mastra's BaseExporter to receive TracingEvents (Mastra's native
5
- * span format) and convert them to gen_ai.* OTel spans for the Introspection
6
- * backend.
7
- *
8
- * **Important:** This module requires `@mastra/observability` and `@mastra/core`
9
- * at runtime. Import via the subpath: `@introspection-sdk/introspection-node/mastra`
10
- *
11
- * @example
12
- * ```ts
13
- * import { Mastra } from "@mastra/core/mastra";
14
- * import { IntrospectionMastraExporter } from "@introspection-sdk/introspection-node/mastra";
15
- *
16
- * const mastra = new Mastra({
17
- * agents: { myAgent },
18
- * observability: {
19
- * configs: {
20
- * otel: {
21
- * serviceName: "my-mastra-app",
22
- * exporters: [new IntrospectionMastraExporter()],
23
- * },
24
- * },
25
- * },
26
- * });
27
- * ```
28
- */
29
- import { BaseExporter } from "@mastra/observability";
30
- import { context as otelContext, trace as otelTrace, } from "@opentelemetry/api";
31
- import { BasicTracerProvider, BatchSpanProcessor, SimpleSpanProcessor, } from "@opentelemetry/sdk-trace-base";
32
- import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
33
- import { resourceFromAttributes } from "@opentelemetry/resources";
34
- import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
35
- import { randomUUID } from "crypto";
36
- import { logger, withOtlpHttpsProxy } from "../utils.js";
37
- import { VERSION } from "../version.js";
38
- import { providerCostAttributes } from "@introspection-sdk/types";
39
- // ---------------------------------------------------------------------------
40
- // Exporter
41
- // ---------------------------------------------------------------------------
42
- export class IntrospectionMastraExporter extends BaseExporter {
43
- name = "introspection";
44
- _options;
45
- _tracerProvider;
46
- _tracer;
47
- _conversationIds = new Map();
48
- // Track root OTel spans per Mastra traceId so children share the same trace
49
- _rootSpans = new Map();
50
- constructor(options = {}) {
51
- super({ logLevel: options.debug ? "debug" : "info" });
52
- this._options = options;
53
- const token = options.token || process.env.INTROSPECTION_TOKEN;
54
- if (!token && !options.advanced?.spanExporter) {
55
- this.setDisabled("INTROSPECTION_TOKEN is required");
56
- }
57
- }
58
- /**
59
- * Called by Mastra after the instance is fully configured.
60
- * We defer TracerProvider creation to here so we can use the service name.
61
- */
62
- init(options) {
63
- if (this.isDisabled)
64
- return;
65
- const config = options.config;
66
- const serviceName = config?.["serviceName"] || "mastra-app";
67
- this._initProvider(serviceName);
68
- }
69
- _initProvider(serviceName) {
70
- if (this._tracerProvider)
71
- return; // Already initialized
72
- const opts = this._options;
73
- const advanced = opts.advanced;
74
- const resource = resourceFromAttributes({
75
- [ATTR_SERVICE_NAME]: serviceName,
76
- });
77
- if (advanced?.spanExporter) {
78
- const sp = advanced.useSimpleSpanProcessor
79
- ? new SimpleSpanProcessor(advanced.spanExporter)
80
- : new BatchSpanProcessor(advanced.spanExporter, {
81
- scheduledDelayMillis: 100,
82
- });
83
- this._tracerProvider = new BasicTracerProvider({
84
- resource,
85
- idGenerator: advanced.idGenerator,
86
- spanProcessors: [sp],
87
- });
88
- logger.info("IntrospectionMastraExporter initialized in test mode");
89
- }
90
- else {
91
- const token = opts.token || process.env.INTROSPECTION_TOKEN;
92
- if (!token)
93
- return;
94
- const baseUrl = opts.baseUrl ||
95
- process.env.INTROSPECTION_BASE_OTEL_URL ||
96
- "https://otel.introspection.dev";
97
- const endpoint = baseUrl.endsWith("/v1/traces")
98
- ? baseUrl
99
- : `${baseUrl.replace(/\/$/, "")}/v1/traces`;
100
- const headers = {
101
- "User-Agent": `introspection-sdk/${VERSION}`,
102
- Authorization: `Bearer ${token}`,
103
- ...opts.additionalHeaders,
104
- };
105
- const spanExporter = new OTLPTraceExporter(withOtlpHttpsProxy({ url: endpoint, headers }));
106
- const effectiveBatchSize = token.startsWith("intro_dev") || token.startsWith("intro_staging")
107
- ? 1
108
- : undefined;
109
- const useSimple = advanced?.useSimpleSpanProcessor || effectiveBatchSize === 1;
110
- const sp = useSimple
111
- ? new SimpleSpanProcessor(spanExporter)
112
- : new BatchSpanProcessor(spanExporter, {
113
- scheduledDelayMillis: 1000,
114
- ...(effectiveBatchSize
115
- ? { maxExportBatchSize: effectiveBatchSize }
116
- : {}),
117
- });
118
- this._tracerProvider = new BasicTracerProvider({
119
- resource,
120
- idGenerator: advanced?.idGenerator,
121
- spanProcessors: [sp],
122
- });
123
- logger.info(`IntrospectionMastraExporter initialized: endpoint=${endpoint}, serviceName=${serviceName}`);
124
- }
125
- this._tracer = this._tracerProvider.getTracer("introspection-mastra", VERSION);
126
- }
127
- async _exportTracingEvent(event) {
128
- if (this.isDisabled)
129
- return;
130
- if (event.type !== "span_ended")
131
- return;
132
- // Lazy init if init() wasn't called
133
- if (!this._tracerProvider) {
134
- this._initProvider("mastra-app");
135
- }
136
- if (!this._tracer)
137
- return;
138
- this._exportSpan(event.exportedSpan);
139
- }
140
- async flush() {
141
- await this._tracerProvider?.forceFlush();
142
- }
143
- async shutdown() {
144
- // End any open root spans
145
- for (const span of this._rootSpans.values())
146
- span.end();
147
- this._rootSpans.clear();
148
- await this._tracerProvider?.shutdown();
149
- }
150
- // -------------------------------------------------------------------------
151
- // Span routing
152
- // -------------------------------------------------------------------------
153
- _exportSpan(span) {
154
- switch (span.type) {
155
- case "agent_run":
156
- this._exportAgentRun(span);
157
- break;
158
- case "model_step":
159
- this._exportModelStep(span);
160
- break;
161
- case "tool_call":
162
- case "mcp_tool_call":
163
- this._exportToolCall(span);
164
- break;
165
- // model_generation — skipped; model_step has per-step tool calls
166
- default:
167
- break;
168
- }
169
- }
170
- // -------------------------------------------------------------------------
171
- // Span creation with shared trace context
172
- // -------------------------------------------------------------------------
173
- /** Ensure a root OTel span exists for this Mastra trace.
174
- * Events arrive in end-order (children first, agent_run last),
175
- * so we create a synthetic root on first encounter. */
176
- _ensureRoot(span) {
177
- if (this._rootSpans.has(span.traceId))
178
- return;
179
- const rootSpan = this._tracer.startSpan("trace", {
180
- startTime: span.startTime,
181
- });
182
- this._rootSpans.set(span.traceId, rootSpan);
183
- }
184
- _createSpan(span, name) {
185
- this._ensureRoot(span);
186
- const parentCtx = otelTrace.setSpan(otelContext.active(), this._rootSpans.get(span.traceId));
187
- return this._tracer.startSpan(name || span.name, { startTime: span.startTime }, parentCtx);
188
- }
189
- // -------------------------------------------------------------------------
190
- // Span converters
191
- // -------------------------------------------------------------------------
192
- _exportAgentRun(span) {
193
- const attrs = span.attributes;
194
- const conversationId = this._getConversationId(span);
195
- // agent_run arrives last — set attrs on the synthetic root and end it
196
- this._ensureRoot(span);
197
- const rootSpan = this._rootSpans.get(span.traceId);
198
- rootSpan.setAttribute("gen_ai.conversation.id", conversationId);
199
- rootSpan.setAttribute("gen_ai.agent.name", span.entityName || span.name || "agent");
200
- // Prefer system messages from span.input (full prompt sent to LLM) over
201
- // attrs.instructions (may be just the short placeholder string).
202
- const inputMsgs = Array.isArray(span.input)
203
- ? span.input
204
- : undefined;
205
- const systemMsgsFromInput = inputMsgs?.filter((m) => m.role === "system");
206
- if (systemMsgsFromInput && systemMsgsFromInput.length > 0) {
207
- rootSpan.setAttribute("gen_ai.system_instructions", JSON.stringify(systemMsgsFromInput.map((m) => ({
208
- type: "text",
209
- content: this._extractTextContent(m.content),
210
- }))));
211
- }
212
- else if (attrs?.["instructions"] &&
213
- typeof attrs["instructions"] === "string") {
214
- rootSpan.setAttribute("gen_ai.system_instructions", JSON.stringify([{ type: "text", content: attrs["instructions"] }]));
215
- }
216
- // Metadata passthrough
217
- if (span.metadata) {
218
- for (const [key, value] of Object.entries(span.metadata)) {
219
- if (value != null) {
220
- rootSpan.setAttribute(`ai.telemetry.metadata.${key}`, typeof value === "string" ? value : JSON.stringify(value));
221
- }
222
- }
223
- }
224
- rootSpan.end(span.endTime || new Date());
225
- this._rootSpans.delete(span.traceId);
226
- }
227
- _exportModelStep(span) {
228
- const attrs = span.attributes;
229
- const conversationId = this._getConversationId(span);
230
- // Model info lives in metadata.modelMetadata (set by Mastra)
231
- const modelMeta = span.metadata?.["modelMetadata"];
232
- const model = modelMeta?.["modelId"] || "";
233
- const provider = modelMeta?.["modelProvider"] || "";
234
- // Response metadata from metadata.body (the API response)
235
- const respBody = span.metadata?.["body"];
236
- const responseModel = respBody?.["model"] || "";
237
- const responseId = respBody?.["id"] || "";
238
- const spanName = model ? `chat ${model}` : span.name;
239
- const otelSpan = this._createSpan(span, spanName);
240
- otelSpan.setAttribute("gen_ai.operation.name", "chat");
241
- otelSpan.setAttribute("gen_ai.conversation.id", conversationId);
242
- otelSpan.setAttribute("openinference.span.kind", "LLM");
243
- if (model)
244
- otelSpan.setAttribute("gen_ai.request.model", model);
245
- if (provider)
246
- otelSpan.setAttribute("gen_ai.provider.name", provider);
247
- if (responseModel)
248
- otelSpan.setAttribute("gen_ai.response.model", responseModel);
249
- if (responseId)
250
- otelSpan.setAttribute("gen_ai.response.id", responseId);
251
- // Input messages — span.input is either:
252
- // (a) a flat normalized array { role, content }[] from Mastra's inputMessages path, or
253
- // (b) an object { body: { input/messages, tools } } from the raw HTTP request path.
254
- if (span.input != null) {
255
- let apiMessages;
256
- let tools;
257
- if (Array.isArray(span.input)) {
258
- // Path (a): flat array already normalized by Mastra's normalizeMessages()
259
- apiMessages = span.input;
260
- }
261
- else {
262
- // Path (b): nested request body
263
- const rawInput = span.input;
264
- const body = rawInput?.body;
265
- const msgs = body?.input ?? body?.messages;
266
- if (Array.isArray(msgs)) {
267
- apiMessages = msgs;
268
- }
269
- if (Array.isArray(body?.tools)) {
270
- tools = body.tools;
271
- }
272
- }
273
- if (apiMessages && apiMessages.length > 0) {
274
- const inputMessages = this._convertInput(apiMessages);
275
- if (inputMessages.length > 0) {
276
- otelSpan.setAttribute("gen_ai.input.messages", JSON.stringify(inputMessages));
277
- }
278
- // System instructions — combine all system messages into one attribute
279
- const systemMsgs = apiMessages.filter((m) => m.role === "system");
280
- if (systemMsgs.length > 0) {
281
- otelSpan.setAttribute("gen_ai.system_instructions", JSON.stringify(systemMsgs.map((m) => ({
282
- type: "text",
283
- content: this._extractTextContent(m.content),
284
- }))));
285
- }
286
- }
287
- // Tool definitions (only present on path (b))
288
- if (Array.isArray(tools) && tools.length > 0) {
289
- otelSpan.setAttribute("gen_ai.tool.definitions", JSON.stringify(tools.map((t) => ({
290
- type: t.type || "function",
291
- name: t.name || "",
292
- description: t.description || "",
293
- parameters: t.parameters,
294
- }))));
295
- }
296
- }
297
- // Output messages — model_step output has {text, toolCalls} per step
298
- if (span.output != null) {
299
- const outputMessages = this._convertOutput(span.output, attrs?.["finishReason"]);
300
- if (outputMessages.length > 0) {
301
- otelSpan.setAttribute("gen_ai.output.messages", JSON.stringify(outputMessages));
302
- }
303
- }
304
- // Token usage (per step)
305
- const usage = attrs?.["usage"];
306
- if (usage) {
307
- if (typeof usage["inputTokens"] === "number")
308
- otelSpan.setAttribute("gen_ai.usage.input_tokens", usage["inputTokens"]);
309
- if (typeof usage["outputTokens"] === "number")
310
- otelSpan.setAttribute("gen_ai.usage.output_tokens", usage["outputTokens"]);
311
- const inputDetails = usage["inputDetails"];
312
- if (typeof inputDetails?.["cacheRead"] === "number")
313
- otelSpan.setAttribute("gen_ai.usage.cache_read.input_tokens", inputDetails["cacheRead"]);
314
- if (typeof inputDetails?.["cacheWrite"] === "number")
315
- otelSpan.setAttribute("gen_ai.usage.cache_creation.input_tokens", inputDetails["cacheWrite"]);
316
- // Provider-reported cost (e.g. OpenRouter usage.cost) when present.
317
- otelSpan.setAttributes(providerCostAttributes(usage));
318
- }
319
- // Finish reason
320
- const finishReason = attrs?.["finishReason"];
321
- if (finishReason)
322
- otelSpan.setAttribute("gen_ai.response.finish_reasons", [finishReason]);
323
- otelSpan.end(span.endTime || new Date());
324
- }
325
- _exportToolCall(span) {
326
- const conversationId = this._getConversationId(span);
327
- const toolName = span.entityName || span.name || "tool";
328
- const otelSpan = this._createSpan(span, `execute_tool ${toolName}`);
329
- otelSpan.setAttribute("gen_ai.operation.name", "execute_tool");
330
- otelSpan.setAttribute("gen_ai.tool.name", toolName);
331
- otelSpan.setAttribute("gen_ai.tool.type", "function");
332
- otelSpan.setAttribute("gen_ai.conversation.id", conversationId);
333
- otelSpan.setAttribute("openinference.span.kind", "TOOL");
334
- if (span.input != null) {
335
- otelSpan.setAttribute("gen_ai.tool.call.arguments", typeof span.input === "string"
336
- ? span.input
337
- : JSON.stringify(span.input));
338
- }
339
- if (span.output != null) {
340
- otelSpan.setAttribute("gen_ai.tool.call.result", typeof span.output === "string"
341
- ? span.output
342
- : JSON.stringify(span.output));
343
- }
344
- otelSpan.end(span.endTime || new Date());
345
- }
346
- // -------------------------------------------------------------------------
347
- // Helpers
348
- // -------------------------------------------------------------------------
349
- _getConversationId(span) {
350
- const metaConvId = span.metadata?.["gen_ai.conversation.id"];
351
- if (metaConvId)
352
- return metaConvId;
353
- const attrs = span.attributes;
354
- const attrConvId = attrs?.["conversationId"];
355
- if (attrConvId)
356
- return attrConvId;
357
- const traceId = span.traceId;
358
- if (!this._conversationIds.has(traceId)) {
359
- this._conversationIds.set(traceId, `intro_conv_${randomUUID().replace(/-/g, "")}`);
360
- }
361
- return this._conversationIds.get(traceId);
362
- }
363
- _convertInput(input) {
364
- if (!input)
365
- return [];
366
- if (Array.isArray(input)) {
367
- const result = [];
368
- for (const m of input) {
369
- const msg = m;
370
- if (!msg)
371
- continue;
372
- // Skip system messages (handled separately)
373
- if (msg.role === "system")
374
- continue;
375
- // Standard role-based messages (AIv4 uses msg.content; AIv5 may use msg.parts)
376
- if (msg.role) {
377
- const parts = msg.content != null
378
- ? this._extractParts(msg.content)
379
- : Array.isArray(msg.parts)
380
- ? this._extractParts(msg.parts)
381
- : [];
382
- result.push({
383
- role: msg.role,
384
- parts,
385
- });
386
- continue;
387
- }
388
- // OpenAI Responses API: function_call_output (no role, has type)
389
- if (msg.type === "function_call_output") {
390
- result.push({
391
- role: "tool",
392
- parts: [
393
- {
394
- type: "tool_call_response",
395
- id: (msg.call_id || ""),
396
- response: typeof msg.output === "string"
397
- ? msg.output
398
- : JSON.stringify(msg.output),
399
- },
400
- ],
401
- });
402
- continue;
403
- }
404
- // item_reference — skip (OpenAI internal reference)
405
- if (msg.type === "item_reference")
406
- continue;
407
- }
408
- return result;
409
- }
410
- if (typeof input === "string") {
411
- return [{ role: "user", parts: [{ type: "text", content: input }] }];
412
- }
413
- return [];
414
- }
415
- _convertOutput(output, finishReason) {
416
- if (!output)
417
- return [];
418
- const parts = [];
419
- if (typeof output === "string") {
420
- parts.push({ type: "text", content: output });
421
- }
422
- else if (typeof output === "object" && output !== null) {
423
- const out = output;
424
- // Reasoning
425
- if (Array.isArray(out.reasoning)) {
426
- for (const r of out.reasoning) {
427
- const text = (r.text || r.content || "");
428
- if (text)
429
- parts.push({ type: "reasoning", content: text });
430
- }
431
- }
432
- // Text
433
- if (typeof out.text === "string" && out.text) {
434
- parts.push({ type: "text", content: out.text });
435
- }
436
- // Tool calls
437
- if (Array.isArray(out.toolCalls)) {
438
- for (const tc of out.toolCalls) {
439
- parts.push({
440
- type: "tool_call",
441
- name: (tc.toolName || tc.name || ""),
442
- id: (tc.toolCallId || tc.id || ""),
443
- arguments: typeof tc.args === "string"
444
- ? tc.args
445
- : JSON.stringify(tc.args || tc.input),
446
- });
447
- }
448
- }
449
- }
450
- if (parts.length === 0)
451
- return [];
452
- return [{ role: "assistant", parts, finish_reason: finishReason }];
453
- }
454
- /** Extract plain text from a message content field (string, array of parts, or AIv5 parts). */
455
- _extractTextContent(content) {
456
- if (typeof content === "string")
457
- return content;
458
- if (Array.isArray(content)) {
459
- return content
460
- .map((p) => {
461
- const part = p;
462
- return typeof part.text === "string"
463
- ? part.text
464
- : typeof part.content === "string"
465
- ? part.content
466
- : "";
467
- })
468
- .filter(Boolean)
469
- .join("\n");
470
- }
471
- return typeof content === "undefined" ? "" : JSON.stringify(content);
472
- }
473
- _extractParts(content) {
474
- if (typeof content === "string") {
475
- return [{ type: "text", content }];
476
- }
477
- if (Array.isArray(content)) {
478
- return content
479
- .map((part) => {
480
- const p = part;
481
- // Standard text
482
- if (p.type === "text")
483
- return {
484
- type: "text",
485
- content: (p.text || p.content || ""),
486
- };
487
- // OpenAI Responses API input_text format
488
- if (p.type === "input_text")
489
- return {
490
- type: "text",
491
- content: (p.text || ""),
492
- };
493
- // Tool call
494
- if (p.type === "tool-call" ||
495
- p.type === "tool_call" ||
496
- p.type === "function_call")
497
- return {
498
- type: "tool_call",
499
- name: (p.toolName || p.name || ""),
500
- id: (p.toolCallId || p.id || p.call_id || ""),
501
- arguments: typeof p.args === "string"
502
- ? p.args
503
- : typeof p.arguments === "string"
504
- ? p.arguments
505
- : JSON.stringify(p.args || p.arguments || p.input),
506
- };
507
- // Tool result
508
- if (p.type === "tool-result" ||
509
- p.type === "tool_call_response" ||
510
- p.type === "function_call_output")
511
- return {
512
- type: "tool_call_response",
513
- id: (p.toolCallId || p.id || p.call_id || ""),
514
- response: typeof p.result === "string"
515
- ? p.result
516
- : typeof p.output === "string"
517
- ? p.output
518
- : JSON.stringify(p.result || p.output),
519
- };
520
- // item_reference (OpenAI Responses API) — skip
521
- if (p.type === "item_reference")
522
- return null;
523
- return { type: "text", content: JSON.stringify(p) };
524
- })
525
- .filter((p) => p !== null);
526
- }
527
- return [];
528
- }
529
- }
530
- //# sourceMappingURL=mastra-exporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mastra-exporter.js","sourceRoot":"","sources":["../../src/otel/mastra-exporter.ts"],"names":[],"mappings":"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"}