@introspection-sdk/introspection-node 0.4.2 → 0.4.4

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 (219) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/client.d.ts +42 -132
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +67 -366
  5. package/dist/client.js.map +1 -0
  6. package/dist/converters/claude.d.ts +4 -0
  7. package/dist/converters/claude.d.ts.map +1 -1
  8. package/dist/converters/claude.js +7 -0
  9. package/dist/converters/claude.js.map +1 -0
  10. package/dist/converters/gemini.d.ts +90 -0
  11. package/dist/converters/gemini.d.ts.map +1 -0
  12. package/dist/converters/gemini.js +171 -0
  13. package/dist/converters/gemini.js.map +1 -0
  14. package/dist/converters/index.d.ts +1 -1
  15. package/dist/converters/index.d.ts.map +1 -1
  16. package/dist/converters/index.js +2 -1
  17. package/dist/converters/index.js.map +1 -0
  18. package/dist/converters/openai.js +1 -0
  19. package/dist/converters/openai.js.map +1 -0
  20. package/dist/converters/openinference.js +1 -0
  21. package/dist/converters/openinference.js.map +1 -0
  22. package/dist/converters/vercel.d.ts.map +1 -1
  23. package/dist/converters/vercel.js +31 -3
  24. package/dist/converters/vercel.js.map +1 -0
  25. package/dist/http.d.ts +36 -0
  26. package/dist/http.d.ts.map +1 -0
  27. package/dist/http.js +145 -0
  28. package/dist/http.js.map +1 -0
  29. package/dist/index.d.ts +24 -27
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +22 -32
  32. package/dist/index.js.map +1 -0
  33. package/dist/{anthropic.d.ts → otel/anthropic.d.ts} +23 -13
  34. package/dist/otel/anthropic.d.ts.map +1 -0
  35. package/dist/{anthropic.js → otel/anthropic.js} +132 -40
  36. package/dist/otel/anthropic.js.map +1 -0
  37. package/dist/{claude-hooks.d.ts → otel/claude-hooks.d.ts} +19 -1
  38. package/dist/otel/claude-hooks.d.ts.map +1 -0
  39. package/dist/{claude-hooks.js → otel/claude-hooks.js} +94 -20
  40. package/dist/otel/claude-hooks.js.map +1 -0
  41. package/dist/otel/claude-wrapper.d.ts.map +1 -0
  42. package/dist/{claude-wrapper.js → otel/claude-wrapper.js} +2 -1
  43. package/dist/otel/claude-wrapper.js.map +1 -0
  44. package/dist/otel/gemini.d.ts +56 -0
  45. package/dist/otel/gemini.d.ts.map +1 -0
  46. package/dist/otel/gemini.js +348 -0
  47. package/dist/otel/gemini.js.map +1 -0
  48. package/dist/otel/index.d.ts +32 -0
  49. package/dist/otel/index.d.ts.map +1 -0
  50. package/dist/otel/index.js +41 -0
  51. package/dist/otel/index.js.map +1 -0
  52. package/dist/otel/init.d.ts +126 -0
  53. package/dist/otel/init.d.ts.map +1 -0
  54. package/dist/otel/init.js +259 -0
  55. package/dist/otel/init.js.map +1 -0
  56. package/dist/otel/integrations/anthropic.d.ts +10 -0
  57. package/dist/otel/integrations/anthropic.d.ts.map +1 -0
  58. package/dist/otel/integrations/anthropic.js +22 -0
  59. package/dist/otel/integrations/anthropic.js.map +1 -0
  60. package/dist/otel/integrations/base.d.ts +83 -0
  61. package/dist/otel/integrations/base.d.ts.map +1 -0
  62. package/dist/otel/integrations/base.js +23 -0
  63. package/dist/otel/integrations/base.js.map +1 -0
  64. package/dist/otel/integrations/claude-agent.d.ts +13 -0
  65. package/dist/otel/integrations/claude-agent.d.ts.map +1 -0
  66. package/dist/otel/integrations/claude-agent.js +27 -0
  67. package/dist/otel/integrations/claude-agent.js.map +1 -0
  68. package/dist/otel/integrations/gemini.d.ts +11 -0
  69. package/dist/otel/integrations/gemini.d.ts.map +1 -0
  70. package/dist/otel/integrations/gemini.js +21 -0
  71. package/dist/otel/integrations/gemini.js.map +1 -0
  72. package/dist/otel/integrations/index.d.ts +39 -0
  73. package/dist/otel/integrations/index.d.ts.map +1 -0
  74. package/dist/otel/integrations/index.js +131 -0
  75. package/dist/otel/integrations/index.js.map +1 -0
  76. package/dist/otel/integrations/langchain.d.ts +16 -0
  77. package/dist/otel/integrations/langchain.d.ts.map +1 -0
  78. package/dist/otel/integrations/langchain.js +41 -0
  79. package/dist/otel/integrations/langchain.js.map +1 -0
  80. package/dist/otel/integrations/mastra.d.ts +14 -0
  81. package/dist/otel/integrations/mastra.d.ts.map +1 -0
  82. package/dist/otel/integrations/mastra.js +27 -0
  83. package/dist/otel/integrations/mastra.js.map +1 -0
  84. package/dist/otel/integrations/openai-agents.d.ts +11 -0
  85. package/dist/otel/integrations/openai-agents.d.ts.map +1 -0
  86. package/dist/otel/integrations/openai-agents.js +25 -0
  87. package/dist/otel/integrations/openai-agents.js.map +1 -0
  88. package/dist/otel/integrations/pi.d.ts +12 -0
  89. package/dist/otel/integrations/pi.d.ts.map +1 -0
  90. package/dist/otel/integrations/pi.js +20 -0
  91. package/dist/otel/integrations/pi.js.map +1 -0
  92. package/dist/otel/integrations/vercel.d.ts +15 -0
  93. package/dist/otel/integrations/vercel.d.ts.map +1 -0
  94. package/dist/otel/integrations/vercel.js +20 -0
  95. package/dist/otel/integrations/vercel.js.map +1 -0
  96. package/dist/{langchain-handler.d.ts → otel/langchain-handler.d.ts} +10 -1
  97. package/dist/otel/langchain-handler.d.ts.map +1 -0
  98. package/dist/{langchain-handler.js → otel/langchain-handler.js} +43 -6
  99. package/dist/otel/langchain-handler.js.map +1 -0
  100. package/dist/otel/logs.d.ts +82 -0
  101. package/dist/otel/logs.d.ts.map +1 -0
  102. package/dist/otel/logs.js +271 -0
  103. package/dist/otel/logs.js.map +1 -0
  104. package/dist/{mastra-exporter.d.ts → otel/mastra-exporter.d.ts} +3 -1
  105. package/dist/otel/mastra-exporter.d.ts.map +1 -0
  106. package/dist/{mastra-exporter.js → otel/mastra-exporter.js} +71 -17
  107. package/dist/otel/mastra-exporter.js.map +1 -0
  108. package/dist/otel/pi.d.ts +59 -0
  109. package/dist/otel/pi.d.ts.map +1 -0
  110. package/dist/otel/pi.js +67 -0
  111. package/dist/otel/pi.js.map +1 -0
  112. package/dist/otel/register.d.ts +8 -0
  113. package/dist/otel/register.d.ts.map +1 -0
  114. package/dist/otel/register.js +48 -0
  115. package/dist/otel/register.js.map +1 -0
  116. package/dist/otel/setup.d.ts +52 -0
  117. package/dist/otel/setup.d.ts.map +1 -0
  118. package/dist/otel/setup.js +146 -0
  119. package/dist/otel/setup.js.map +1 -0
  120. package/dist/{span-processor.d.ts → otel/span-processor.d.ts} +1 -1
  121. package/dist/otel/span-processor.d.ts.map +1 -0
  122. package/dist/{span-processor.js → otel/span-processor.js} +11 -5
  123. package/dist/otel/span-processor.js.map +1 -0
  124. package/dist/{tracing-processor.d.ts → otel/tracing-processor.d.ts} +4 -1
  125. package/dist/otel/tracing-processor.d.ts.map +1 -0
  126. package/dist/{tracing-processor.js → otel/tracing-processor.js} +64 -14
  127. package/dist/otel/tracing-processor.js.map +1 -0
  128. package/dist/resources/experiments.d.ts +31 -0
  129. package/dist/resources/experiments.d.ts.map +1 -0
  130. package/dist/resources/experiments.js +133 -0
  131. package/dist/resources/experiments.js.map +1 -0
  132. package/dist/resources/recipes.d.ts +22 -0
  133. package/dist/resources/recipes.d.ts.map +1 -0
  134. package/dist/resources/recipes.js +61 -0
  135. package/dist/resources/recipes.js.map +1 -0
  136. package/dist/resources/runtimes.d.ts +76 -0
  137. package/dist/resources/runtimes.d.ts.map +1 -0
  138. package/dist/resources/runtimes.js +179 -0
  139. package/dist/resources/runtimes.js.map +1 -0
  140. package/dist/runner-resources/files.d.ts +35 -0
  141. package/dist/runner-resources/files.d.ts.map +1 -0
  142. package/dist/runner-resources/files.js +131 -0
  143. package/dist/runner-resources/files.js.map +1 -0
  144. package/dist/runner-resources/tasks.d.ts +39 -0
  145. package/dist/runner-resources/tasks.d.ts.map +1 -0
  146. package/dist/runner-resources/tasks.js +129 -0
  147. package/dist/runner-resources/tasks.js.map +1 -0
  148. package/dist/runner.d.ts +80 -0
  149. package/dist/runner.d.ts.map +1 -0
  150. package/dist/runner.js +159 -0
  151. package/dist/runner.js.map +1 -0
  152. package/dist/streaming.d.ts +8 -0
  153. package/dist/streaming.d.ts.map +1 -0
  154. package/dist/streaming.js +67 -0
  155. package/dist/streaming.js.map +1 -0
  156. package/dist/types.js +1 -0
  157. package/dist/types.js.map +1 -0
  158. package/dist/utils.d.ts +10 -0
  159. package/dist/utils.d.ts.map +1 -1
  160. package/dist/utils.js +13 -4
  161. package/dist/utils.js.map +1 -0
  162. package/dist/version.js +1 -0
  163. package/dist/version.js.map +1 -0
  164. package/package.json +91 -22
  165. package/src/client.ts +76 -473
  166. package/src/converters/claude.ts +10 -0
  167. package/src/converters/gemini.ts +243 -0
  168. package/src/converters/index.ts +13 -7
  169. package/src/converters/vercel.ts +41 -3
  170. package/src/http.ts +163 -0
  171. package/src/index.ts +110 -75
  172. package/src/{anthropic.ts → otel/anthropic.ts} +206 -54
  173. package/src/{claude-hooks.ts → otel/claude-hooks.ts} +119 -20
  174. package/src/{claude-wrapper.ts → otel/claude-wrapper.ts} +1 -1
  175. package/src/otel/gemini.ts +491 -0
  176. package/src/otel/index.ts +121 -0
  177. package/src/otel/init.ts +411 -0
  178. package/src/otel/integrations/anthropic.ts +26 -0
  179. package/src/otel/integrations/base.ts +95 -0
  180. package/src/otel/integrations/claude-agent.ts +32 -0
  181. package/src/otel/integrations/gemini.ts +25 -0
  182. package/src/otel/integrations/index.ts +151 -0
  183. package/src/otel/integrations/langchain.ts +45 -0
  184. package/src/otel/integrations/mastra.ts +30 -0
  185. package/src/otel/integrations/openai-agents.ts +31 -0
  186. package/src/otel/integrations/pi.ts +24 -0
  187. package/src/otel/integrations/vercel.ts +24 -0
  188. package/src/{langchain-handler.ts → otel/langchain-handler.ts} +53 -6
  189. package/src/otel/logs.ts +394 -0
  190. package/src/{mastra-exporter.ts → otel/mastra-exporter.ts} +83 -22
  191. package/src/otel/pi.ts +88 -0
  192. package/src/otel/register.ts +50 -0
  193. package/src/otel/setup.ts +215 -0
  194. package/src/{span-processor.ts → otel/span-processor.ts} +11 -6
  195. package/src/{tracing-processor.ts → otel/tracing-processor.ts} +94 -19
  196. package/src/resources/experiments.ts +170 -0
  197. package/src/resources/recipes.ts +73 -0
  198. package/src/resources/runtimes.ts +231 -0
  199. package/src/runner-resources/files.ts +163 -0
  200. package/src/runner-resources/tasks.ts +156 -0
  201. package/src/runner.ts +194 -0
  202. package/src/streaming.ts +57 -0
  203. package/src/utils.ts +12 -5
  204. package/dist/ai-sdk-integration.d.ts +0 -123
  205. package/dist/ai-sdk-integration.d.ts.map +0 -1
  206. package/dist/ai-sdk-integration.js +0 -475
  207. package/dist/anthropic.d.ts.map +0 -1
  208. package/dist/claude-hooks.d.ts.map +0 -1
  209. package/dist/claude-wrapper.d.ts.map +0 -1
  210. package/dist/converters/ai-sdk.d.ts +0 -65
  211. package/dist/converters/ai-sdk.d.ts.map +0 -1
  212. package/dist/converters/ai-sdk.js +0 -261
  213. package/dist/langchain-handler.d.ts.map +0 -1
  214. package/dist/mastra-exporter.d.ts.map +0 -1
  215. package/dist/span-processor.d.ts.map +0 -1
  216. package/dist/tracing-processor.d.ts.map +0 -1
  217. package/src/ai-sdk-integration.ts +0 -691
  218. package/src/converters/ai-sdk.ts +0 -323
  219. /package/dist/{claude-wrapper.d.ts → otel/claude-wrapper.d.ts} +0 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * IntrospectionLogs — OTel logs exporter for Introspection.
3
+ *
4
+ * Owns its own `LoggerProvider` and OTLP log exporter. Provides `track`,
5
+ * `feedback`, `identify`, and async-context helpers (`withBaggage`,
6
+ * `withAgent`, `withConversation`, etc.) that propagate identity and
7
+ * gen_ai context through OpenTelemetry baggage.
8
+ *
9
+ * Fully independent of {@link IntrospectionClient}. Construct it directly
10
+ * with the OTel peer dependencies installed.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { IntrospectionLogs } from "@introspection-sdk/introspection-node/otel";
15
+ *
16
+ * const logs = new IntrospectionLogs({
17
+ * token: process.env.INTROSPECTION_TOKEN,
18
+ * serviceName: "my-service",
19
+ * });
20
+ *
21
+ * await logs.withAgent("support-bot", "agent_1", () =>
22
+ * logs.withConversation("conv_123", undefined, () => {
23
+ * logs.feedback("thumbs_up", { comments: "Great answer" });
24
+ * }),
25
+ * );
26
+ *
27
+ * await logs.shutdown();
28
+ * ```
29
+ */
30
+ import { type FeedbackOptions, type UserTraits } from "../types.js";
31
+ /**
32
+ * Configuration for {@link IntrospectionLogs}.
33
+ */
34
+ export interface IntrospectionLogsOptions {
35
+ /** Authentication token (env: INTROSPECTION_TOKEN). */
36
+ token?: string;
37
+ /** Service name for telemetry (env: INTROSPECTION_SERVICE_NAME, default: "introspection-client"). */
38
+ serviceName?: string;
39
+ /**
40
+ * Base URL for the OTLP collector (env: INTROSPECTION_BASE_OTEL_URL,
41
+ * default: "https://otel.introspection.dev").
42
+ */
43
+ baseOtelUrl?: string;
44
+ /** Additional HTTP headers to include in exporter requests. */
45
+ additionalHeaders?: Record<string, string>;
46
+ /** Flush interval in milliseconds (default: 5000). */
47
+ flushInterval?: number;
48
+ /** Maximum queue size before auto-flush (default: 100). */
49
+ maxBatchSize?: number;
50
+ }
51
+ export declare class IntrospectionLogs {
52
+ private loggerProvider;
53
+ private otelLogger;
54
+ private userId;
55
+ private anonymousId;
56
+ private traits;
57
+ constructor(options?: IntrospectionLogsOptions);
58
+ /** Get gen_ai context from baggage */
59
+ private getGenAiFromContext;
60
+ /** Get identity from baggage or instance state */
61
+ private getIdentityFromContext;
62
+ private getTimestamp;
63
+ private buildAttributes;
64
+ track(eventName: string, properties?: Record<string, unknown>, options?: {
65
+ eventId?: string;
66
+ }): void;
67
+ feedback(name: string, options?: FeedbackOptions): void;
68
+ identify(userId: string, traits?: UserTraits, anonymousId?: string, eventId?: string): void;
69
+ createBaggageContext(values: Record<string, string>): import("@opentelemetry/api").Context;
70
+ withBaggage<T>(values: Record<string, string>, callback: () => T | Promise<T>): Promise<T>;
71
+ withAgent<T>(agentName: string, agentId: string | undefined, callback: () => T | Promise<T>): Promise<T>;
72
+ withConversation<T>(conversationId: string | undefined, previousResponseId: string | undefined, callback: () => T | Promise<T>): Promise<T>;
73
+ setUserId(userId: string): void;
74
+ setAnonymousId(anonymousId: string): void;
75
+ withUserId<T>(userId: string, callback: () => T | Promise<T>): Promise<T>;
76
+ withAnonymousId<T>(anonymousId: string, callback: () => T | Promise<T>): Promise<T>;
77
+ getAnonymousId(): string | undefined;
78
+ reset(): void;
79
+ flush(): Promise<void>;
80
+ shutdown(): Promise<void>;
81
+ }
82
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/otel/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAiBH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,UAAU,EAGhB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qGAAqG;IACrG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,MAAM,CAA+B;gBAEjC,OAAO,GAAE,wBAA6B;IA4DlD,sCAAsC;IACtC,OAAO,CAAC,mBAAmB;IAY3B,kDAAkD;IAClD,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,eAAe;IAyEvB,KAAK,CACH,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7B,IAAI;IAeP,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI;IAqB3D,QAAQ,CACN,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,UAAU,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,IAAI;IAeP,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAS7C,WAAW,CAAC,CAAC,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC;IAKP,SAAS,CAAC,CAAC,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC;IAMP,gBAAgB,CAAC,CAAC,EACtB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,kBAAkB,EAAE,MAAM,GAAG,SAAS,EACtC,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC;IAQb,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAInC,UAAU,CAAC,CAAC,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC;IAOP,eAAe,CAAC,CAAC,EACrB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC,CAAC,CAAC;IAOb,cAAc,IAAI,MAAM,GAAG,SAAS;IAIpC,KAAK,IAAI,IAAI;IAOP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAIhC"}
@@ -0,0 +1,271 @@
1
+ /**
2
+ * IntrospectionLogs — OTel logs exporter for Introspection.
3
+ *
4
+ * Owns its own `LoggerProvider` and OTLP log exporter. Provides `track`,
5
+ * `feedback`, `identify`, and async-context helpers (`withBaggage`,
6
+ * `withAgent`, `withConversation`, etc.) that propagate identity and
7
+ * gen_ai context through OpenTelemetry baggage.
8
+ *
9
+ * Fully independent of {@link IntrospectionClient}. Construct it directly
10
+ * with the OTel peer dependencies installed.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { IntrospectionLogs } from "@introspection-sdk/introspection-node/otel";
15
+ *
16
+ * const logs = new IntrospectionLogs({
17
+ * token: process.env.INTROSPECTION_TOKEN,
18
+ * serviceName: "my-service",
19
+ * });
20
+ *
21
+ * await logs.withAgent("support-bot", "agent_1", () =>
22
+ * logs.withConversation("conv_123", undefined, () => {
23
+ * logs.feedback("thumbs_up", { comments: "Great answer" });
24
+ * }),
25
+ * );
26
+ *
27
+ * await logs.shutdown();
28
+ * ```
29
+ */
30
+ import { SeverityNumber } from "@opentelemetry/api-logs";
31
+ import { LoggerProvider, BatchLogRecordProcessor, } from "@opentelemetry/sdk-logs";
32
+ import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-proto";
33
+ import { resourceFromAttributes, defaultResource, } from "@opentelemetry/resources";
34
+ import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
35
+ import { propagation, context } from "@opentelemetry/api";
36
+ import { logger as sdkLogger, withOtlpHttpsProxy } from "../utils.js";
37
+ import { VERSION } from "../version.js";
38
+ import { generateEventId, } from "../types.js";
39
+ export class IntrospectionLogs {
40
+ loggerProvider;
41
+ otelLogger;
42
+ userId;
43
+ anonymousId;
44
+ traits = {};
45
+ constructor(options = {}) {
46
+ const token = options.token || process.env.INTROSPECTION_TOKEN || "";
47
+ const serviceName = options.serviceName ||
48
+ process.env.INTROSPECTION_SERVICE_NAME ||
49
+ "introspection-client";
50
+ const baseOtelUrl = options.baseOtelUrl ||
51
+ process.env.INTROSPECTION_BASE_OTEL_URL ||
52
+ "https://otel.introspection.dev";
53
+ if (!token) {
54
+ sdkLogger.warn("IntrospectionLogs: No token provided. Events will not be sent.");
55
+ }
56
+ // Construct endpoint URL for logs.
57
+ const endpoint = baseOtelUrl.endsWith("/v1/logs")
58
+ ? baseOtelUrl
59
+ : `${baseOtelUrl.replace(/\/$/, "")}/v1/logs`;
60
+ const headers = {
61
+ Authorization: `Bearer ${token}`,
62
+ ...(options.additionalHeaders || {}),
63
+ };
64
+ const exporter = new OTLPLogExporter(withOtlpHttpsProxy({
65
+ url: endpoint,
66
+ headers,
67
+ }));
68
+ const processor = new BatchLogRecordProcessor(exporter, {
69
+ maxQueueSize: options.maxBatchSize ?? 100,
70
+ scheduledDelayMillis: options.flushInterval ?? 5000,
71
+ });
72
+ const baseResource = defaultResource();
73
+ const introspectionResource = resourceFromAttributes({
74
+ [ATTR_SERVICE_NAME]: serviceName,
75
+ });
76
+ const resource = baseResource.merge(introspectionResource);
77
+ this.loggerProvider = new LoggerProvider({
78
+ resource,
79
+ processors: [processor],
80
+ });
81
+ this.otelLogger = this.loggerProvider.getLogger("@introspection-sdk/introspection-node", VERSION);
82
+ sdkLogger.info(`IntrospectionLogs initialized: service=${serviceName}, otlp=${endpoint}`);
83
+ }
84
+ /** Get gen_ai context from baggage */
85
+ getGenAiFromContext() {
86
+ const baggage = propagation.getBaggage(context.active());
87
+ return {
88
+ conversationId: baggage?.getEntry("gen_ai.conversation.id")?.value,
89
+ previousResponseId: baggage?.getEntry("gen_ai.request.previous_response_id")?.value,
90
+ agentName: baggage?.getEntry("gen_ai.agent.name")?.value,
91
+ agentId: baggage?.getEntry("gen_ai.agent.id")?.value,
92
+ };
93
+ }
94
+ /** Get identity from baggage or instance state */
95
+ getIdentityFromContext() {
96
+ const baggage = propagation.getBaggage(context.active());
97
+ return {
98
+ userId: baggage?.getEntry("identity.user_id")?.value || this.userId,
99
+ anonymousId: baggage?.getEntry("identity.anonymous_id")?.value || this.anonymousId,
100
+ };
101
+ }
102
+ getTimestamp() {
103
+ const hrTimeNs = process.hrtime.bigint();
104
+ const epochNs = BigInt(Date.now()) * BigInt(1_000_000);
105
+ const offsetNs = hrTimeNs - process.hrtime.bigint() + epochNs;
106
+ const seconds = Number(offsetNs / BigInt(1_000_000_000));
107
+ const nanos = Number(offsetNs % BigInt(1_000_000_000));
108
+ return [seconds, nanos];
109
+ }
110
+ buildAttributes(eventName, options = {}) {
111
+ const { properties, traits, conversationId, previousResponseId, eventId } = options;
112
+ const attributes = {
113
+ "event.name": eventName,
114
+ "event.id": eventId || generateEventId(),
115
+ };
116
+ const identity = this.getIdentityFromContext();
117
+ if (identity.userId)
118
+ attributes["identity.user.id"] = identity.userId;
119
+ if (identity.anonymousId)
120
+ attributes["identity.anonymous.id"] = identity.anonymousId;
121
+ const genAi = this.getGenAiFromContext();
122
+ const finalConversationId = conversationId || genAi.conversationId;
123
+ const finalPreviousResponseId = previousResponseId || genAi.previousResponseId;
124
+ if (finalConversationId)
125
+ attributes["gen_ai.conversation.id"] = finalConversationId;
126
+ if (finalPreviousResponseId)
127
+ attributes["gen_ai.request.previous_response_id"] =
128
+ finalPreviousResponseId;
129
+ if (genAi.agentName)
130
+ attributes["gen_ai.agent.name"] = genAi.agentName;
131
+ if (genAi.agentId)
132
+ attributes["gen_ai.agent.id"] = genAi.agentId;
133
+ if (properties) {
134
+ for (const [key, value] of Object.entries(properties)) {
135
+ if (value != null) {
136
+ const attrKey = `properties.${key}`;
137
+ if (typeof value === "object") {
138
+ attributes[attrKey] = JSON.stringify(value);
139
+ }
140
+ else if (typeof value === "string" ||
141
+ typeof value === "number" ||
142
+ typeof value === "boolean") {
143
+ attributes[attrKey] = value;
144
+ }
145
+ }
146
+ }
147
+ }
148
+ if (traits) {
149
+ for (const [key, value] of Object.entries(traits)) {
150
+ if (value != null) {
151
+ const attrKey = `context.traits.${key}`;
152
+ if (typeof value === "object") {
153
+ attributes[attrKey] = JSON.stringify(value);
154
+ }
155
+ else if (typeof value === "string" ||
156
+ typeof value === "number" ||
157
+ typeof value === "boolean") {
158
+ attributes[attrKey] = value;
159
+ }
160
+ }
161
+ }
162
+ }
163
+ return attributes;
164
+ }
165
+ track(eventName, properties, options) {
166
+ const attributes = this.buildAttributes(eventName, {
167
+ properties,
168
+ eventId: options?.eventId,
169
+ });
170
+ this.otelLogger.emit({
171
+ timestamp: this.getTimestamp(),
172
+ context: context.active(),
173
+ severityNumber: SeverityNumber.INFO,
174
+ severityText: "INFO",
175
+ attributes,
176
+ });
177
+ sdkLogger.debug(`Tracked: ${eventName}`);
178
+ }
179
+ feedback(name, options = {}) {
180
+ const { comments, conversationId, previousResponseId, eventId, ...extra } = options;
181
+ const properties = { name, ...extra };
182
+ if (comments)
183
+ properties.comments = comments;
184
+ const attributes = this.buildAttributes("introspection.feedback", {
185
+ properties,
186
+ conversationId: conversationId,
187
+ previousResponseId: previousResponseId,
188
+ eventId: eventId,
189
+ });
190
+ this.otelLogger.emit({
191
+ timestamp: this.getTimestamp(),
192
+ context: context.active(),
193
+ severityNumber: SeverityNumber.INFO,
194
+ severityText: "INFO",
195
+ attributes,
196
+ });
197
+ sdkLogger.debug(`Feedback: ${name}`);
198
+ }
199
+ identify(userId, traits, anonymousId, eventId) {
200
+ this.userId = userId;
201
+ if (anonymousId)
202
+ this.anonymousId = anonymousId;
203
+ if (traits)
204
+ this.traits = { ...this.traits, ...traits };
205
+ const attributes = this.buildAttributes("identify", { traits, eventId });
206
+ this.otelLogger.emit({
207
+ timestamp: this.getTimestamp(),
208
+ context: context.active(),
209
+ severityNumber: SeverityNumber.INFO,
210
+ severityText: "INFO",
211
+ attributes,
212
+ });
213
+ sdkLogger.debug(`Identified: ${userId}`);
214
+ }
215
+ createBaggageContext(values) {
216
+ const ctx = context.active();
217
+ let bag = propagation.getBaggage(ctx) || propagation.createBaggage();
218
+ for (const [key, value] of Object.entries(values)) {
219
+ bag = bag.setEntry(key, { value });
220
+ }
221
+ return propagation.setBaggage(ctx, bag);
222
+ }
223
+ async withBaggage(values, callback) {
224
+ const ctx = this.createBaggageContext(values);
225
+ return await context.with(ctx, callback);
226
+ }
227
+ async withAgent(agentName, agentId, callback) {
228
+ const values = { "gen_ai.agent.name": agentName };
229
+ if (agentId)
230
+ values["gen_ai.agent.id"] = agentId;
231
+ return await context.with(this.createBaggageContext(values), callback);
232
+ }
233
+ async withConversation(conversationId, previousResponseId, callback) {
234
+ const values = {};
235
+ if (conversationId)
236
+ values["gen_ai.conversation.id"] = conversationId;
237
+ if (previousResponseId)
238
+ values["gen_ai.request.previous_response_id"] = previousResponseId;
239
+ return await context.with(this.createBaggageContext(values), callback);
240
+ }
241
+ setUserId(userId) {
242
+ this.userId = userId;
243
+ }
244
+ setAnonymousId(anonymousId) {
245
+ this.anonymousId = anonymousId;
246
+ }
247
+ async withUserId(userId, callback) {
248
+ return await context.with(this.createBaggageContext({ "identity.user_id": userId }), callback);
249
+ }
250
+ async withAnonymousId(anonymousId, callback) {
251
+ return await context.with(this.createBaggageContext({ "identity.anonymous_id": anonymousId }), callback);
252
+ }
253
+ getAnonymousId() {
254
+ return this.anonymousId;
255
+ }
256
+ reset() {
257
+ this.userId = undefined;
258
+ this.anonymousId = undefined;
259
+ this.traits = {};
260
+ sdkLogger.debug("IntrospectionLogs state reset");
261
+ }
262
+ async flush() {
263
+ await this.loggerProvider.forceFlush();
264
+ sdkLogger.debug("Flushed pending log records");
265
+ }
266
+ async shutdown() {
267
+ await this.loggerProvider.shutdown();
268
+ sdkLogger.debug("IntrospectionLogs shutdown complete");
269
+ }
270
+ }
271
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/otel/logs.ts"],"names":[],"mappings":"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"}
@@ -42,7 +42,7 @@ export interface MastraExporterAdvancedOptions {
42
42
  export interface IntrospectionMastraExporterOptions {
43
43
  /** Authentication token (env: INTROSPECTION_TOKEN). */
44
44
  token?: string;
45
- /** Base URL for the API (env: INTROSPECTION_BASE_URL). */
45
+ /** Base URL for the API (env: INTROSPECTION_BASE_OTEL_URL). */
46
46
  baseUrl?: string;
47
47
  /** Additional headers to include in requests. */
48
48
  additionalHeaders?: Record<string, string>;
@@ -80,6 +80,8 @@ export declare class IntrospectionMastraExporter extends BaseExporter {
80
80
  private _getConversationId;
81
81
  private _convertInput;
82
82
  private _convertOutput;
83
+ /** Extract plain text from a message content field (string, array of parts, or AIv5 parts). */
84
+ private _extractTextContent;
83
85
  private _extractParts;
84
86
  }
85
87
  //# sourceMappingURL=mastra-exporter.d.ts.map
@@ -0,0 +1 @@
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;AAkBvC,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;IAgJxB,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,aAAa;IAuDrB,OAAO,CAAC,cAAc;IA6CtB,+FAA+F;IAC/F,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,aAAa;CA6DtB"}
@@ -33,8 +33,8 @@ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
33
33
  import { resourceFromAttributes } from "@opentelemetry/resources";
34
34
  import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
35
35
  import { randomUUID } from "crypto";
36
- import { logger, withOtlpHttpsProxy } from "./utils.js";
37
- import { VERSION } from "./version.js";
36
+ import { logger, withOtlpHttpsProxy } from "../utils.js";
37
+ import { VERSION } from "../version.js";
38
38
  // ---------------------------------------------------------------------------
39
39
  // Exporter
40
40
  // ---------------------------------------------------------------------------
@@ -91,7 +91,7 @@ export class IntrospectionMastraExporter extends BaseExporter {
91
91
  if (!token)
92
92
  return;
93
93
  const baseUrl = opts.baseUrl ||
94
- process.env.INTROSPECTION_BASE_URL ||
94
+ process.env.INTROSPECTION_BASE_OTEL_URL ||
95
95
  "https://otel.introspection.dev";
96
96
  const endpoint = baseUrl.endsWith("/v1/traces")
97
97
  ? baseUrl
@@ -196,7 +196,20 @@ export class IntrospectionMastraExporter extends BaseExporter {
196
196
  const rootSpan = this._rootSpans.get(span.traceId);
197
197
  rootSpan.setAttribute("gen_ai.conversation.id", conversationId);
198
198
  rootSpan.setAttribute("gen_ai.agent.name", span.entityName || span.name || "agent");
199
- if (attrs?.["instructions"] && typeof attrs["instructions"] === "string") {
199
+ // Prefer system messages from span.input (full prompt sent to LLM) over
200
+ // attrs.instructions (may be just the short placeholder string).
201
+ const inputMsgs = Array.isArray(span.input)
202
+ ? span.input
203
+ : undefined;
204
+ const systemMsgsFromInput = inputMsgs?.filter((m) => m.role === "system");
205
+ if (systemMsgsFromInput && systemMsgsFromInput.length > 0) {
206
+ rootSpan.setAttribute("gen_ai.system_instructions", JSON.stringify(systemMsgsFromInput.map((m) => ({
207
+ type: "text",
208
+ content: this._extractTextContent(m.content),
209
+ }))));
210
+ }
211
+ else if (attrs?.["instructions"] &&
212
+ typeof attrs["instructions"] === "string") {
200
213
  rootSpan.setAttribute("gen_ai.system_instructions", JSON.stringify([{ type: "text", content: attrs["instructions"] }]));
201
214
  }
202
215
  // Metadata passthrough
@@ -234,29 +247,43 @@ export class IntrospectionMastraExporter extends BaseExporter {
234
247
  otelSpan.setAttribute("gen_ai.response.model", responseModel);
235
248
  if (responseId)
236
249
  otelSpan.setAttribute("gen_ai.response.id", responseId);
237
- // Input messages — model_step has input.body.input (raw API messages)
250
+ // Input messages — span.input is either:
251
+ // (a) a flat normalized array { role, content }[] from Mastra's inputMessages path, or
252
+ // (b) an object { body: { input/messages, tools } } from the raw HTTP request path.
238
253
  if (span.input != null) {
239
- const rawInput = span.input;
240
- const body = rawInput?.body;
241
- const apiMessages = body?.input ?? body?.messages;
242
- if (Array.isArray(apiMessages)) {
254
+ let apiMessages;
255
+ let tools;
256
+ if (Array.isArray(span.input)) {
257
+ // Path (a): flat array already normalized by Mastra's normalizeMessages()
258
+ apiMessages = span.input;
259
+ }
260
+ else {
261
+ // Path (b): nested request body
262
+ const rawInput = span.input;
263
+ const body = rawInput?.body;
264
+ const msgs = body?.input ?? body?.messages;
265
+ if (Array.isArray(msgs)) {
266
+ apiMessages = msgs;
267
+ }
268
+ if (Array.isArray(body?.tools)) {
269
+ tools = body.tools;
270
+ }
271
+ }
272
+ if (apiMessages && apiMessages.length > 0) {
243
273
  const inputMessages = this._convertInput(apiMessages);
244
274
  if (inputMessages.length > 0) {
245
275
  otelSpan.setAttribute("gen_ai.input.messages", JSON.stringify(inputMessages));
246
276
  }
247
- // System instructions
277
+ // System instructions — combine all system messages into one attribute
248
278
  const systemMsgs = apiMessages.filter((m) => m.role === "system");
249
279
  if (systemMsgs.length > 0) {
250
280
  otelSpan.setAttribute("gen_ai.system_instructions", JSON.stringify(systemMsgs.map((m) => ({
251
281
  type: "text",
252
- content: typeof m.content === "string"
253
- ? m.content
254
- : JSON.stringify(m.content),
282
+ content: this._extractTextContent(m.content),
255
283
  }))));
256
284
  }
257
285
  }
258
- // Tool definitions from input.body.tools
259
- const tools = body?.tools;
286
+ // Tool definitions (only present on path (b))
260
287
  if (Array.isArray(tools) && tools.length > 0) {
261
288
  otelSpan.setAttribute("gen_ai.tool.definitions", JSON.stringify(tools.map((t) => ({
262
289
  type: t.type || "function",
@@ -283,6 +310,8 @@ export class IntrospectionMastraExporter extends BaseExporter {
283
310
  const inputDetails = usage["inputDetails"];
284
311
  if (typeof inputDetails?.["cacheRead"] === "number")
285
312
  otelSpan.setAttribute("gen_ai.usage.cache_read.input_tokens", inputDetails["cacheRead"]);
313
+ if (typeof inputDetails?.["cacheWrite"] === "number")
314
+ otelSpan.setAttribute("gen_ai.usage.cache_creation.input_tokens", inputDetails["cacheWrite"]);
286
315
  }
287
316
  // Finish reason
288
317
  const finishReason = attrs?.["finishReason"];
@@ -338,11 +367,16 @@ export class IntrospectionMastraExporter extends BaseExporter {
338
367
  // Skip system messages (handled separately)
339
368
  if (msg.role === "system")
340
369
  continue;
341
- // Standard role-based messages
370
+ // Standard role-based messages (AIv4 uses msg.content; AIv5 may use msg.parts)
342
371
  if (msg.role) {
372
+ const parts = msg.content != null
373
+ ? this._extractParts(msg.content)
374
+ : Array.isArray(msg.parts)
375
+ ? this._extractParts(msg.parts)
376
+ : [];
343
377
  result.push({
344
378
  role: msg.role,
345
- parts: this._extractParts(msg.content),
379
+ parts,
346
380
  });
347
381
  continue;
348
382
  }
@@ -412,6 +446,25 @@ export class IntrospectionMastraExporter extends BaseExporter {
412
446
  return [];
413
447
  return [{ role: "assistant", parts, finish_reason: finishReason }];
414
448
  }
449
+ /** Extract plain text from a message content field (string, array of parts, or AIv5 parts). */
450
+ _extractTextContent(content) {
451
+ if (typeof content === "string")
452
+ return content;
453
+ if (Array.isArray(content)) {
454
+ return content
455
+ .map((p) => {
456
+ const part = p;
457
+ return typeof part.text === "string"
458
+ ? part.text
459
+ : typeof part.content === "string"
460
+ ? part.content
461
+ : "";
462
+ })
463
+ .filter(Boolean)
464
+ .join("\n");
465
+ }
466
+ return typeof content === "undefined" ? "" : JSON.stringify(content);
467
+ }
415
468
  _extractParts(content) {
416
469
  if (typeof content === "string") {
417
470
  return [{ type: "text", content }];
@@ -469,3 +522,4 @@ export class IntrospectionMastraExporter extends BaseExporter {
469
522
  return [];
470
523
  }
471
524
  }
525
+ //# sourceMappingURL=mastra-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mastra-exporter.js","sourceRoot":"","sources":["../../src/otel/mastra-exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * High-level pi Agent SDK integration for Introspection.
3
+ *
4
+ * Wraps {@link @introspection-sdk/introspection-pi} behind a zero-config
5
+ * interface so users don't need to manage OpenTelemetry tracers directly.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { IntrospectionPiInstrumentor, setupTracing } from "@introspection-sdk/introspection-node";
10
+ * import { Agent } from "@mariozechner/pi-agent-core";
11
+ *
12
+ * setupTracing({ serviceName: "my-app" });
13
+ * const instrumentor = new IntrospectionPiInstrumentor();
14
+ *
15
+ * const agent = new Agent({ ... });
16
+ * instrumentor.instrument(agent, {
17
+ * conversationId: "conv-123",
18
+ * agentId: "weather-agent",
19
+ * agentName: "Weather",
20
+ * });
21
+ *
22
+ * await agent.prompt("What's the weather in Tokyo?");
23
+ * instrumentor.stop();
24
+ * ```
25
+ */
26
+ import type { Agent } from "@mariozechner/pi-agent-core";
27
+ import { type AgentMeta } from "@introspection-sdk/introspection-pi";
28
+ export type { AgentMeta } from "@introspection-sdk/introspection-pi";
29
+ export interface IntrospectionPiInstrumentorOptions {
30
+ /** Tracer name used for all spans produced by this instrumentor. */
31
+ tracerName?: string;
32
+ }
33
+ /**
34
+ * Zero-config pi Agent SDK integration for Introspection.
35
+ *
36
+ * Uses the global OTel tracer provider (registered by {@link setupTracing}).
37
+ * Call {@link instrument} once per {@link Agent} instance, then {@link stop}
38
+ * to unsubscribe all tool instrumentation and finalize open spans.
39
+ */
40
+ export declare class IntrospectionPiInstrumentor {
41
+ private _tracer;
42
+ private _instrumentations;
43
+ constructor(opts?: IntrospectionPiInstrumentorOptions);
44
+ /**
45
+ * Instrument a pi {@link Agent}:
46
+ * - Wraps `agent.streamFn` to emit a `chat ${provider}` span per LLM call.
47
+ * - Subscribes to the agent loop to emit an `execute_tool ${name}` span per
48
+ * tool execution.
49
+ *
50
+ * @param agent - The pi Agent instance to instrument.
51
+ * @param meta - Identity metadata stamped on every span produced by this agent.
52
+ */
53
+ instrument(agent: Agent, meta: AgentMeta): void;
54
+ /**
55
+ * Unsubscribe all active tool instrumentations and finalize any open spans.
56
+ */
57
+ stop(): void;
58
+ }
59
+ //# sourceMappingURL=pi.d.ts.map