@brizz/sdk 0.1.29 → 0.1.30

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.
@@ -0,0 +1,54 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined") return require.apply(this, arguments);
5
+ throw Error('Dynamic require of "' + x + '" is not supported');
6
+ });
7
+
8
+ // src/internal/semantic-conventions.ts
9
+ var _api = require('@opentelemetry/api');
10
+ var BRIZZ = "brizz";
11
+ var PROPERTIES = "properties";
12
+ var SESSION_ID = "session.id";
13
+ var PROPERTIES_CONTEXT_KEY = _api.createContextKey.call(void 0, PROPERTIES);
14
+ var SESSION_OBJECT_CONTEXT_KEY = _api.createContextKey.call(void 0, "brizz.session.object");
15
+ var SESSION_INPUT = "brizz.session.input";
16
+ var SESSION_OUTPUT = "brizz.session.output";
17
+ var SESSION_INPUT_CONTEXT = "brizz.session.input.context";
18
+ var SESSION_OUTPUT_CONTEXT = "brizz.session.output.context";
19
+ var SESSION_SPAN_NAME = "brizz.start_session";
20
+ var MUTE_INPUT = "mute.input";
21
+ var MUTE_OUTPUT = "mute.output";
22
+ var SESSION_TITLE_SPAN_NAME = "brizz.session_title";
23
+ var SESSION_TITLE_GENERATION = "session.title_generation";
24
+ var SESSION_TITLE = "brizz.session.title";
25
+ var INTERRUPT_TOOLS = "brizz.internal.interrupt";
26
+ var INTERNAL_EVENT_PREFIX = "brizz.internal.";
27
+ var EXTERNAL_LINK_EVENT_NAME = "brizz.internal.external_link";
28
+ var EXTERNAL_LINK_URL = "brizz.internal.external_link.url";
29
+ var EXTERNAL_LINK_TITLE = "brizz.internal.external_link.title";
30
+ var EXTERNAL_LINK_TYPE = "brizz.internal.external_link.type";
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+ exports.__require = __require; exports.BRIZZ = BRIZZ; exports.SESSION_ID = SESSION_ID; exports.PROPERTIES_CONTEXT_KEY = PROPERTIES_CONTEXT_KEY; exports.SESSION_OBJECT_CONTEXT_KEY = SESSION_OBJECT_CONTEXT_KEY; exports.SESSION_INPUT = SESSION_INPUT; exports.SESSION_OUTPUT = SESSION_OUTPUT; exports.SESSION_INPUT_CONTEXT = SESSION_INPUT_CONTEXT; exports.SESSION_OUTPUT_CONTEXT = SESSION_OUTPUT_CONTEXT; exports.SESSION_SPAN_NAME = SESSION_SPAN_NAME; exports.MUTE_INPUT = MUTE_INPUT; exports.MUTE_OUTPUT = MUTE_OUTPUT; exports.SESSION_TITLE_SPAN_NAME = SESSION_TITLE_SPAN_NAME; exports.SESSION_TITLE_GENERATION = SESSION_TITLE_GENERATION; exports.SESSION_TITLE = SESSION_TITLE; exports.INTERRUPT_TOOLS = INTERRUPT_TOOLS; exports.INTERNAL_EVENT_PREFIX = INTERNAL_EVENT_PREFIX; exports.EXTERNAL_LINK_EVENT_NAME = EXTERNAL_LINK_EVENT_NAME; exports.EXTERNAL_LINK_URL = EXTERNAL_LINK_URL; exports.EXTERNAL_LINK_TITLE = EXTERNAL_LINK_TITLE; exports.EXTERNAL_LINK_TYPE = EXTERNAL_LINK_TYPE;
@@ -0,0 +1,158 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var _class;// src/internal/logger.ts
2
+ var _api = require('@opentelemetry/api');
3
+ var _pino = require('pino'); var _pino2 = _interopRequireDefault(_pino);
4
+ var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
5
+ LogLevel2[LogLevel2["NONE"] = 0] = "NONE";
6
+ LogLevel2[LogLevel2["ERROR"] = 1] = "ERROR";
7
+ LogLevel2[LogLevel2["WARN"] = 2] = "WARN";
8
+ LogLevel2[LogLevel2["INFO"] = 3] = "INFO";
9
+ LogLevel2[LogLevel2["DEBUG"] = 4] = "DEBUG";
10
+ return LogLevel2;
11
+ })(LogLevel || {});
12
+ var DEFAULT_LOG_LEVEL = 2 /* WARN */;
13
+ var PinoLogger = (_class = class {
14
+ __init() {this._level = DEFAULT_LOG_LEVEL}
15
+ __init2() {this._pinoLogger = null}
16
+ __init3() {this.debug = (msg, ...meta) => {
17
+ if (this._level >= 4 /* DEBUG */) {
18
+ this.ensurePinoLogger().debug(this.formatMeta(meta), msg);
19
+ }
20
+ }}
21
+ __init4() {this.info = (msg, ...meta) => {
22
+ if (this._level >= 3 /* INFO */) {
23
+ this.ensurePinoLogger().info(this.formatMeta(meta), msg);
24
+ }
25
+ }}
26
+ __init5() {this.warn = (msg, ...meta) => {
27
+ if (this._level >= 2 /* WARN */) {
28
+ this.ensurePinoLogger().warn(this.formatMeta(meta), msg);
29
+ }
30
+ }}
31
+ __init6() {this.error = (msg, ...meta) => {
32
+ if (this._level >= 1 /* ERROR */) {
33
+ this.ensurePinoLogger().error(this.formatMeta(meta), msg);
34
+ }
35
+ }}
36
+ constructor() {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);_class.prototype.__init4.call(this);_class.prototype.__init5.call(this);_class.prototype.__init6.call(this);
37
+ const envLevel = this.getLogLevelFromEnv();
38
+ this._level = envLevel;
39
+ }
40
+ /**
41
+ * Lazy initialization of Pino logger to ensure it's created AFTER Jest spies
42
+ * are set up during tests. This prevents the pino-pretty transport from
43
+ * bypassing stdout/stderr spies.
44
+ */
45
+ ensurePinoLogger() {
46
+ if (!this._pinoLogger) {
47
+ this._pinoLogger = _pino2.default.call(void 0, {
48
+ name: "Brizz",
49
+ level: this.logLevelToPino(this._level),
50
+ // Disable transport in test environment to allow proper spy capture
51
+ transport: this.isProduction() || this.isTest() ? void 0 : {
52
+ target: "pino-pretty",
53
+ options: {
54
+ singleLine: true,
55
+ colorize: true,
56
+ translateTime: "HH:MM:ss",
57
+ ignore: "pid,hostname",
58
+ messageFormat: "[{name}] {msg}"
59
+ }
60
+ }
61
+ });
62
+ }
63
+ return this._pinoLogger;
64
+ }
65
+ isProduction() {
66
+ return process.env["NODE_ENV"] === "production";
67
+ }
68
+ isTest() {
69
+ return process.env["NODE_ENV"] === "test";
70
+ }
71
+ getLogLevelFromEnv() {
72
+ const envLevel = process.env["BRIZZ_LOG_LEVEL"];
73
+ return envLevel ? parseLogLevel(envLevel) : DEFAULT_LOG_LEVEL;
74
+ }
75
+ logLevelToPino(level) {
76
+ switch (level) {
77
+ case 4 /* DEBUG */:
78
+ return "debug";
79
+ case 3 /* INFO */:
80
+ return "info";
81
+ case 2 /* WARN */:
82
+ return "warn";
83
+ case 1 /* ERROR */:
84
+ return "error";
85
+ default:
86
+ return "silent";
87
+ }
88
+ }
89
+ formatMeta(meta) {
90
+ if (meta.length === 0) {
91
+ return {};
92
+ }
93
+ if (meta.length === 1 && typeof meta[0] === "object" && meta[0] !== null) {
94
+ return meta[0];
95
+ }
96
+ return { metadata: meta };
97
+ }
98
+ setLevel(level) {
99
+ this._level = level;
100
+ if (this._pinoLogger) {
101
+ this._pinoLogger.level = this.logLevelToPino(level);
102
+ }
103
+ }
104
+ getLevel() {
105
+ return this._level;
106
+ }
107
+ }, _class);
108
+ function parseLogLevel(level) {
109
+ if (!level) {
110
+ return DEFAULT_LOG_LEVEL;
111
+ }
112
+ const normalizedLevel = level.toLowerCase().trim();
113
+ switch (normalizedLevel) {
114
+ case "debug":
115
+ return 4 /* DEBUG */;
116
+ case "info":
117
+ return 3 /* INFO */;
118
+ case "warn":
119
+ case "warning":
120
+ return 2 /* WARN */;
121
+ case "error":
122
+ return 1 /* ERROR */;
123
+ case "none":
124
+ case "off":
125
+ case "silent":
126
+ return 0 /* NONE */;
127
+ default: {
128
+ const numLevel = Math.trunc(Number(normalizedLevel));
129
+ if (!Number.isNaN(numLevel) && numLevel >= 0 && numLevel <= 4) {
130
+ return numLevel;
131
+ }
132
+ return DEFAULT_LOG_LEVEL;
133
+ }
134
+ }
135
+ }
136
+ var logger = new PinoLogger();
137
+ function setLogLevel(level) {
138
+ const resolvedLevel = typeof level === "string" ? parseLogLevel(level) : level;
139
+ logger.setLevel(resolvedLevel);
140
+ }
141
+ function getLogLevel() {
142
+ return logger.getLevel();
143
+ }
144
+
145
+ // src/internal/version.ts
146
+ function getSDKVersion() {
147
+ return "0.1.30";
148
+ }
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+ exports.LogLevel = LogLevel; exports.DEFAULT_LOG_LEVEL = DEFAULT_LOG_LEVEL; exports.parseLogLevel = parseLogLevel; exports.logger = logger; exports.setLogLevel = setLogLevel; exports.getLogLevel = getLogLevel; exports.getSDKVersion = getSDKVersion;
@@ -0,0 +1,90 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkGCORRK6Bcjs = require('./chunk-GCORRK6B.cjs');
4
+
5
+ // src/internal/instrumentation/vercel-ai/interrupt.ts
6
+ var _api = require('@opentelemetry/api');
7
+ var INNER_OPERATION_IDS = /* @__PURE__ */ new Set([
8
+ "ai.generateText.doGenerate",
9
+ "ai.streamText.doStream"
10
+ ]);
11
+ function isInnerLLMSpan(span) {
12
+ if (INNER_OPERATION_IDS.has(span.name)) {
13
+ return true;
14
+ }
15
+ const opId = span.attributes["ai.operationId"];
16
+ return typeof opId === "string" && INNER_OPERATION_IDS.has(opId);
17
+ }
18
+ var MAX_PENDING_ENTRIES = 1024;
19
+ var pendingByParentSpanId = /* @__PURE__ */ new Map();
20
+ function setPending(parentSpanId, value) {
21
+ pendingByParentSpanId.set(parentSpanId, value);
22
+ while (pendingByParentSpanId.size > MAX_PENDING_ENTRIES) {
23
+ const oldest = pendingByParentSpanId.keys().next().value;
24
+ if (oldest === void 0) {
25
+ break;
26
+ }
27
+ pendingByParentSpanId.delete(oldest);
28
+ }
29
+ }
30
+ function extractInterruptTools(tools) {
31
+ if (!tools || typeof tools !== "object") {
32
+ return [];
33
+ }
34
+ return Object.entries(tools).filter(
35
+ ([, t]) => !!t && typeof t === "object" && t.needsApproval
36
+ ).map(([name]) => name);
37
+ }
38
+ function createInterruptIntegration() {
39
+ const onStepStart = (event) => {
40
+ const names = extractInterruptTools(event.tools);
41
+ if (names.length === 0) {
42
+ return;
43
+ }
44
+ const value = JSON.stringify(names);
45
+ const span = _api.trace.getActiveSpan();
46
+ if (!span) {
47
+ return;
48
+ }
49
+ span.setAttribute(_chunkGCORRK6Bcjs.INTERRUPT_TOOLS, value);
50
+ setPending(span.spanContext().spanId, value);
51
+ };
52
+ return {
53
+ onStepStart
54
+ };
55
+ }
56
+ var InterruptPropagator = class {
57
+ onStart(span, _parentContext) {
58
+ if (!isInnerLLMSpan(span)) {
59
+ return;
60
+ }
61
+ const parentSpanId = _optionalChain([span, 'access', _ => _.parentSpanContext, 'optionalAccess', _2 => _2.spanId]);
62
+ if (!parentSpanId) {
63
+ return;
64
+ }
65
+ const value = pendingByParentSpanId.get(parentSpanId);
66
+ if (!value) {
67
+ return;
68
+ }
69
+ span.setAttribute(_chunkGCORRK6Bcjs.INTERRUPT_TOOLS, value);
70
+ pendingByParentSpanId.delete(parentSpanId);
71
+ }
72
+ onEnd() {
73
+ }
74
+ async shutdown() {
75
+ }
76
+ async forceFlush() {
77
+ }
78
+ };
79
+ function _resetInterruptState() {
80
+ if (process.env["NODE_ENV"] !== "test") {
81
+ return;
82
+ }
83
+ pendingByParentSpanId.clear();
84
+ }
85
+
86
+
87
+
88
+
89
+
90
+ exports.createInterruptIntegration = createInterruptIntegration; exports.InterruptPropagator = InterruptPropagator; exports._resetInterruptState = _resetInterruptState;
@@ -0,0 +1,90 @@
1
+ import {
2
+ INTERRUPT_TOOLS
3
+ } from "./chunk-RORIBZEV.js";
4
+
5
+ // src/internal/instrumentation/vercel-ai/interrupt.ts
6
+ import { trace } from "@opentelemetry/api";
7
+ var INNER_OPERATION_IDS = /* @__PURE__ */ new Set([
8
+ "ai.generateText.doGenerate",
9
+ "ai.streamText.doStream"
10
+ ]);
11
+ function isInnerLLMSpan(span) {
12
+ if (INNER_OPERATION_IDS.has(span.name)) {
13
+ return true;
14
+ }
15
+ const opId = span.attributes["ai.operationId"];
16
+ return typeof opId === "string" && INNER_OPERATION_IDS.has(opId);
17
+ }
18
+ var MAX_PENDING_ENTRIES = 1024;
19
+ var pendingByParentSpanId = /* @__PURE__ */ new Map();
20
+ function setPending(parentSpanId, value) {
21
+ pendingByParentSpanId.set(parentSpanId, value);
22
+ while (pendingByParentSpanId.size > MAX_PENDING_ENTRIES) {
23
+ const oldest = pendingByParentSpanId.keys().next().value;
24
+ if (oldest === void 0) {
25
+ break;
26
+ }
27
+ pendingByParentSpanId.delete(oldest);
28
+ }
29
+ }
30
+ function extractInterruptTools(tools) {
31
+ if (!tools || typeof tools !== "object") {
32
+ return [];
33
+ }
34
+ return Object.entries(tools).filter(
35
+ ([, t]) => !!t && typeof t === "object" && t.needsApproval
36
+ ).map(([name]) => name);
37
+ }
38
+ function createInterruptIntegration() {
39
+ const onStepStart = (event) => {
40
+ const names = extractInterruptTools(event.tools);
41
+ if (names.length === 0) {
42
+ return;
43
+ }
44
+ const value = JSON.stringify(names);
45
+ const span = trace.getActiveSpan();
46
+ if (!span) {
47
+ return;
48
+ }
49
+ span.setAttribute(INTERRUPT_TOOLS, value);
50
+ setPending(span.spanContext().spanId, value);
51
+ };
52
+ return {
53
+ onStepStart
54
+ };
55
+ }
56
+ var InterruptPropagator = class {
57
+ onStart(span, _parentContext) {
58
+ if (!isInnerLLMSpan(span)) {
59
+ return;
60
+ }
61
+ const parentSpanId = span.parentSpanContext?.spanId;
62
+ if (!parentSpanId) {
63
+ return;
64
+ }
65
+ const value = pendingByParentSpanId.get(parentSpanId);
66
+ if (!value) {
67
+ return;
68
+ }
69
+ span.setAttribute(INTERRUPT_TOOLS, value);
70
+ pendingByParentSpanId.delete(parentSpanId);
71
+ }
72
+ onEnd() {
73
+ }
74
+ async shutdown() {
75
+ }
76
+ async forceFlush() {
77
+ }
78
+ };
79
+ function _resetInterruptState() {
80
+ if (process.env["NODE_ENV"] !== "test") {
81
+ return;
82
+ }
83
+ pendingByParentSpanId.clear();
84
+ }
85
+
86
+ export {
87
+ createInterruptIntegration,
88
+ InterruptPropagator,
89
+ _resetInterruptState
90
+ };