@brizz/sdk 0.1.26 → 0.1.28

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.
package/dist/preload.cjs CHANGED
@@ -471,6 +471,8 @@ var PROPERTIES = "properties";
471
471
  var SESSION_ID = "session.id";
472
472
  var PROPERTIES_CONTEXT_KEY = (0, import_api3.createContextKey)(PROPERTIES);
473
473
  var SESSION_OBJECT_CONTEXT_KEY = (0, import_api3.createContextKey)("brizz.session.object");
474
+ var INTERRUPT_TOOLS = "brizz.internal.interrupt";
475
+ var INTERNAL_EVENT_PREFIX = "brizz.internal.";
474
476
 
475
477
  // src/internal/instrumentation/mcp/session.ts
476
478
  function stampAndPropagateSession(span, sessionId, baseContext = import_api4.context.active()) {
@@ -908,7 +910,7 @@ function safeEnd(span) {
908
910
 
909
911
  // src/internal/version.ts
910
912
  function getSDKVersion() {
911
- return "0.1.26";
913
+ return "0.1.28";
912
914
  }
913
915
 
914
916
  // src/internal/instrumentation/mcp/version.ts
@@ -1166,14 +1168,55 @@ var InstrumentationRegistry = class _InstrumentationRegistry {
1166
1168
  }
1167
1169
  };
1168
1170
 
1171
+ // src/internal/instrumentation/vercel-ai/interrupt.ts
1172
+ var import_api8 = require("@opentelemetry/api");
1173
+ var INNER_OPERATION_IDS = /* @__PURE__ */ new Set([
1174
+ "ai.generateText.doGenerate",
1175
+ "ai.streamText.doStream"
1176
+ ]);
1177
+ function isInnerLLMSpan(span) {
1178
+ if (INNER_OPERATION_IDS.has(span.name)) {
1179
+ return true;
1180
+ }
1181
+ const opId = span.attributes["ai.operationId"];
1182
+ return typeof opId === "string" && INNER_OPERATION_IDS.has(opId);
1183
+ }
1184
+ var pendingByParentSpanId = /* @__PURE__ */ new Map();
1185
+ var InterruptPropagator = class {
1186
+ onStart(span, _parentContext) {
1187
+ if (!isInnerLLMSpan(span)) {
1188
+ return;
1189
+ }
1190
+ const parentSpanId = span.parentSpanContext?.spanId;
1191
+ if (!parentSpanId) {
1192
+ return;
1193
+ }
1194
+ const value = pendingByParentSpanId.get(parentSpanId);
1195
+ if (!value) {
1196
+ return;
1197
+ }
1198
+ span.setAttribute(INTERRUPT_TOOLS, value);
1199
+ pendingByParentSpanId.delete(parentSpanId);
1200
+ }
1201
+ onEnd() {
1202
+ }
1203
+ async shutdown() {
1204
+ }
1205
+ async forceFlush() {
1206
+ }
1207
+ };
1208
+
1169
1209
  // src/internal/log/logging.ts
1170
1210
  var import_api_logs = require("@opentelemetry/api-logs");
1171
1211
  var import_exporter_logs_otlp_http = require("@opentelemetry/exporter-logs-otlp-http");
1172
1212
  var import_resources = require("@opentelemetry/resources");
1173
1213
  var import_sdk_logs2 = require("@opentelemetry/sdk-logs");
1174
1214
 
1215
+ // src/internal/trace/session.ts
1216
+ var import_api9 = require("@opentelemetry/api");
1217
+
1175
1218
  // src/internal/log/processors/log-processor.ts
1176
- var import_api8 = require("@opentelemetry/api");
1219
+ var import_api10 = require("@opentelemetry/api");
1177
1220
  var import_sdk_logs = require("@opentelemetry/sdk-logs");
1178
1221
 
1179
1222
  // src/internal/masking/patterns.ts
@@ -1602,7 +1645,7 @@ var BrizzSimpleLogRecordProcessor = class extends import_sdk_logs.SimpleLogRecor
1602
1645
  if (maskingConfig) {
1603
1646
  maskLog(logRecord, maskingConfig);
1604
1647
  }
1605
- const associationProperties = import_api8.context.active().getValue(PROPERTIES_CONTEXT_KEY);
1648
+ const associationProperties = import_api10.context.active().getValue(PROPERTIES_CONTEXT_KEY);
1606
1649
  if (associationProperties) {
1607
1650
  for (const [key, value] of Object.entries(associationProperties)) {
1608
1651
  logRecord.setAttribute(`${BRIZZ}.${key}`, value);
@@ -1622,7 +1665,7 @@ var BrizzBatchLogRecordProcessor = class extends import_sdk_logs.BatchLogRecordP
1622
1665
  if (maskingConfig) {
1623
1666
  maskLog(logRecord, maskingConfig);
1624
1667
  }
1625
- const associationProperties = import_api8.context.active().getValue(PROPERTIES_CONTEXT_KEY);
1668
+ const associationProperties = import_api10.context.active().getValue(PROPERTIES_CONTEXT_KEY);
1626
1669
  if (associationProperties) {
1627
1670
  for (const [key, value] of Object.entries(associationProperties)) {
1628
1671
  logRecord.setAttribute(`${BRIZZ}.${key}`, value);
@@ -1651,6 +1694,11 @@ function maskLog(logRecord, config) {
1651
1694
  for (const [key, value] of Object.entries(maskedAttributes)) {
1652
1695
  newAttributes[key] = value;
1653
1696
  }
1697
+ for (const [key, value] of Object.entries(logRecord.attributes)) {
1698
+ if (key.startsWith(INTERNAL_EVENT_PREFIX)) {
1699
+ newAttributes[key] = value;
1700
+ }
1701
+ }
1654
1702
  logRecord.setAttributes(newAttributes);
1655
1703
  }
1656
1704
  }
@@ -2009,10 +2057,10 @@ var BrizzSpanExporter = class {
2009
2057
  };
2010
2058
 
2011
2059
  // src/internal/trace/processors/span-processor.ts
2012
- var import_api9 = require("@opentelemetry/api");
2060
+ var import_api11 = require("@opentelemetry/api");
2013
2061
  var import_sdk_trace_base = require("@opentelemetry/sdk-trace-base");
2014
2062
  function applyContextAttributes(span) {
2015
- const sessionProperties = import_api9.context.active().getValue(PROPERTIES_CONTEXT_KEY);
2063
+ const sessionProperties = import_api11.context.active().getValue(PROPERTIES_CONTEXT_KEY);
2016
2064
  if (sessionProperties) {
2017
2065
  for (const [key, value] of Object.entries(sessionProperties)) {
2018
2066
  span.setAttribute(`${BRIZZ}.${key}`, value);
@@ -2194,9 +2242,6 @@ function getSpanProcessor() {
2194
2242
  return TracingModule.getInstance().getSpanProcessor();
2195
2243
  }
2196
2244
 
2197
- // src/internal/trace/session.ts
2198
- var import_api10 = require("@opentelemetry/api");
2199
-
2200
2245
  // src/internal/sdk.ts
2201
2246
  var _Brizz = class __Brizz {
2202
2247
  static instance = null;
@@ -2280,7 +2325,7 @@ var _Brizz = class __Brizz {
2280
2325
  resourceAttributes["service.version"] = resolvedConfig.appVersion;
2281
2326
  }
2282
2327
  this._sdk = new import_sdk_node.NodeSDK({
2283
- spanProcessors: resolvedConfig.disableSpanExporter ? [] : [getSpanProcessor()],
2328
+ spanProcessors: resolvedConfig.disableSpanExporter ? [] : [new InterruptPropagator(), getSpanProcessor()],
2284
2329
  metricReader: getMetricsReader(),
2285
2330
  resource: (0, import_resources3.resourceFromAttributes)(resourceAttributes),
2286
2331
  instrumentations: manualInstrumentations
package/dist/preload.js CHANGED
@@ -454,6 +454,8 @@ var PROPERTIES = "properties";
454
454
  var SESSION_ID = "session.id";
455
455
  var PROPERTIES_CONTEXT_KEY = createContextKey(PROPERTIES);
456
456
  var SESSION_OBJECT_CONTEXT_KEY = createContextKey("brizz.session.object");
457
+ var INTERRUPT_TOOLS = "brizz.internal.interrupt";
458
+ var INTERNAL_EVENT_PREFIX = "brizz.internal.";
457
459
 
458
460
  // src/internal/instrumentation/mcp/session.ts
459
461
  function stampAndPropagateSession(span, sessionId, baseContext = context.active()) {
@@ -891,7 +893,7 @@ function safeEnd(span) {
891
893
 
892
894
  // src/internal/version.ts
893
895
  function getSDKVersion() {
894
- return "0.1.26";
896
+ return "0.1.28";
895
897
  }
896
898
 
897
899
  // src/internal/instrumentation/mcp/version.ts
@@ -1149,6 +1151,44 @@ var InstrumentationRegistry = class _InstrumentationRegistry {
1149
1151
  }
1150
1152
  };
1151
1153
 
1154
+ // src/internal/instrumentation/vercel-ai/interrupt.ts
1155
+ import { trace as trace3 } from "@opentelemetry/api";
1156
+ var INNER_OPERATION_IDS = /* @__PURE__ */ new Set([
1157
+ "ai.generateText.doGenerate",
1158
+ "ai.streamText.doStream"
1159
+ ]);
1160
+ function isInnerLLMSpan(span) {
1161
+ if (INNER_OPERATION_IDS.has(span.name)) {
1162
+ return true;
1163
+ }
1164
+ const opId = span.attributes["ai.operationId"];
1165
+ return typeof opId === "string" && INNER_OPERATION_IDS.has(opId);
1166
+ }
1167
+ var pendingByParentSpanId = /* @__PURE__ */ new Map();
1168
+ var InterruptPropagator = class {
1169
+ onStart(span, _parentContext) {
1170
+ if (!isInnerLLMSpan(span)) {
1171
+ return;
1172
+ }
1173
+ const parentSpanId = span.parentSpanContext?.spanId;
1174
+ if (!parentSpanId) {
1175
+ return;
1176
+ }
1177
+ const value = pendingByParentSpanId.get(parentSpanId);
1178
+ if (!value) {
1179
+ return;
1180
+ }
1181
+ span.setAttribute(INTERRUPT_TOOLS, value);
1182
+ pendingByParentSpanId.delete(parentSpanId);
1183
+ }
1184
+ onEnd() {
1185
+ }
1186
+ async shutdown() {
1187
+ }
1188
+ async forceFlush() {
1189
+ }
1190
+ };
1191
+
1152
1192
  // src/internal/log/logging.ts
1153
1193
  import { SeverityNumber } from "@opentelemetry/api-logs";
1154
1194
  import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
@@ -1157,8 +1197,11 @@ import {
1157
1197
  LoggerProvider
1158
1198
  } from "@opentelemetry/sdk-logs";
1159
1199
 
1200
+ // src/internal/trace/session.ts
1201
+ import { context as context3, trace as trace4, SpanStatusCode as SpanStatusCode3 } from "@opentelemetry/api";
1202
+
1160
1203
  // src/internal/log/processors/log-processor.ts
1161
- import { context as context3 } from "@opentelemetry/api";
1204
+ import { context as context4 } from "@opentelemetry/api";
1162
1205
  import { BatchLogRecordProcessor, SimpleLogRecordProcessor } from "@opentelemetry/sdk-logs";
1163
1206
 
1164
1207
  // src/internal/masking/patterns.ts
@@ -1587,7 +1630,7 @@ var BrizzSimpleLogRecordProcessor = class extends SimpleLogRecordProcessor {
1587
1630
  if (maskingConfig) {
1588
1631
  maskLog(logRecord, maskingConfig);
1589
1632
  }
1590
- const associationProperties = context3.active().getValue(PROPERTIES_CONTEXT_KEY);
1633
+ const associationProperties = context4.active().getValue(PROPERTIES_CONTEXT_KEY);
1591
1634
  if (associationProperties) {
1592
1635
  for (const [key, value] of Object.entries(associationProperties)) {
1593
1636
  logRecord.setAttribute(`${BRIZZ}.${key}`, value);
@@ -1607,7 +1650,7 @@ var BrizzBatchLogRecordProcessor = class extends BatchLogRecordProcessor {
1607
1650
  if (maskingConfig) {
1608
1651
  maskLog(logRecord, maskingConfig);
1609
1652
  }
1610
- const associationProperties = context3.active().getValue(PROPERTIES_CONTEXT_KEY);
1653
+ const associationProperties = context4.active().getValue(PROPERTIES_CONTEXT_KEY);
1611
1654
  if (associationProperties) {
1612
1655
  for (const [key, value] of Object.entries(associationProperties)) {
1613
1656
  logRecord.setAttribute(`${BRIZZ}.${key}`, value);
@@ -1636,6 +1679,11 @@ function maskLog(logRecord, config) {
1636
1679
  for (const [key, value] of Object.entries(maskedAttributes)) {
1637
1680
  newAttributes[key] = value;
1638
1681
  }
1682
+ for (const [key, value] of Object.entries(logRecord.attributes)) {
1683
+ if (key.startsWith(INTERNAL_EVENT_PREFIX)) {
1684
+ newAttributes[key] = value;
1685
+ }
1686
+ }
1639
1687
  logRecord.setAttributes(newAttributes);
1640
1688
  }
1641
1689
  }
@@ -1994,13 +2042,13 @@ var BrizzSpanExporter = class {
1994
2042
  };
1995
2043
 
1996
2044
  // src/internal/trace/processors/span-processor.ts
1997
- import { context as context4 } from "@opentelemetry/api";
2045
+ import { context as context5 } from "@opentelemetry/api";
1998
2046
  import {
1999
2047
  BatchSpanProcessor,
2000
2048
  SimpleSpanProcessor
2001
2049
  } from "@opentelemetry/sdk-trace-base";
2002
2050
  function applyContextAttributes(span) {
2003
- const sessionProperties = context4.active().getValue(PROPERTIES_CONTEXT_KEY);
2051
+ const sessionProperties = context5.active().getValue(PROPERTIES_CONTEXT_KEY);
2004
2052
  if (sessionProperties) {
2005
2053
  for (const [key, value] of Object.entries(sessionProperties)) {
2006
2054
  span.setAttribute(`${BRIZZ}.${key}`, value);
@@ -2182,9 +2230,6 @@ function getSpanProcessor() {
2182
2230
  return TracingModule.getInstance().getSpanProcessor();
2183
2231
  }
2184
2232
 
2185
- // src/internal/trace/session.ts
2186
- import { context as context5, trace as trace3, SpanStatusCode as SpanStatusCode3 } from "@opentelemetry/api";
2187
-
2188
2233
  // src/internal/sdk.ts
2189
2234
  var _Brizz = class __Brizz {
2190
2235
  static instance = null;
@@ -2268,7 +2313,7 @@ var _Brizz = class __Brizz {
2268
2313
  resourceAttributes["service.version"] = resolvedConfig.appVersion;
2269
2314
  }
2270
2315
  this._sdk = new NodeSDK({
2271
- spanProcessors: resolvedConfig.disableSpanExporter ? [] : [getSpanProcessor()],
2316
+ spanProcessors: resolvedConfig.disableSpanExporter ? [] : [new InterruptPropagator(), getSpanProcessor()],
2272
2317
  metricReader: getMetricsReader(),
2273
2318
  resource: resourceFromAttributes3(resourceAttributes),
2274
2319
  instrumentations: manualInstrumentations
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brizz/sdk",
3
- "version": "0.1.26",
3
+ "version": "0.1.28",
4
4
  "type": "module",
5
5
  "description": "OpenTelemetry-based observability SDK for AI applications",
6
6
  "keywords": [
@@ -85,76 +85,80 @@
85
85
  "registry": "https://registry.npmjs.org/"
86
86
  },
87
87
  "devDependencies": {
88
- "@ai-sdk/anthropic": "^3.0.63",
89
- "@ai-sdk/openai": "^3.0.47",
88
+ "@ai-sdk/anthropic": "^3.0.81",
89
+ "@ai-sdk/openai": "^3.0.68",
90
90
  "@arizeai/openinference-instrumentation-mcp": "^0.2.14",
91
- "@changesets/changelog-github": "^0.6.0",
91
+ "@changesets/changelog-github": "^0.7.0",
92
92
  "@changesets/cli": "^2.30.0",
93
93
  "@eslint/js": "^10.0.1",
94
94
  "@modelcontextprotocol/sdk": "^1.29.0",
95
95
  "@types/jest": "^30.0.0",
96
- "@types/node": "^25.5.0",
97
- "@typescript-eslint/eslint-plugin": "^8.57.1",
98
- "@typescript-eslint/parser": "^8.57.1",
99
- "ai": "^6.0.134",
100
- "eslint": "^10.1.0",
96
+ "@types/node": "^25.9.2",
97
+ "@typescript-eslint/eslint-plugin": "^8.60.1",
98
+ "@typescript-eslint/parser": "^8.60.1",
99
+ "ai": "^6.0.197",
100
+ "eslint": "^10.4.1",
101
101
  "eslint-config-prettier": "^10.1.8",
102
102
  "eslint-plugin-import": "^2.32.0",
103
- "eslint-plugin-promise": "^7.2.1",
104
- "eslint-plugin-unicorn": "^63.0.0",
105
- "jest": "^30.3.0",
106
- "jest-environment-jsdom": "^30.3.0",
107
- "openai": "^6.32.0",
103
+ "eslint-plugin-promise": "^7.3.0",
104
+ "eslint-plugin-unicorn": "^65.0.0",
105
+ "jest": "^30.4.2",
106
+ "jest-environment-jsdom": "^30.4.1",
107
+ "openai": "^6.42.0",
108
108
  "prettier": "^3.8.1",
109
- "ts-jest": "^29.4.6",
109
+ "ts-jest": "^29.4.11",
110
110
  "tsup": "^8.5.1",
111
- "typescript": "^5.9.3",
112
- "vitest": "^4.1.0",
113
- "zod": "^4.3.6"
111
+ "typescript": "^6.0.3",
112
+ "vitest": "^4.1.8",
113
+ "zod": "^4.4.3"
114
114
  },
115
115
  "peerDependencies": {
116
116
  "@langchain/core": "^0.3.0 || ^1.0.0",
117
+ "ai": "*",
117
118
  "typescript": ">=5.0.0"
118
119
  },
119
120
  "peerDependenciesMeta": {
120
121
  "@langchain/core": {
121
122
  "optional": true
122
123
  },
124
+ "ai": {
125
+ "optional": true
126
+ },
123
127
  "typescript": {
124
128
  "optional": true
125
129
  }
126
130
  },
127
131
  "dependencies": {
128
- "@arizeai/openinference-instrumentation-langchain": "^4.0.6",
129
- "@arizeai/openinference-instrumentation-mcp": "^0.2.14",
132
+ "@arizeai/openinference-instrumentation-langchain": "^4.0.12",
133
+ "@arizeai/openinference-instrumentation-mcp": "^0.2.18",
130
134
  "@modelcontextprotocol/sdk": "^1.29.0",
131
135
  "@opentelemetry/api": "^1.9.0",
132
- "@opentelemetry/api-logs": "^0.213.0",
133
- "@opentelemetry/auto-instrumentations-node": "^0.75.0",
136
+ "@opentelemetry/api-logs": "^0.218.0",
137
+ "@opentelemetry/auto-instrumentations-node": "^0.76.0",
134
138
  "@opentelemetry/core": "^2.6.0",
135
- "@opentelemetry/exporter-logs-otlp-http": "^0.213.0",
136
- "@opentelemetry/exporter-metrics-otlp-http": "^0.213.0",
137
- "@opentelemetry/exporter-trace-otlp-http": "^0.213.0",
138
- "@opentelemetry/exporter-trace-otlp-proto": "^0.213.0",
139
- "@opentelemetry/instrumentation": "^0.213.0",
139
+ "@opentelemetry/exporter-logs-otlp-http": "^0.218.0",
140
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.218.0",
141
+ "@opentelemetry/exporter-trace-otlp-http": "^0.218.0",
142
+ "@opentelemetry/exporter-trace-otlp-proto": "^0.218.0",
143
+ "@opentelemetry/instrumentation": "^0.218.0",
140
144
  "@opentelemetry/resources": "^2.6.0",
141
- "@opentelemetry/sdk-logs": "^0.213.0",
145
+ "@opentelemetry/sdk-logs": "^0.218.0",
142
146
  "@opentelemetry/sdk-metrics": "^2.6.0",
143
- "@opentelemetry/sdk-node": "^0.217.0",
147
+ "@opentelemetry/sdk-node": "^0.218.0",
144
148
  "@opentelemetry/sdk-trace-base": "^2.6.0",
145
149
  "@opentelemetry/sdk-trace-node": "^2.6.0",
146
- "@opentelemetry/semantic-conventions": "^1.40.0",
147
- "@traceloop/ai-semantic-conventions": "^0.22.5",
148
- "@traceloop/instrumentation-anthropic": "^0.22.6",
149
- "@traceloop/instrumentation-bedrock": "^0.22.6",
150
- "@traceloop/instrumentation-chromadb": "^0.22.5",
151
- "@traceloop/instrumentation-cohere": "^0.22.6",
152
- "@traceloop/instrumentation-llamaindex": "^0.22.6",
153
- "@traceloop/instrumentation-openai": "^0.26.0",
154
- "@traceloop/instrumentation-pinecone": "^0.22.5",
155
- "@traceloop/instrumentation-qdrant": "^0.22.6",
156
- "@traceloop/instrumentation-together": "^0.22.5",
157
- "@traceloop/instrumentation-vertexai": "^0.22.5",
150
+ "@opentelemetry/semantic-conventions": "^1.41.1",
151
+ "@traceloop/ai-semantic-conventions": "^0.27.0",
152
+ "@traceloop/instrumentation-anthropic": "^0.27.0",
153
+ "@traceloop/instrumentation-bedrock": "^0.27.0",
154
+ "@traceloop/instrumentation-chromadb": "^0.27.0",
155
+ "@traceloop/instrumentation-cohere": "^0.27.0",
156
+ "@traceloop/instrumentation-llamaindex": "^0.27.0",
157
+ "@traceloop/instrumentation-openai": "^0.27.0",
158
+ "@traceloop/instrumentation-pinecone": "^0.27.0",
159
+ "@traceloop/instrumentation-qdrant": "^0.27.0",
160
+ "@traceloop/instrumentation-together": "^0.27.0",
161
+ "@traceloop/instrumentation-vertexai": "^0.27.0",
158
162
  "import-in-the-middle": "^3.0.0",
159
163
  "pino": "^10.3.1",
160
164
  "pino-pretty": "^13.1.3",