@introspection-sdk/introspection-node 0.19.1 → 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 +4 -7
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +3 -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 -266
  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,475 +0,0 @@
1
- /**
2
- * Lightweight Anthropic instrumentor for Introspection SDK.
3
- *
4
- * Captures the full Anthropic response including thinking blocks (extended
5
- * thinking) with signatures, which third-party instrumentors drop.
6
- *
7
- * Supports both non-streaming (`messages.create`) and streaming
8
- * (`messages.create({ stream: true })`) calls.
9
- *
10
- * @example
11
- * ```ts
12
- * import { AnthropicInstrumentor } from "@introspection-sdk/introspection-node";
13
- *
14
- * const instrumentor = new AnthropicInstrumentor();
15
- * instrumentor.instrument({ tracerProvider: provider });
16
- * // All client.messages.create calls are now traced
17
- * ```
18
- */
19
- import { providerCostAttributes } from "@introspection-sdk/types";
20
- import { trace, context as otelContext, propagation, SpanKind, SpanStatusCode, } from "@opentelemetry/api";
21
- // ---------------------------------------------------------------------------
22
- // Converters
23
- // ---------------------------------------------------------------------------
24
- /** Sentinel value for redacted thinking blocks — content was encrypted by safety systems. */
25
- export const REDACTED_THINKING_CONTENT = "[redacted]";
26
- function blockToParts(block) {
27
- const bt = block.type || "";
28
- if (bt === "text") {
29
- return [{ type: "text", content: block.text || "" }];
30
- }
31
- if (bt === "thinking") {
32
- const part = {
33
- type: "reasoning",
34
- content: block.thinking || REDACTED_THINKING_CONTENT,
35
- signature: block.signature || undefined,
36
- provider_name: "anthropic",
37
- };
38
- return [part];
39
- }
40
- if (bt === "redacted_thinking") {
41
- return [
42
- {
43
- type: "reasoning",
44
- content: REDACTED_THINKING_CONTENT,
45
- signature: block.data || undefined,
46
- provider_name: "anthropic",
47
- },
48
- ];
49
- }
50
- if (bt === "tool_use") {
51
- return [
52
- {
53
- type: "tool_call",
54
- id: block.id || "",
55
- name: block.name || "",
56
- arguments: block.input,
57
- },
58
- ];
59
- }
60
- if (bt === "tool_result") {
61
- return [
62
- {
63
- type: "tool_call_response",
64
- id: block.tool_use_id || "",
65
- response: block.content != null ? String(block.content) : "",
66
- },
67
- ];
68
- }
69
- return [];
70
- }
71
- function convertAnthropicInput(messages) {
72
- const result = [];
73
- for (const msg of messages) {
74
- const role = msg.role || "user";
75
- const content = msg.content;
76
- if (typeof content === "string") {
77
- result.push({
78
- role: role,
79
- parts: [{ type: "text", content }],
80
- });
81
- }
82
- else if (Array.isArray(content)) {
83
- const parts = [];
84
- for (const block of content) {
85
- const rec = typeof block === "object" && block !== null
86
- ? block
87
- : { type: "text", text: String(block) };
88
- parts.push(...blockToParts(rec));
89
- }
90
- if (parts.length > 0) {
91
- result.push({ role: role, parts });
92
- }
93
- }
94
- }
95
- return result;
96
- }
97
- function convertAnthropicOutput(content) {
98
- const parts = [];
99
- let hasToolCalls = false;
100
- for (const block of content) {
101
- const newParts = blockToParts(block);
102
- for (const p of newParts) {
103
- if (p.type === "tool_call")
104
- hasToolCalls = true;
105
- }
106
- parts.push(...newParts);
107
- }
108
- if (parts.length === 0)
109
- return [];
110
- return [
111
- {
112
- role: "assistant",
113
- parts,
114
- finish_reason: hasToolCalls ? "tool-calls" : "stop",
115
- },
116
- ];
117
- }
118
- // ---------------------------------------------------------------------------
119
- // Span helpers
120
- // ---------------------------------------------------------------------------
121
- function serializeMessages(msgs) {
122
- return JSON.stringify(msgs.map((m) => {
123
- const obj = { role: m.role, parts: m.parts };
124
- if ("finish_reason" in m && m.finish_reason) {
125
- obj.finish_reason = m.finish_reason;
126
- }
127
- return obj;
128
- }));
129
- }
130
- function startSpan(tracer, model, conversationId) {
131
- const span = tracer.startSpan("chat", {
132
- kind: SpanKind.CLIENT,
133
- attributes: {
134
- "gen_ai.provider.name": "anthropic",
135
- "gen_ai.operation.name": "chat",
136
- "gen_ai.request.model": model,
137
- "openinference.span.kind": "LLM",
138
- ...(conversationId
139
- ? { "gen_ai.conversation.id": conversationId }
140
- : undefined),
141
- },
142
- });
143
- return { span, token: null };
144
- }
145
- function setRequestAttrs(span, kwargs) {
146
- const messages = kwargs.messages || [];
147
- const inputMsgs = convertAnthropicInput(messages);
148
- if (inputMsgs.length > 0) {
149
- span.setAttribute("gen_ai.input.messages", serializeMessages(inputMsgs));
150
- }
151
- const system = kwargs.system;
152
- if (system) {
153
- let sysVal;
154
- if (typeof system === "string") {
155
- sysVal = JSON.stringify([{ type: "text", content: system }]);
156
- }
157
- else if (Array.isArray(system)) {
158
- // Anthropic block format: [{type:"text", text:"...", cache_control:{...}}]
159
- // Normalize to gen_ai format: [{type:"text", content:"..."}]
160
- sysVal = JSON.stringify(system.map((block) => ({
161
- type: "text",
162
- content: typeof block.text === "string"
163
- ? block.text
164
- : typeof block.content === "string"
165
- ? block.content
166
- : "",
167
- })));
168
- }
169
- else {
170
- sysVal = JSON.stringify(system);
171
- }
172
- span.setAttribute("gen_ai.system_instructions", sysVal);
173
- }
174
- const tools = kwargs.tools;
175
- if (tools && tools.length > 0) {
176
- const defs = tools.map((t) => ({
177
- name: t.name || "",
178
- description: t.description,
179
- parameters: t.input_schema,
180
- }));
181
- span.setAttribute("gen_ai.tool.definitions", JSON.stringify(defs));
182
- }
183
- }
184
- function setResponseAttrs(span, response) {
185
- const content = response.content;
186
- if (content) {
187
- const outputMsgs = convertAnthropicOutput(content);
188
- if (outputMsgs.length > 0) {
189
- span.setAttribute("gen_ai.output.messages", serializeMessages(outputMsgs));
190
- }
191
- }
192
- if (response.id)
193
- span.setAttribute("gen_ai.response.id", String(response.id));
194
- if (response.model)
195
- span.setAttribute("gen_ai.response.model", String(response.model));
196
- const usage = response.usage;
197
- if (usage) {
198
- if (usage.input_tokens != null)
199
- span.setAttribute("gen_ai.usage.input_tokens", usage.input_tokens);
200
- if (usage.output_tokens != null)
201
- span.setAttribute("gen_ai.usage.output_tokens", usage.output_tokens);
202
- if (usage.cache_read_input_tokens != null)
203
- span.setAttribute("gen_ai.usage.cache_read.input_tokens", usage.cache_read_input_tokens);
204
- if (usage.cache_creation_input_tokens != null)
205
- span.setAttribute("gen_ai.usage.cache_creation.input_tokens", usage.cache_creation_input_tokens);
206
- // Provider-reported cost (e.g. OpenRouter usage.cost) when present.
207
- span.setAttributes(providerCostAttributes(usage));
208
- }
209
- span.setStatus({ code: SpanStatusCode.OK });
210
- }
211
- class TracedStream {
212
- inner;
213
- span;
214
- blocks = [];
215
- currentBlock = null;
216
- responseId = null;
217
- responseModel = null;
218
- inputTokens = 0;
219
- outputTokens = 0;
220
- cacheReadInputTokens = 0;
221
- cacheCreationInputTokens = 0;
222
- costAttrs = {};
223
- finalized = false;
224
- constructor(inner, span) {
225
- this.inner = inner;
226
- this.span = span;
227
- }
228
- async *[Symbol.asyncIterator]() {
229
- try {
230
- for await (const event of this.inner) {
231
- this.processEvent(event);
232
- yield event;
233
- }
234
- }
235
- finally {
236
- this.finalize();
237
- }
238
- }
239
- processEvent(event) {
240
- if (event.type === "message_start" && event.message) {
241
- this.responseId = event.message.id || null;
242
- this.responseModel = event.message.model || null;
243
- const usage = event.message.usage;
244
- if (usage) {
245
- this.inputTokens = usage.input_tokens || 0;
246
- this.cacheReadInputTokens = usage.cache_read_input_tokens || 0;
247
- this.cacheCreationInputTokens = usage.cache_creation_input_tokens || 0;
248
- Object.assign(this.costAttrs, providerCostAttributes(usage));
249
- }
250
- }
251
- else if (event.type === "content_block_start" && event.content_block) {
252
- const bt = event.content_block.type || "";
253
- this.currentBlock = { type: bt };
254
- if (bt === "thinking") {
255
- this.currentBlock.thinking = "";
256
- this.currentBlock.signature = "";
257
- }
258
- else if (bt === "text") {
259
- this.currentBlock.text = "";
260
- }
261
- }
262
- else if (event.type === "content_block_delta" && event.delta) {
263
- if (!this.currentBlock)
264
- return;
265
- const dt = event.delta.type || "";
266
- if (dt === "thinking_delta") {
267
- this.currentBlock.thinking =
268
- (this.currentBlock.thinking || "") +
269
- (event.delta.thinking || "");
270
- }
271
- else if (dt === "text_delta") {
272
- this.currentBlock.text =
273
- (this.currentBlock.text || "") +
274
- (event.delta.text || "");
275
- }
276
- else if (dt === "signature_delta") {
277
- this.currentBlock.signature =
278
- (this.currentBlock.signature || "") +
279
- (event.delta.signature || "");
280
- }
281
- }
282
- else if (event.type === "content_block_stop") {
283
- if (this.currentBlock) {
284
- this.blocks.push(this.currentBlock);
285
- this.currentBlock = null;
286
- }
287
- }
288
- else if (event.type === "message_delta") {
289
- const usage = event.usage;
290
- if (usage) {
291
- this.outputTokens = usage.output_tokens || 0;
292
- Object.assign(this.costAttrs, providerCostAttributes(usage));
293
- }
294
- }
295
- }
296
- finalize() {
297
- if (this.finalized)
298
- return;
299
- this.finalized = true;
300
- if (this.blocks.length > 0) {
301
- const outputMsgs = convertAnthropicOutput(this.blocks);
302
- if (outputMsgs.length > 0) {
303
- this.span.setAttribute("gen_ai.output.messages", serializeMessages(outputMsgs));
304
- }
305
- }
306
- if (this.responseId)
307
- this.span.setAttribute("gen_ai.response.id", this.responseId);
308
- if (this.responseModel)
309
- this.span.setAttribute("gen_ai.response.model", this.responseModel);
310
- if (this.inputTokens)
311
- this.span.setAttribute("gen_ai.usage.input_tokens", this.inputTokens);
312
- if (this.outputTokens)
313
- this.span.setAttribute("gen_ai.usage.output_tokens", this.outputTokens);
314
- if (this.cacheReadInputTokens)
315
- this.span.setAttribute("gen_ai.usage.cache_read.input_tokens", this.cacheReadInputTokens);
316
- if (this.cacheCreationInputTokens)
317
- this.span.setAttribute("gen_ai.usage.cache_creation.input_tokens", this.cacheCreationInputTokens);
318
- // Provider-reported cost (e.g. OpenRouter usage.cost) when present.
319
- this.span.setAttributes(this.costAttrs);
320
- this.span.setStatus({ code: SpanStatusCode.OK });
321
- this.span.end();
322
- }
323
- }
324
- // ---------------------------------------------------------------------------
325
- // Public API
326
- // ---------------------------------------------------------------------------
327
- /**
328
- * Traced wrapper around `client.messages.create(kwargs)`.
329
- * Creates a gen_ai span with full Anthropic response including thinking blocks.
330
- */
331
- export async function tracedMessagesCreate(tracer, client, kwargs, conversationId) {
332
- const { span } = startSpan(tracer, kwargs.model || "unknown", conversationId);
333
- try {
334
- setRequestAttrs(span, kwargs);
335
- const response = (await client.messages.create(kwargs));
336
- setResponseAttrs(span, response);
337
- return response;
338
- }
339
- catch (e) {
340
- span.setStatus({
341
- code: SpanStatusCode.ERROR,
342
- message: String(e),
343
- });
344
- throw e;
345
- }
346
- finally {
347
- span.end();
348
- }
349
- }
350
- /**
351
- * Auto-instrumentor that patches `Anthropic.messages.create` to add tracing.
352
- *
353
- * Captures all content blocks including thinking (extended thinking) with
354
- * signatures. Supports both non-streaming and streaming calls.
355
- */
356
- /**
357
- * Auto-instrumentor that wraps an Anthropic client instance to add tracing.
358
- *
359
- * Captures all content blocks including thinking (extended thinking) with
360
- * signatures. Supports both non-streaming and streaming calls.
361
- */
362
- /**
363
- * Build the traced replacement for `messages.create`.
364
- *
365
- * Shared by {@link AnthropicInstrumentor.instrument} (patches a single client
366
- * instance) and {@link AnthropicInstrumentor.instrumentClass} (patches
367
- * `Anthropic.Messages.prototype.create` so every client is auto-traced). The
368
- * returned function preserves the call-site `this`, so it works whether it is
369
- * assigned to an instance property or onto the class prototype.
370
- */
371
- function buildTracedCreate(
372
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
373
- origCreate, tracer, defaultConversationId) {
374
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
375
- return function tracedCreate(...args) {
376
- const kwargs = args[0];
377
- const isStream = kwargs?.stream === true;
378
- // Baggage on the active context overrides the conversation ID bound at
379
- // instrument() time, so callers can wrap a request in
380
- // IntrospectionClient.withConversation() to scope a single call to a
381
- // distinct conversation without re-instrumenting the client.
382
- const baggage = propagation.getBaggage(otelContext.active());
383
- const baggageConvId = baggage?.getEntry("gen_ai.conversation.id")?.value;
384
- const baggageAgentName = baggage?.getEntry("gen_ai.agent.name")?.value;
385
- const baggageAgentId = baggage?.getEntry("gen_ai.agent.id")?.value;
386
- const { span } = startSpan(tracer, kwargs?.model || "unknown", baggageConvId ?? defaultConversationId);
387
- if (baggageAgentName) {
388
- span.setAttribute("gen_ai.agent.name", baggageAgentName);
389
- }
390
- if (baggageAgentId) {
391
- span.setAttribute("gen_ai.agent.id", baggageAgentId);
392
- }
393
- setRequestAttrs(span, kwargs || {});
394
- if (isStream) {
395
- const streamPromise = origCreate.apply(this, args);
396
- return streamPromise.then((stream) => new TracedStream(stream, span), (err) => {
397
- span.setStatus({ code: SpanStatusCode.ERROR, message: String(err) });
398
- span.end();
399
- throw err;
400
- });
401
- }
402
- const resultPromise = origCreate.apply(this, args);
403
- return resultPromise.then((response) => {
404
- setResponseAttrs(span, response);
405
- span.end();
406
- return response;
407
- }, (err) => {
408
- span.setStatus({ code: SpanStatusCode.ERROR, message: String(err) });
409
- span.end();
410
- throw err;
411
- });
412
- };
413
- }
414
- /**
415
- * Marker placed on a patched `Messages.prototype.create` so repeated
416
- * `instrumentClass()` calls (e.g. a second `introspection.init()`) are no-ops.
417
- */
418
- const PATCHED = Symbol.for("introspection.anthropic.patched");
419
- export class AnthropicInstrumentor {
420
- tracer = null;
421
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
422
- patchedClients = [];
423
- protoRestores = [];
424
- conversationId;
425
- instrument(opts) {
426
- const { client } = opts;
427
- if (!client?.messages?.create) {
428
- throw new Error("Invalid client — pass an Anthropic client instance (new Anthropic())");
429
- }
430
- this.conversationId = opts.conversationId ?? crypto.randomUUID();
431
- const provider = opts.tracerProvider ?? trace.getTracerProvider();
432
- this.tracer = provider.getTracer("introspection-anthropic");
433
- const origCreate = client.messages.create.bind(client.messages);
434
- this.patchedClients.push({ client, originalCreate: origCreate });
435
- client.messages.create = buildTracedCreate(origCreate, this.tracer, this.conversationId);
436
- }
437
- /**
438
- * Patch `Anthropic.Messages.prototype.create` so **every** client constructed
439
- * from the given module is traced — the one-liner path used by
440
- * `introspection.init()`. Idempotent: a second call is a no-op.
441
- *
442
- * @param opts.anthropic The `@anthropic-ai/sdk` module's default export
443
- * (the `Anthropic` class). Its `.Messages.prototype.create` is patched.
444
- */
445
- instrumentClass(opts) {
446
- const Messages = opts.anthropic?.Messages;
447
- const proto = Messages?.prototype;
448
- if (typeof proto?.create !== "function") {
449
- throw new Error("Invalid Anthropic module — expected `Anthropic.Messages.prototype.create`");
450
- }
451
- if (proto.create[PATCHED])
452
- return;
453
- this.conversationId = opts.conversationId ?? crypto.randomUUID();
454
- const provider = opts.tracerProvider ?? trace.getTracerProvider();
455
- this.tracer = provider.getTracer("introspection-anthropic");
456
- const origCreate = proto.create;
457
- const patched = buildTracedCreate(origCreate, this.tracer, this.conversationId);
458
- patched[PATCHED] = true;
459
- proto.create = patched;
460
- this.protoRestores.push(() => {
461
- proto.create = origCreate;
462
- });
463
- }
464
- uninstrument() {
465
- for (const { client, originalCreate } of this.patchedClients) {
466
- client.messages.create = originalCreate;
467
- }
468
- this.patchedClients = [];
469
- for (const restore of this.protoRestores)
470
- restore();
471
- this.protoRestores = [];
472
- this.tracer = null;
473
- }
474
- }
475
- //# sourceMappingURL=anthropic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/otel/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EACL,KAAK,EACL,OAAO,IAAI,WAAW,EACtB,WAAW,EACX,QAAQ,EACR,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,6FAA6F;AAC7F,MAAM,CAAC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAEtD,SAAS,YAAY,CAAC,KAA8B;IAClD,MAAM,EAAE,GAAI,KAAK,CAAC,IAAe,IAAI,EAAE,CAAC;IAExC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAG,KAAK,CAAC,IAAe,IAAI,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;QACtB,MAAM,IAAI,GAAkB;YAC1B,IAAI,EAAE,WAAW;YACjB,OAAO,EAAG,KAAK,CAAC,QAAmB,IAAI,yBAAyB;YAChE,SAAS,EAAG,KAAK,CAAC,SAAoB,IAAI,SAAS;YACnD,aAAa,EAAE,WAAW;SAC3B,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,EAAE,KAAK,mBAAmB,EAAE,CAAC;QAC/B,OAAO;YACL;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,yBAAyB;gBAClC,SAAS,EAAG,KAAK,CAAC,IAAe,IAAI,SAAS;gBAC9C,aAAa,EAAE,WAAW;aAC3B;SACF,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;QACtB,OAAO;YACL;gBACE,IAAI,EAAE,WAAW;gBACjB,EAAE,EAAG,KAAK,CAAC,EAAa,IAAI,EAAE;gBAC9B,IAAI,EAAG,KAAK,CAAC,IAAe,IAAI,EAAE;gBAClC,SAAS,EAAE,KAAK,CAAC,KAAK;aACvB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,KAAK,aAAa,EAAE,CAAC;QACzB,OAAO;YACL;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,EAAE,EAAG,KAAK,CAAC,WAAsB,IAAI,EAAE;gBACvC,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;aAC7D;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAAwC;IAExC,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAI,GAAG,CAAC,IAAe,IAAI,MAAM,CAAC;QAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,IAA4B;gBAClC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAkB,EAAE,CAAC;YAChC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,GAAG,GACP,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;oBACzC,CAAC,CAAE,KAAiC;oBACpC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAA4B,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAC7B,OAAuC;IAEvC,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;gBAAE,YAAY,GAAG,IAAI,CAAC;QAClD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO;QACL;YACE,IAAI,EAAE,WAAW;YACjB,KAAK;YACL,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;SACpD;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,IAAsC;IAC/D,OAAO,IAAI,CAAC,SAAS,CACnB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACb,MAAM,GAAG,GAA4B,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACtE,IAAI,eAAe,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;YAC5C,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;QACtC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAChB,MAAc,EACd,KAAa,EACb,cAAuB;IAEvB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE;QACpC,IAAI,EAAE,QAAQ,CAAC,MAAM;QACrB,UAAU,EAAE;YACV,sBAAsB,EAAE,WAAW;YACnC,uBAAuB,EAAE,MAAM;YAC/B,sBAAsB,EAAE,KAAK;YAC7B,yBAAyB,EAAE,KAAK;YAChC,GAAG,CAAC,cAAc;gBAChB,CAAC,CAAC,EAAE,wBAAwB,EAAE,cAAc,EAAE;gBAC9C,CAAC,CAAC,SAAS,CAAC;SACf;KACF,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe,CAAC,IAAU,EAAE,MAA+B;IAClE,MAAM,QAAQ,GAAI,MAAM,CAAC,QAA2C,IAAI,EAAE,CAAC;IAC3E,MAAM,SAAS,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAc,CAAC;QACnB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,2EAA2E;YAC3E,6DAA6D;YAC7D,MAAM,GAAG,IAAI,CAAC,SAAS,CACpB,MAAyC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACzD,IAAI,EAAE,MAAM;gBACZ,OAAO,EACL,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;oBAC5B,CAAC,CAAC,KAAK,CAAC,IAAI;oBACZ,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;wBACjC,CAAC,CAAC,KAAK,CAAC,OAAO;wBACf,CAAC,CAAC,EAAE;aACX,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAmD,CAAC;IACzE,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;YAClB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,UAAU,EAAE,CAAC,CAAC,YAAY;SAC3B,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAU,EAAE,QAAiC;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,OACmB,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,YAAY,CACf,wBAAwB,EACxB,iBAAiB,CAAC,UAAU,CAAC,CAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,IAAI,QAAQ,CAAC,KAAK;QAChB,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAErE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAA2C,CAAC;IACnE,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,KAAK,CAAC,YAAY,IAAI,IAAI;YAC5B,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACrE,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI;YAC7B,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QACvE,IAAI,KAAK,CAAC,uBAAuB,IAAI,IAAI;YACvC,IAAI,CAAC,YAAY,CACf,sCAAsC,EACtC,KAAK,CAAC,uBAAuB,CAC9B,CAAC;QACJ,IAAI,KAAK,CAAC,2BAA2B,IAAI,IAAI;YAC3C,IAAI,CAAC,YAAY,CACf,0CAA0C,EAC1C,KAAK,CAAC,2BAA2B,CAClC,CAAC;QACJ,oEAAoE;QACpE,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAcD,MAAM,YAAY;IACR,KAAK,CAA6B;IAClC,IAAI,CAAO;IACX,MAAM,GAAmC,EAAE,CAAC;IAC5C,YAAY,GAAmC,IAAI,CAAC;IACpD,UAAU,GAAkB,IAAI,CAAC;IACjC,aAAa,GAAkB,IAAI,CAAC;IACpC,WAAW,GAAG,CAAC,CAAC;IAChB,YAAY,GAAG,CAAC,CAAC;IACjB,oBAAoB,GAAG,CAAC,CAAC;IACzB,wBAAwB,GAAG,CAAC,CAAC;IAC7B,SAAS,GAA2B,EAAE,CAAC;IACvC,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,KAAiC,EAAE,IAAU;QACvD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,KAAkB;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACpD,IAAI,CAAC,UAAU,GAAI,KAAK,CAAC,OAAO,CAAC,EAAa,IAAI,IAAI,CAAC;YACvD,IAAI,CAAC,aAAa,GAAI,KAAK,CAAC,OAAO,CAAC,KAAgB,IAAI,IAAI,CAAC;YAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAA2C,CAAC;YACxE,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,uBAAuB,IAAI,CAAC,CAAC;gBAC/D,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC;gBACvE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACvE,MAAM,EAAE,GAAI,KAAK,CAAC,aAAa,CAAC,IAAe,IAAI,EAAE,CAAC;YACtD,IAAI,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YACjC,IAAI,EAAE,KAAK,UAAU,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;YACnC,CAAC;iBAAM,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;gBACzB,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAC/B,MAAM,EAAE,GAAI,KAAK,CAAC,KAAK,CAAC,IAAe,IAAI,EAAE,CAAC;YAC9C,IAAI,EAAE,KAAK,gBAAgB,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,CAAC,QAAQ;oBACxB,CAAE,IAAI,CAAC,YAAY,CAAC,QAAmB,IAAI,EAAE,CAAC;wBAC9C,CAAE,KAAK,CAAC,KAAK,CAAC,QAAmB,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,EAAE,KAAK,YAAY,EAAE,CAAC;gBAC/B,IAAI,CAAC,YAAY,CAAC,IAAI;oBACpB,CAAE,IAAI,CAAC,YAAY,CAAC,IAAe,IAAI,EAAE,CAAC;wBAC1C,CAAE,KAAK,CAAC,KAAK,CAAC,IAAe,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,EAAE,KAAK,iBAAiB,EAAE,CAAC;gBACpC,IAAI,CAAC,YAAY,CAAC,SAAS;oBACzB,CAAE,IAAI,CAAC,YAAY,CAAC,SAAoB,IAAI,EAAE,CAAC;wBAC/C,CAAE,KAAK,CAAC,KAAK,CAAC,SAAoB,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACpC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAI,KAA4C,CAAC,KACxB,CAAC;YACrC,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;gBAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,YAAY,CACpB,wBAAwB,EACxB,iBAAiB,CAAC,UAAU,CAAC,CAC9B,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,UAAU;YACjB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,aAAa;YACpB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,WAAW;YAClB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,YAAY;YACnB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,oBAAoB;YAC3B,IAAI,CAAC,IAAI,CAAC,YAAY,CACpB,sCAAsC,EACtC,IAAI,CAAC,oBAAoB,CAC1B,CAAC;QACJ,IAAI,IAAI,CAAC,wBAAwB;YAC/B,IAAI,CAAC,IAAI,CAAC,YAAY,CACpB,0CAA0C,EAC1C,IAAI,CAAC,wBAAwB,CAC9B,CAAC;QACJ,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IAClB,CAAC;CACF;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAc,EACd,MAA0E,EAC1E,MAA+B,EAC/B,cAAuB;IAEvB,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CACxB,MAAM,EACL,MAAM,CAAC,KAAgB,IAAI,SAAS,EACrC,cAAc,CACf,CAAC;IACF,IAAI,CAAC;QACH,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAGrD,CAAC;QACF,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,cAAc,CAAC,KAAK;YAC1B,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,CAAC;IACV,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH;;;;;GAKG;AACH;;;;;;;;GAQG;AACH,SAAS,iBAAiB;AACxB,8DAA8D;AAC9D,UAAmC,EACnC,MAAc,EACd,qBAA6B;IAG7B,8DAA8D;IAC9D,OAAO,SAAS,YAAY,CAAgB,GAAG,IAAW;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAA4B,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;QAEzC,uEAAuE;QACvE,sDAAsD;QACtD,qEAAqE;QACrE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAG,OAAO,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC;QACzE,MAAM,gBAAgB,GAAG,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC;QACvE,MAAM,cAAc,GAAG,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAEnE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CACxB,MAAM,EACL,MAAM,EAAE,KAAgB,IAAI,SAAS,EACtC,aAAa,IAAI,qBAAqB,CACvC,CAAC;QACF,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;QACvD,CAAC;QACD,eAAe,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QAEpC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAEhD,CAAC;YACF,OAAO,aAAa,CAAC,IAAI,CACvB,CAAC,MAAkC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EACtE,CAAC,GAAU,EAAE,EAAE;gBACb,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrE,IAAI,CAAC,GAAG,EAAE,CAAC;gBACX,MAAM,GAAG,CAAC;YACZ,CAAC,CACF,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAEhD,CAAC;QACF,OAAO,aAAa,CAAC,IAAI,CACvB,CAAC,QAAiC,EAAE,EAAE;YACpC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,OAAO,QAAQ,CAAC;QAClB,CAAC,EACD,CAAC,GAAU,EAAE,EAAE;YACb,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrE,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,MAAM,GAAG,CAAC;QACZ,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAE9D,MAAM,OAAO,qBAAqB;IACxB,MAAM,GAAkB,IAAI,CAAC;IACrC,8DAA8D;IACtD,cAAc,GAAgD,EAAE,CAAC;IACjE,aAAa,GAAsB,EAAE,CAAC;IACtC,cAAc,CAAqB;IAE3C,UAAU,CAAC,IAYV;QACC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAEjE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAClE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAE5D,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;QAEjE,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,iBAAiB,CACxC,UAAU,EACV,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,eAAe,CAAC,IAKf;QACC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC1C,MAAM,KAAK,GAAG,QAAQ,EAAE,SAAS,CAAC;QAClC,IAAI,OAAO,KAAK,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,OAAO;QAElC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAClE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAE5D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,MAAM,OAAO,GAAG,iBAAiB,CAC/B,UAAU,EACV,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,cAAc,CAC2C,CAAC;QACjE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QACxB,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE;YAC3B,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY;QACV,KAAK,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7D,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,EAAE,CAAC;QACpD,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF"}