@friskai/frisk-js 0.2.10 → 0.3.1
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/README.md +1 -1
- package/dist/adapters/langchain/frisk-callback-handler.d.ts +80 -3
- package/dist/adapters/langchain/frisk-callback-handler.d.ts.map +1 -1
- package/dist/adapters/langchain/frisk-tool-middleware.d.ts.map +1 -1
- package/dist/adapters/langchain/index.js +758 -388
- package/dist/adapters/langchain/index.js.map +1 -454
- package/dist/adapters/langchain/langchain-framework-adapter/langchain-framework-adapter.d.ts +3 -3
- package/dist/adapters/langchain/langchain-framework-adapter/langchain-framework-adapter.d.ts.map +1 -1
- package/dist/core/extensions.d.ts +30 -0
- package/dist/core/extensions.d.ts.map +1 -0
- package/dist/core/frisk-session.d.ts +48 -12
- package/dist/core/frisk-session.d.ts.map +1 -1
- package/dist/core/frisk.d.ts +14 -24
- package/dist/core/frisk.d.ts.map +1 -1
- package/dist/core/llm-reasoning/extractLlmReasoning.d.ts +8 -0
- package/dist/core/llm-reasoning/extractLlmReasoning.d.ts.map +1 -0
- package/dist/core/spans/frisk-span.d.ts +38 -0
- package/dist/core/spans/frisk-span.d.ts.map +1 -0
- package/dist/core/spans/index.d.ts +7 -0
- package/dist/core/spans/index.d.ts.map +1 -0
- package/dist/core/spans/llm-call-span.d.ts +23 -0
- package/dist/core/spans/llm-call-span.d.ts.map +1 -0
- package/dist/core/spans/operation-span.d.ts +13 -0
- package/dist/core/spans/operation-span.d.ts.map +1 -0
- package/dist/core/spans/session-span.d.ts +20 -0
- package/dist/core/spans/session-span.d.ts.map +1 -0
- package/dist/core/spans/tool-call-decision-span.d.ts +27 -0
- package/dist/core/spans/tool-call-decision-span.d.ts.map +1 -0
- package/dist/core/spans/tool-call-observation-span.d.ts +28 -0
- package/dist/core/spans/tool-call-observation-span.d.ts.map +1 -0
- package/dist/core/types.d.ts +5 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/errors/index.d.ts +6 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/framework-adapter/base-framework-adapter.d.ts +3 -3
- package/dist/framework-adapter/base-framework-adapter.d.ts.map +1 -1
- package/dist/framework-adapter/framework-adapter.d.ts +3 -3
- package/dist/framework-adapter/framework-adapter.d.ts.map +1 -1
- package/dist/framework-adapter/index.d.ts +2 -2
- package/dist/framework-adapter/index.d.ts.map +1 -1
- package/dist/generated/sdk-meta.d.ts +1 -1
- package/dist/generated/sdk-meta.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +526 -333
- package/dist/index.js.map +1 -440
- package/dist/telemetry/constants.d.ts +24 -0
- package/dist/telemetry/constants.d.ts.map +1 -1
- package/dist/utils/redact.d.ts +5 -5
- package/dist/utils/redact.d.ts.map +1 -1
- package/package.json +4 -27
- package/dist/adapters/claude/claude-framework-adapter/claude-framework-adapter.d.ts +0 -99
- package/dist/adapters/claude/claude-framework-adapter/claude-framework-adapter.d.ts.map +0 -1
- package/dist/adapters/claude/claude-framework-adapter/get-claude-agent-sdk-version.d.ts +0 -2
- package/dist/adapters/claude/claude-framework-adapter/get-claude-agent-sdk-version.d.ts.map +0 -1
- package/dist/adapters/claude/claude-framework-adapter/wrap-tool-with-llm-reasoning.d.ts +0 -4
- package/dist/adapters/claude/claude-framework-adapter/wrap-tool-with-llm-reasoning.d.ts.map +0 -1
- package/dist/adapters/claude/frisk-claude-session.d.ts +0 -29
- package/dist/adapters/claude/frisk-claude-session.d.ts.map +0 -1
- package/dist/adapters/claude/frisk-claude.d.ts +0 -71
- package/dist/adapters/claude/frisk-claude.d.ts.map +0 -1
- package/dist/adapters/claude/index.d.ts +0 -3
- package/dist/adapters/claude/index.d.ts.map +0 -1
- package/dist/adapters/claude/index.js +0 -65732
- package/dist/adapters/claude/index.js.map +0 -449
- package/dist/adapters/claude/resolve-claude-tool-name.d.ts +0 -2
- package/dist/adapters/claude/resolve-claude-tool-name.d.ts.map +0 -1
- package/dist/core/tool-call-span.d.ts +0 -102
- package/dist/core/tool-call-span.d.ts.map +0 -1
- package/dist/native-bindings/index.d.ts +0 -23
- package/dist/native-bindings/index.d.ts.map +0 -1
- package/native/README.md +0 -55
- package/native/frisk-js.darwin-arm64.node +0 -0
- package/native/frisk-js.darwin-x64.node +0 -0
- package/native/frisk-js.linux-arm64-gnu.node +0 -0
- package/native/frisk-js.linux-arm64-musl.node +0 -0
- package/native/frisk-js.linux-x64-gnu.node +0 -0
- package/native/frisk-js.linux-x64-musl.node +0 -0
- package/native/frisk-js.win32-arm64-msvc.node +0 -0
- package/native/frisk-js.win32-x64-msvc.node +0 -0
- package/native/index.cjs +0 -580
- package/native/index.d.ts +0 -73
|
@@ -2542,7 +2542,7 @@ var require_call_credentials = __commonJS((exports) => {
|
|
|
2542
2542
|
if (isCurrentOauth2Client(googleCredentials)) {
|
|
2543
2543
|
getHeaders = googleCredentials.getRequestHeaders(options.service_url);
|
|
2544
2544
|
} else {
|
|
2545
|
-
getHeaders = new Promise((
|
|
2545
|
+
getHeaders = new Promise((resolve, reject) => {
|
|
2546
2546
|
googleCredentials.getRequestMetadata(options.service_url, (err, headers) => {
|
|
2547
2547
|
if (err) {
|
|
2548
2548
|
reject(err);
|
|
@@ -2552,7 +2552,7 @@ var require_call_credentials = __commonJS((exports) => {
|
|
|
2552
2552
|
reject(new Error("Headers not set by metadata plugin"));
|
|
2553
2553
|
return;
|
|
2554
2554
|
}
|
|
2555
|
-
|
|
2555
|
+
resolve(headers);
|
|
2556
2556
|
});
|
|
2557
2557
|
});
|
|
2558
2558
|
}
|
|
@@ -2607,10 +2607,10 @@ var require_call_credentials = __commonJS((exports) => {
|
|
|
2607
2607
|
this.metadataGenerator = metadataGenerator;
|
|
2608
2608
|
}
|
|
2609
2609
|
generateMetadata(options) {
|
|
2610
|
-
return new Promise((
|
|
2610
|
+
return new Promise((resolve, reject) => {
|
|
2611
2611
|
this.metadataGenerator(options, (err, metadata) => {
|
|
2612
2612
|
if (metadata !== undefined) {
|
|
2613
|
-
|
|
2613
|
+
resolve(metadata);
|
|
2614
2614
|
} else {
|
|
2615
2615
|
reject(err);
|
|
2616
2616
|
}
|
|
@@ -2932,14 +2932,14 @@ var require_channel_credentials = __commonJS((exports) => {
|
|
|
2932
2932
|
}
|
|
2933
2933
|
connect(socket) {
|
|
2934
2934
|
const tlsConnectOptions = Object.assign({ socket }, this.connectionOptions);
|
|
2935
|
-
return new Promise((
|
|
2935
|
+
return new Promise((resolve, reject) => {
|
|
2936
2936
|
const tlsSocket = (0, tls_1.connect)(tlsConnectOptions, () => {
|
|
2937
2937
|
var _a2;
|
|
2938
2938
|
if (((_a2 = this.connectionOptions.rejectUnauthorized) !== null && _a2 !== undefined ? _a2 : true) && !tlsSocket.authorized) {
|
|
2939
2939
|
reject(tlsSocket.authorizationError);
|
|
2940
2940
|
return;
|
|
2941
2941
|
}
|
|
2942
|
-
|
|
2942
|
+
resolve({
|
|
2943
2943
|
socket: tlsSocket,
|
|
2944
2944
|
secure: true
|
|
2945
2945
|
});
|
|
@@ -3059,8 +3059,8 @@ var require_channel_credentials = __commonJS((exports) => {
|
|
|
3059
3059
|
if (this.hasReceivedUpdates()) {
|
|
3060
3060
|
return Promise.resolve(this.getLatestSecureContext());
|
|
3061
3061
|
} else {
|
|
3062
|
-
return new Promise((
|
|
3063
|
-
this.secureContextWatchers.push(
|
|
3062
|
+
return new Promise((resolve) => {
|
|
3063
|
+
this.secureContextWatchers.push(resolve);
|
|
3064
3064
|
});
|
|
3065
3065
|
}
|
|
3066
3066
|
}
|
|
@@ -3093,7 +3093,7 @@ var require_channel_credentials = __commonJS((exports) => {
|
|
|
3093
3093
|
this.callCredentials = callCredentials;
|
|
3094
3094
|
}
|
|
3095
3095
|
connect(socket) {
|
|
3096
|
-
return new Promise((
|
|
3096
|
+
return new Promise((resolve, reject) => {
|
|
3097
3097
|
const secureContext = this.parent.getLatestSecureContext();
|
|
3098
3098
|
if (!secureContext) {
|
|
3099
3099
|
reject(new Error("Failed to load credentials"));
|
|
@@ -3118,7 +3118,7 @@ var require_channel_credentials = __commonJS((exports) => {
|
|
|
3118
3118
|
reject(tlsSocket.authorizationError);
|
|
3119
3119
|
return;
|
|
3120
3120
|
}
|
|
3121
|
-
|
|
3121
|
+
resolve({
|
|
3122
3122
|
socket: tlsSocket,
|
|
3123
3123
|
secure: true
|
|
3124
3124
|
});
|
|
@@ -6646,7 +6646,7 @@ var require_aspromise = __commonJS((exports, module) => {
|
|
|
6646
6646
|
var params = new Array(arguments.length - 1), offset = 0, index = 2, pending = true;
|
|
6647
6647
|
while (index < arguments.length)
|
|
6648
6648
|
params[offset++] = arguments[index++];
|
|
6649
|
-
return new Promise(function executor(
|
|
6649
|
+
return new Promise(function executor(resolve, reject) {
|
|
6650
6650
|
params[offset] = function callback(err) {
|
|
6651
6651
|
if (pending) {
|
|
6652
6652
|
pending = false;
|
|
@@ -6656,7 +6656,7 @@ var require_aspromise = __commonJS((exports, module) => {
|
|
|
6656
6656
|
var params2 = new Array(arguments.length - 1), offset2 = 0;
|
|
6657
6657
|
while (offset2 < params2.length)
|
|
6658
6658
|
params2[offset2++] = arguments[offset2];
|
|
6659
|
-
|
|
6659
|
+
resolve.apply(null, params2);
|
|
6660
6660
|
}
|
|
6661
6661
|
}
|
|
6662
6662
|
};
|
|
@@ -8044,7 +8044,7 @@ var require_path = __commonJS((exports) => {
|
|
|
8044
8044
|
}
|
|
8045
8045
|
return prefix + parts.join("/");
|
|
8046
8046
|
};
|
|
8047
|
-
path.resolve = function
|
|
8047
|
+
path.resolve = function resolve(originPath, includePath, alreadyNormalized) {
|
|
8048
8048
|
if (!alreadyNormalized)
|
|
8049
8049
|
includePath = normalize(includePath);
|
|
8050
8050
|
if (isAbsolute(includePath))
|
|
@@ -8357,7 +8357,7 @@ var require_mapfield = __commonJS((exports, module) => {
|
|
|
8357
8357
|
keepComments ? this.comment : undefined
|
|
8358
8358
|
]);
|
|
8359
8359
|
};
|
|
8360
|
-
MapField.prototype.resolve = function
|
|
8360
|
+
MapField.prototype.resolve = function resolve() {
|
|
8361
8361
|
if (this.resolved)
|
|
8362
8362
|
return this;
|
|
8363
8363
|
if (types.mapKey[this.keyType] === undefined)
|
|
@@ -8430,7 +8430,7 @@ var require_method = __commonJS((exports, module) => {
|
|
|
8430
8430
|
this.parsedOptions
|
|
8431
8431
|
]);
|
|
8432
8432
|
};
|
|
8433
|
-
Method.prototype.resolve = function
|
|
8433
|
+
Method.prototype.resolve = function resolve() {
|
|
8434
8434
|
if (this.resolved)
|
|
8435
8435
|
return this;
|
|
8436
8436
|
this.resolvedRequestType = this.parent.lookupType(this.requestType);
|
|
@@ -9830,7 +9830,7 @@ var require_field = __commonJS((exports, module) => {
|
|
|
9830
9830
|
keepComments ? this.comment : undefined
|
|
9831
9831
|
]);
|
|
9832
9832
|
};
|
|
9833
|
-
Field.prototype.resolve = function
|
|
9833
|
+
Field.prototype.resolve = function resolve() {
|
|
9834
9834
|
if (this.resolved)
|
|
9835
9835
|
return this;
|
|
9836
9836
|
if ((this.typeDefault = types.defaults[this.type]) === undefined) {
|
|
@@ -10084,7 +10084,7 @@ var require_object = __commonJS((exports, module) => {
|
|
|
10084
10084
|
this.parent = null;
|
|
10085
10085
|
this.resolved = false;
|
|
10086
10086
|
};
|
|
10087
|
-
ReflectionObject.prototype.resolve = function
|
|
10087
|
+
ReflectionObject.prototype.resolve = function resolve() {
|
|
10088
10088
|
if (this.resolved)
|
|
10089
10089
|
return this;
|
|
10090
10090
|
if (this.root instanceof Root)
|
|
@@ -15635,18 +15635,18 @@ var require_compression_filter = __commonJS((exports) => {
|
|
|
15635
15635
|
this.maxRecvMessageLength = maxRecvMessageLength;
|
|
15636
15636
|
}
|
|
15637
15637
|
compressMessage(message) {
|
|
15638
|
-
return new Promise((
|
|
15638
|
+
return new Promise((resolve, reject) => {
|
|
15639
15639
|
zlib.deflate(message, (err, output) => {
|
|
15640
15640
|
if (err) {
|
|
15641
15641
|
reject(err);
|
|
15642
15642
|
} else {
|
|
15643
|
-
|
|
15643
|
+
resolve(output);
|
|
15644
15644
|
}
|
|
15645
15645
|
});
|
|
15646
15646
|
});
|
|
15647
15647
|
}
|
|
15648
15648
|
decompressMessage(message) {
|
|
15649
|
-
return new Promise((
|
|
15649
|
+
return new Promise((resolve, reject) => {
|
|
15650
15650
|
let totalLength = 0;
|
|
15651
15651
|
const messageParts = [];
|
|
15652
15652
|
const decompresser = zlib.createInflate();
|
|
@@ -15662,7 +15662,7 @@ var require_compression_filter = __commonJS((exports) => {
|
|
|
15662
15662
|
}
|
|
15663
15663
|
});
|
|
15664
15664
|
decompresser.on("end", () => {
|
|
15665
|
-
|
|
15665
|
+
resolve(Buffer.concat(messageParts));
|
|
15666
15666
|
});
|
|
15667
15667
|
decompresser.write(message);
|
|
15668
15668
|
decompresser.end();
|
|
@@ -15676,18 +15676,18 @@ var require_compression_filter = __commonJS((exports) => {
|
|
|
15676
15676
|
this.maxRecvMessageLength = maxRecvMessageLength;
|
|
15677
15677
|
}
|
|
15678
15678
|
compressMessage(message) {
|
|
15679
|
-
return new Promise((
|
|
15679
|
+
return new Promise((resolve, reject) => {
|
|
15680
15680
|
zlib.gzip(message, (err, output) => {
|
|
15681
15681
|
if (err) {
|
|
15682
15682
|
reject(err);
|
|
15683
15683
|
} else {
|
|
15684
|
-
|
|
15684
|
+
resolve(output);
|
|
15685
15685
|
}
|
|
15686
15686
|
});
|
|
15687
15687
|
});
|
|
15688
15688
|
}
|
|
15689
15689
|
decompressMessage(message) {
|
|
15690
|
-
return new Promise((
|
|
15690
|
+
return new Promise((resolve, reject) => {
|
|
15691
15691
|
let totalLength = 0;
|
|
15692
15692
|
const messageParts = [];
|
|
15693
15693
|
const decompresser = zlib.createGunzip();
|
|
@@ -15703,7 +15703,7 @@ var require_compression_filter = __commonJS((exports) => {
|
|
|
15703
15703
|
}
|
|
15704
15704
|
});
|
|
15705
15705
|
decompresser.on("end", () => {
|
|
15706
|
-
|
|
15706
|
+
resolve(Buffer.concat(messageParts));
|
|
15707
15707
|
});
|
|
15708
15708
|
decompresser.write(message);
|
|
15709
15709
|
decompresser.end();
|
|
@@ -16957,7 +16957,7 @@ var require_http_proxy = __commonJS((exports) => {
|
|
|
16957
16957
|
options.headers = headers;
|
|
16958
16958
|
const proxyAddressString = (0, subchannel_address_1.subchannelAddressToString)(address);
|
|
16959
16959
|
trace3("Using proxy " + proxyAddressString + " to connect to " + options.path);
|
|
16960
|
-
return new Promise((
|
|
16960
|
+
return new Promise((resolve, reject) => {
|
|
16961
16961
|
const request = http.request(options);
|
|
16962
16962
|
request.once("connect", (res, socket, head) => {
|
|
16963
16963
|
request.removeAllListeners();
|
|
@@ -16968,7 +16968,7 @@ var require_http_proxy = __commonJS((exports) => {
|
|
|
16968
16968
|
socket.unshift(head);
|
|
16969
16969
|
}
|
|
16970
16970
|
trace3("Successfully established a plaintext connection to " + options.path + " through proxy " + proxyAddressString);
|
|
16971
|
-
|
|
16971
|
+
resolve(socket);
|
|
16972
16972
|
} else {
|
|
16973
16973
|
(0, logging_1.log)(constants_1.LogVerbosity.ERROR, "Failed to connect to " + options.path + " through proxy " + proxyAddressString + " with status " + res.statusCode);
|
|
16974
16974
|
reject();
|
|
@@ -17840,7 +17840,7 @@ var require_transport = __commonJS((exports) => {
|
|
|
17840
17840
|
if (secureConnectResult.socket.closed) {
|
|
17841
17841
|
return Promise.reject("Connection closed before starting HTTP/2 handshake");
|
|
17842
17842
|
}
|
|
17843
|
-
return new Promise((
|
|
17843
|
+
return new Promise((resolve, reject) => {
|
|
17844
17844
|
var _a2, _b, _c, _d, _e, _f, _g, _h;
|
|
17845
17845
|
let remoteName = null;
|
|
17846
17846
|
let realTarget = this.channelTarget;
|
|
@@ -17905,7 +17905,7 @@ var require_transport = __commonJS((exports) => {
|
|
|
17905
17905
|
session.removeAllListeners();
|
|
17906
17906
|
secureConnectResult.socket.removeListener("close", closeHandler);
|
|
17907
17907
|
secureConnectResult.socket.removeListener("error", errorHandler);
|
|
17908
|
-
|
|
17908
|
+
resolve(new Http2Transport(session, address, options, remoteName));
|
|
17909
17909
|
this.session = null;
|
|
17910
17910
|
});
|
|
17911
17911
|
session.once("close", closeHandler);
|
|
@@ -17919,7 +17919,7 @@ var require_transport = __commonJS((exports) => {
|
|
|
17919
17919
|
if (proxiedSocket) {
|
|
17920
17920
|
return proxiedSocket;
|
|
17921
17921
|
} else {
|
|
17922
|
-
return new Promise((
|
|
17922
|
+
return new Promise((resolve, reject) => {
|
|
17923
17923
|
const closeCallback = () => {
|
|
17924
17924
|
reject(new Error("Socket closed"));
|
|
17925
17925
|
};
|
|
@@ -17929,7 +17929,7 @@ var require_transport = __commonJS((exports) => {
|
|
|
17929
17929
|
const socket = net.connect(address, () => {
|
|
17930
17930
|
socket.removeListener("close", closeCallback);
|
|
17931
17931
|
socket.removeListener("error", errorCallback);
|
|
17932
|
-
|
|
17932
|
+
resolve(socket);
|
|
17933
17933
|
});
|
|
17934
17934
|
socket.once("close", closeCallback);
|
|
17935
17935
|
socket.once("error", errorCallback);
|
|
@@ -21143,7 +21143,7 @@ var require_server_interceptors = __commonJS((exports) => {
|
|
|
21143
21143
|
} else {
|
|
21144
21144
|
decompresser = zlib.createGunzip();
|
|
21145
21145
|
}
|
|
21146
|
-
return new Promise((
|
|
21146
|
+
return new Promise((resolve, reject) => {
|
|
21147
21147
|
let totalLength = 0;
|
|
21148
21148
|
const messageParts = [];
|
|
21149
21149
|
decompresser.on("data", (chunk) => {
|
|
@@ -21158,7 +21158,7 @@ var require_server_interceptors = __commonJS((exports) => {
|
|
|
21158
21158
|
}
|
|
21159
21159
|
});
|
|
21160
21160
|
decompresser.on("end", () => {
|
|
21161
|
-
|
|
21161
|
+
resolve(Buffer.concat(messageParts));
|
|
21162
21162
|
});
|
|
21163
21163
|
decompresser.write(messageContents);
|
|
21164
21164
|
decompresser.end();
|
|
@@ -21751,10 +21751,10 @@ var require_server = __commonJS((exports) => {
|
|
|
21751
21751
|
bindOneAddress(address, boundPortObject) {
|
|
21752
21752
|
this.trace("Attempting to bind " + (0, subchannel_address_1.subchannelAddressToString)(address));
|
|
21753
21753
|
const http2Server = this.createHttp2Server(boundPortObject.credentials);
|
|
21754
|
-
return new Promise((
|
|
21754
|
+
return new Promise((resolve, reject) => {
|
|
21755
21755
|
const onError = (err) => {
|
|
21756
21756
|
this.trace("Failed to bind " + (0, subchannel_address_1.subchannelAddressToString)(address) + " with error " + err.message);
|
|
21757
|
-
|
|
21757
|
+
resolve({
|
|
21758
21758
|
port: "port" in address ? address.port : 1,
|
|
21759
21759
|
error: err.message
|
|
21760
21760
|
});
|
|
@@ -21782,7 +21782,7 @@ var require_server = __commonJS((exports) => {
|
|
|
21782
21782
|
});
|
|
21783
21783
|
boundPortObject.listeningServers.add(http2Server);
|
|
21784
21784
|
this.trace("Successfully bound " + (0, subchannel_address_1.subchannelAddressToString)(boundSubchannelAddress));
|
|
21785
|
-
|
|
21785
|
+
resolve({
|
|
21786
21786
|
port: "port" in boundSubchannelAddress ? boundSubchannelAddress.port : 1
|
|
21787
21787
|
});
|
|
21788
21788
|
http2Server.removeListener("error", onError);
|
|
@@ -21835,7 +21835,7 @@ var require_server = __commonJS((exports) => {
|
|
|
21835
21835
|
}
|
|
21836
21836
|
}
|
|
21837
21837
|
resolvePort(port) {
|
|
21838
|
-
return new Promise((
|
|
21838
|
+
return new Promise((resolve, reject) => {
|
|
21839
21839
|
let seenResolution = false;
|
|
21840
21840
|
const resolverListener = (endpointList, attributes, serviceConfig, resolutionNote) => {
|
|
21841
21841
|
if (seenResolution) {
|
|
@@ -21851,7 +21851,7 @@ var require_server = __commonJS((exports) => {
|
|
|
21851
21851
|
reject(new Error(`No addresses resolved for port ${port}`));
|
|
21852
21852
|
return true;
|
|
21853
21853
|
}
|
|
21854
|
-
|
|
21854
|
+
resolve(addressList);
|
|
21855
21855
|
return true;
|
|
21856
21856
|
};
|
|
21857
21857
|
const resolver = (0, resolver_1.createResolver)(port, resolverListener, this.options);
|
|
@@ -27564,8 +27564,8 @@ var require_promise = __commonJS((exports) => {
|
|
|
27564
27564
|
_resolve;
|
|
27565
27565
|
_reject;
|
|
27566
27566
|
constructor() {
|
|
27567
|
-
this._promise = new Promise((
|
|
27568
|
-
this._resolve =
|
|
27567
|
+
this._promise = new Promise((resolve, reject) => {
|
|
27568
|
+
this._resolve = resolve;
|
|
27569
27569
|
this._reject = reject;
|
|
27570
27570
|
});
|
|
27571
27571
|
}
|
|
@@ -27653,9 +27653,9 @@ var require_exporter = __commonJS((exports) => {
|
|
|
27653
27653
|
var api_1 = require_src();
|
|
27654
27654
|
var suppress_tracing_1 = require_suppress_tracing();
|
|
27655
27655
|
function _export(exporter, arg) {
|
|
27656
|
-
return new Promise((
|
|
27656
|
+
return new Promise((resolve) => {
|
|
27657
27657
|
api_1.context.with((0, suppress_tracing_1.suppressTracing)(api_1.context.active()), () => {
|
|
27658
|
-
exporter.export(arg,
|
|
27658
|
+
exporter.export(arg, resolve);
|
|
27659
27659
|
});
|
|
27660
27660
|
});
|
|
27661
27661
|
}
|
|
@@ -28111,22 +28111,22 @@ var require_grpc_exporter_transport = __commonJS((exports) => {
|
|
|
28111
28111
|
});
|
|
28112
28112
|
}
|
|
28113
28113
|
}
|
|
28114
|
-
return new Promise((
|
|
28114
|
+
return new Promise((resolve) => {
|
|
28115
28115
|
const deadline = Date.now() + timeoutMillis;
|
|
28116
28116
|
if (this._metadata == null) {
|
|
28117
|
-
return
|
|
28117
|
+
return resolve({
|
|
28118
28118
|
error: new Error("metadata was null"),
|
|
28119
28119
|
status: "failure"
|
|
28120
28120
|
});
|
|
28121
28121
|
}
|
|
28122
28122
|
this._client.export(buffer, this._metadata, { deadline }, (err, response) => {
|
|
28123
28123
|
if (err) {
|
|
28124
|
-
|
|
28124
|
+
resolve({
|
|
28125
28125
|
status: "failure",
|
|
28126
28126
|
error: err
|
|
28127
28127
|
});
|
|
28128
28128
|
} else {
|
|
28129
|
-
|
|
28129
|
+
resolve({
|
|
28130
28130
|
data: response,
|
|
28131
28131
|
status: "success"
|
|
28132
28132
|
});
|
|
@@ -28469,9 +28469,9 @@ var require_http_exporter_transport = __commonJS((exports) => {
|
|
|
28469
28469
|
async send(data, timeoutMillis) {
|
|
28470
28470
|
const { agent, request } = await this._loadUtils();
|
|
28471
28471
|
const headers = await this._parameters.headers();
|
|
28472
|
-
return new Promise((
|
|
28472
|
+
return new Promise((resolve) => {
|
|
28473
28473
|
(0, http_transport_utils_1.sendWithHttp)(request, this._parameters.url, headers, this._parameters.compression, this._parameters.userAgent, agent, data, (result) => {
|
|
28474
|
-
|
|
28474
|
+
resolve(result);
|
|
28475
28475
|
}, timeoutMillis);
|
|
28476
28476
|
});
|
|
28477
28477
|
}
|
|
@@ -28520,9 +28520,9 @@ var require_retrying_transport = __commonJS((exports) => {
|
|
|
28520
28520
|
this._transport = transport;
|
|
28521
28521
|
}
|
|
28522
28522
|
retry(data, timeoutMillis, inMillis) {
|
|
28523
|
-
return new Promise((
|
|
28523
|
+
return new Promise((resolve, reject) => {
|
|
28524
28524
|
setTimeout(() => {
|
|
28525
|
-
this._transport.send(data, timeoutMillis).then(
|
|
28525
|
+
this._transport.send(data, timeoutMillis).then(resolve, reject);
|
|
28526
28526
|
}, inMillis);
|
|
28527
28527
|
});
|
|
28528
28528
|
}
|
|
@@ -31252,7 +31252,7 @@ var require_root2 = __commonJS((exports, module) => {
|
|
|
31252
31252
|
return ScopeSpans;
|
|
31253
31253
|
}();
|
|
31254
31254
|
v12.Span = function() {
|
|
31255
|
-
function
|
|
31255
|
+
function Span(properties) {
|
|
31256
31256
|
this.attributes = [];
|
|
31257
31257
|
this.events = [];
|
|
31258
31258
|
this.links = [];
|
|
@@ -31262,26 +31262,26 @@ var require_root2 = __commonJS((exports, module) => {
|
|
|
31262
31262
|
this[keys[i]] = properties[keys[i]];
|
|
31263
31263
|
}
|
|
31264
31264
|
}
|
|
31265
|
-
|
|
31266
|
-
|
|
31267
|
-
|
|
31268
|
-
|
|
31269
|
-
|
|
31270
|
-
|
|
31271
|
-
|
|
31272
|
-
|
|
31273
|
-
|
|
31274
|
-
|
|
31275
|
-
|
|
31276
|
-
|
|
31277
|
-
|
|
31278
|
-
|
|
31279
|
-
|
|
31280
|
-
|
|
31281
|
-
|
|
31282
|
-
return new
|
|
31283
|
-
};
|
|
31284
|
-
|
|
31265
|
+
Span.prototype.traceId = null;
|
|
31266
|
+
Span.prototype.spanId = null;
|
|
31267
|
+
Span.prototype.traceState = null;
|
|
31268
|
+
Span.prototype.parentSpanId = null;
|
|
31269
|
+
Span.prototype.flags = null;
|
|
31270
|
+
Span.prototype.name = null;
|
|
31271
|
+
Span.prototype.kind = null;
|
|
31272
|
+
Span.prototype.startTimeUnixNano = null;
|
|
31273
|
+
Span.prototype.endTimeUnixNano = null;
|
|
31274
|
+
Span.prototype.attributes = $util.emptyArray;
|
|
31275
|
+
Span.prototype.droppedAttributesCount = null;
|
|
31276
|
+
Span.prototype.events = $util.emptyArray;
|
|
31277
|
+
Span.prototype.droppedEventsCount = null;
|
|
31278
|
+
Span.prototype.links = $util.emptyArray;
|
|
31279
|
+
Span.prototype.droppedLinksCount = null;
|
|
31280
|
+
Span.prototype.status = null;
|
|
31281
|
+
Span.create = function create(properties) {
|
|
31282
|
+
return new Span(properties);
|
|
31283
|
+
};
|
|
31284
|
+
Span.encode = function encode2(message, writer) {
|
|
31285
31285
|
if (!writer)
|
|
31286
31286
|
writer = $Writer.create();
|
|
31287
31287
|
if (message.traceId != null && Object.hasOwnProperty.call(message, "traceId"))
|
|
@@ -31321,10 +31321,10 @@ var require_root2 = __commonJS((exports, module) => {
|
|
|
31321
31321
|
writer.uint32(133).fixed32(message.flags);
|
|
31322
31322
|
return writer;
|
|
31323
31323
|
};
|
|
31324
|
-
|
|
31324
|
+
Span.encodeDelimited = function encodeDelimited(message, writer) {
|
|
31325
31325
|
return this.encode(message, writer).ldelim();
|
|
31326
31326
|
};
|
|
31327
|
-
|
|
31327
|
+
Span.decode = function decode2(reader, length, error2) {
|
|
31328
31328
|
if (!(reader instanceof $Reader))
|
|
31329
31329
|
reader = $Reader.create(reader);
|
|
31330
31330
|
var end = length === undefined ? reader.len : reader.pos + length, message = new $root.opentelemetry.proto.trace.v1.Span;
|
|
@@ -31410,12 +31410,12 @@ var require_root2 = __commonJS((exports, module) => {
|
|
|
31410
31410
|
}
|
|
31411
31411
|
return message;
|
|
31412
31412
|
};
|
|
31413
|
-
|
|
31413
|
+
Span.decodeDelimited = function decodeDelimited(reader) {
|
|
31414
31414
|
if (!(reader instanceof $Reader))
|
|
31415
31415
|
reader = new $Reader(reader);
|
|
31416
31416
|
return this.decode(reader, reader.uint32());
|
|
31417
31417
|
};
|
|
31418
|
-
|
|
31418
|
+
Span.verify = function verify(message) {
|
|
31419
31419
|
if (typeof message !== "object" || message === null)
|
|
31420
31420
|
return "object expected";
|
|
31421
31421
|
if (message.traceId != null && message.hasOwnProperty("traceId")) {
|
|
@@ -31508,7 +31508,7 @@ var require_root2 = __commonJS((exports, module) => {
|
|
|
31508
31508
|
}
|
|
31509
31509
|
return null;
|
|
31510
31510
|
};
|
|
31511
|
-
|
|
31511
|
+
Span.fromObject = function fromObject(object2) {
|
|
31512
31512
|
if (object2 instanceof $root.opentelemetry.proto.trace.v1.Span)
|
|
31513
31513
|
return object2;
|
|
31514
31514
|
var message = new $root.opentelemetry.proto.trace.v1.Span;
|
|
@@ -31631,7 +31631,7 @@ var require_root2 = __commonJS((exports, module) => {
|
|
|
31631
31631
|
}
|
|
31632
31632
|
return message;
|
|
31633
31633
|
};
|
|
31634
|
-
|
|
31634
|
+
Span.toObject = function toObject(message, options) {
|
|
31635
31635
|
if (!options)
|
|
31636
31636
|
options = {};
|
|
31637
31637
|
var object2 = {};
|
|
@@ -31730,16 +31730,16 @@ var require_root2 = __commonJS((exports, module) => {
|
|
|
31730
31730
|
object2.flags = message.flags;
|
|
31731
31731
|
return object2;
|
|
31732
31732
|
};
|
|
31733
|
-
|
|
31733
|
+
Span.prototype.toJSON = function toJSON() {
|
|
31734
31734
|
return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
|
|
31735
31735
|
};
|
|
31736
|
-
|
|
31736
|
+
Span.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
|
|
31737
31737
|
if (typeUrlPrefix === undefined) {
|
|
31738
31738
|
typeUrlPrefix = "type.googleapis.com";
|
|
31739
31739
|
}
|
|
31740
31740
|
return typeUrlPrefix + "/opentelemetry.proto.trace.v1.Span";
|
|
31741
31741
|
};
|
|
31742
|
-
|
|
31742
|
+
Span.SpanKind = function() {
|
|
31743
31743
|
var valuesById = {}, values = Object.create(valuesById);
|
|
31744
31744
|
values[valuesById[0] = "SPAN_KIND_UNSPECIFIED"] = 0;
|
|
31745
31745
|
values[valuesById[1] = "SPAN_KIND_INTERNAL"] = 1;
|
|
@@ -31749,7 +31749,7 @@ var require_root2 = __commonJS((exports, module) => {
|
|
|
31749
31749
|
values[valuesById[5] = "SPAN_KIND_CONSUMER"] = 5;
|
|
31750
31750
|
return values;
|
|
31751
31751
|
}();
|
|
31752
|
-
|
|
31752
|
+
Span.Event = function() {
|
|
31753
31753
|
function Event(properties) {
|
|
31754
31754
|
this.attributes = [];
|
|
31755
31755
|
if (properties) {
|
|
@@ -31919,7 +31919,7 @@ var require_root2 = __commonJS((exports, module) => {
|
|
|
31919
31919
|
};
|
|
31920
31920
|
return Event;
|
|
31921
31921
|
}();
|
|
31922
|
-
|
|
31922
|
+
Span.Link = function() {
|
|
31923
31923
|
function Link(properties) {
|
|
31924
31924
|
this.attributes = [];
|
|
31925
31925
|
if (properties) {
|
|
@@ -32126,7 +32126,7 @@ var require_root2 = __commonJS((exports, module) => {
|
|
|
32126
32126
|
};
|
|
32127
32127
|
return Link;
|
|
32128
32128
|
}();
|
|
32129
|
-
return
|
|
32129
|
+
return Span;
|
|
32130
32130
|
}();
|
|
32131
32131
|
v12.Status = function() {
|
|
32132
32132
|
function Status(properties) {
|
|
@@ -42765,14 +42765,14 @@ var require_BatchSpanProcessorBase = __commonJS((exports) => {
|
|
|
42765
42765
|
this._maybeStartTimer();
|
|
42766
42766
|
}
|
|
42767
42767
|
_flushAll() {
|
|
42768
|
-
return new Promise((
|
|
42768
|
+
return new Promise((resolve, reject) => {
|
|
42769
42769
|
const promises = [];
|
|
42770
42770
|
const count = Math.ceil(this._finishedSpans.length / this._maxExportBatchSize);
|
|
42771
42771
|
for (let i = 0, j = count;i < j; i++) {
|
|
42772
42772
|
promises.push(this._flushOneBatch());
|
|
42773
42773
|
}
|
|
42774
42774
|
Promise.all(promises).then(() => {
|
|
42775
|
-
|
|
42775
|
+
resolve();
|
|
42776
42776
|
}).catch(reject);
|
|
42777
42777
|
});
|
|
42778
42778
|
}
|
|
@@ -42781,7 +42781,7 @@ var require_BatchSpanProcessorBase = __commonJS((exports) => {
|
|
|
42781
42781
|
if (this._finishedSpans.length === 0) {
|
|
42782
42782
|
return Promise.resolve();
|
|
42783
42783
|
}
|
|
42784
|
-
return new Promise((
|
|
42784
|
+
return new Promise((resolve, reject) => {
|
|
42785
42785
|
const timer = setTimeout(() => {
|
|
42786
42786
|
reject(new Error("Timeout"));
|
|
42787
42787
|
}, this._exportTimeoutMillis);
|
|
@@ -42796,7 +42796,7 @@ var require_BatchSpanProcessorBase = __commonJS((exports) => {
|
|
|
42796
42796
|
const doExport = () => this._exporter.export(spans, (result) => {
|
|
42797
42797
|
clearTimeout(timer);
|
|
42798
42798
|
if (result.code === core_1.ExportResultCode.SUCCESS) {
|
|
42799
|
-
|
|
42799
|
+
resolve();
|
|
42800
42800
|
} else {
|
|
42801
42801
|
reject(result.error ?? new Error("BatchSpanProcessor: span export failed"));
|
|
42802
42802
|
}
|
|
@@ -42935,7 +42935,7 @@ var require_Tracer = __commonJS((exports) => {
|
|
|
42935
42935
|
var utility_1 = require_utility();
|
|
42936
42936
|
var platform_1 = require_platform4();
|
|
42937
42937
|
|
|
42938
|
-
class
|
|
42938
|
+
class Tracer {
|
|
42939
42939
|
_sampler;
|
|
42940
42940
|
_generalLimits;
|
|
42941
42941
|
_spanLimits;
|
|
@@ -43037,7 +43037,7 @@ var require_Tracer = __commonJS((exports) => {
|
|
|
43037
43037
|
return this._spanLimits;
|
|
43038
43038
|
}
|
|
43039
43039
|
}
|
|
43040
|
-
exports.Tracer =
|
|
43040
|
+
exports.Tracer = Tracer;
|
|
43041
43041
|
});
|
|
43042
43042
|
|
|
43043
43043
|
// ../../node_modules/@opentelemetry/sdk-trace-base/build/src/MultiSpanProcessor.js
|
|
@@ -43056,12 +43056,12 @@ var require_MultiSpanProcessor = __commonJS((exports) => {
|
|
|
43056
43056
|
for (const spanProcessor of this._spanProcessors) {
|
|
43057
43057
|
promises.push(spanProcessor.forceFlush());
|
|
43058
43058
|
}
|
|
43059
|
-
return new Promise((
|
|
43059
|
+
return new Promise((resolve) => {
|
|
43060
43060
|
Promise.all(promises).then(() => {
|
|
43061
|
-
|
|
43061
|
+
resolve();
|
|
43062
43062
|
}).catch((error2) => {
|
|
43063
43063
|
(0, core_1.globalErrorHandler)(error2 || new Error("MultiSpanProcessor: forceFlush failed"));
|
|
43064
|
-
|
|
43064
|
+
resolve();
|
|
43065
43065
|
});
|
|
43066
43066
|
});
|
|
43067
43067
|
}
|
|
@@ -43087,9 +43087,9 @@ var require_MultiSpanProcessor = __commonJS((exports) => {
|
|
|
43087
43087
|
for (const spanProcessor of this._spanProcessors) {
|
|
43088
43088
|
promises.push(spanProcessor.shutdown());
|
|
43089
43089
|
}
|
|
43090
|
-
return new Promise((
|
|
43090
|
+
return new Promise((resolve, reject) => {
|
|
43091
43091
|
Promise.all(promises).then(() => {
|
|
43092
|
-
|
|
43092
|
+
resolve();
|
|
43093
43093
|
}, reject);
|
|
43094
43094
|
});
|
|
43095
43095
|
}
|
|
@@ -43142,32 +43142,32 @@ var require_BasicTracerProvider = __commonJS((exports) => {
|
|
|
43142
43142
|
forceFlush() {
|
|
43143
43143
|
const timeout = this._config.forceFlushTimeoutMillis;
|
|
43144
43144
|
const promises = this._activeSpanProcessor["_spanProcessors"].map((spanProcessor) => {
|
|
43145
|
-
return new Promise((
|
|
43145
|
+
return new Promise((resolve) => {
|
|
43146
43146
|
let state;
|
|
43147
43147
|
const timeoutInterval = setTimeout(() => {
|
|
43148
|
-
|
|
43148
|
+
resolve(new Error(`Span processor did not completed within timeout period of ${timeout} ms`));
|
|
43149
43149
|
state = ForceFlushState.timeout;
|
|
43150
43150
|
}, timeout);
|
|
43151
43151
|
spanProcessor.forceFlush().then(() => {
|
|
43152
43152
|
clearTimeout(timeoutInterval);
|
|
43153
43153
|
if (state !== ForceFlushState.timeout) {
|
|
43154
43154
|
state = ForceFlushState.resolved;
|
|
43155
|
-
|
|
43155
|
+
resolve(state);
|
|
43156
43156
|
}
|
|
43157
43157
|
}).catch((error2) => {
|
|
43158
43158
|
clearTimeout(timeoutInterval);
|
|
43159
43159
|
state = ForceFlushState.error;
|
|
43160
|
-
|
|
43160
|
+
resolve(error2);
|
|
43161
43161
|
});
|
|
43162
43162
|
});
|
|
43163
43163
|
});
|
|
43164
|
-
return new Promise((
|
|
43164
|
+
return new Promise((resolve, reject) => {
|
|
43165
43165
|
Promise.all(promises).then((results) => {
|
|
43166
43166
|
const errors3 = results.filter((result) => result !== ForceFlushState.resolved);
|
|
43167
43167
|
if (errors3.length > 0) {
|
|
43168
43168
|
reject(errors3);
|
|
43169
43169
|
} else {
|
|
43170
|
-
|
|
43170
|
+
resolve();
|
|
43171
43171
|
}
|
|
43172
43172
|
}).catch((error2) => reject([error2]));
|
|
43173
43173
|
});
|
|
@@ -43618,10 +43618,10 @@ class UnexpectedFriskServerResponseError extends Error {
|
|
|
43618
43618
|
}
|
|
43619
43619
|
}
|
|
43620
43620
|
|
|
43621
|
-
class
|
|
43622
|
-
constructor(
|
|
43623
|
-
super(
|
|
43624
|
-
this.name = "
|
|
43621
|
+
class MissingToolPoliciesExtensionError extends FriskError {
|
|
43622
|
+
constructor(options) {
|
|
43623
|
+
super("decide_tool_call requires the tool policies extension. Install and register the @friskai/frisk-js-tool-policies extension; calling frisk.connect() alone is not sufficient.", options);
|
|
43624
|
+
this.name = "MissingToolPoliciesExtensionError";
|
|
43625
43625
|
}
|
|
43626
43626
|
}
|
|
43627
43627
|
|
|
@@ -43744,35 +43744,6 @@ function captureError(e, logger, meta) {
|
|
|
43744
43744
|
logError(logger, e.message, e, meta);
|
|
43745
43745
|
}
|
|
43746
43746
|
|
|
43747
|
-
// src/telemetry/constants.ts
|
|
43748
|
-
var TRACER_NAME = "frisk_js_sdk";
|
|
43749
|
-
var TRACER_VERSION = "0.1.0";
|
|
43750
|
-
var SPAN_NAME_DECIDE_TOOL_CALL = "frisk.tool_call.decide";
|
|
43751
|
-
var SPAN_NAME_OBSERVE_TOOL_CALL = "frisk.tool_call.observation";
|
|
43752
|
-
var SPAN_NAME_FRISK_SESSION = "frisk.session";
|
|
43753
|
-
var ATTRIBUTE_NAME_SESSION_PROMPT = "frisk.session.prompt";
|
|
43754
|
-
var ATTRIBUTE_NAME_SESSION_ID = "frisk.session.id";
|
|
43755
|
-
var ATTRIBUTE_NAME_REMOTE_SESSION_ID = "frisk.session.remote_id";
|
|
43756
|
-
var ATTRIBUTE_NAME_LLM_REASONING = "frisk.llm_reasoning";
|
|
43757
|
-
var ATTRIBUTE_NAME_TOOL_NAME = "frisk.tool.name";
|
|
43758
|
-
var ATTRIBUTE_NAME_FRISK_TOOL_ID = "frisk.tool.id";
|
|
43759
|
-
var ATTRIBUTE_NAME_FRISK_TOOL_VERSION_ID = "frisk.tool.version_id";
|
|
43760
|
-
var ATTRIBUTE_NAME_TOOL_CALL_ID = "frisk.tool_call.id";
|
|
43761
|
-
var ATTRIBUTE_NAME_TOOL_ARGS_JSON = "frisk.tool.args.json";
|
|
43762
|
-
var ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON = "frisk.tool.args_redacted_paths.json";
|
|
43763
|
-
var ATTRIBUTE_NAME_AGENT_STATE_JSON = "frisk.agent_state.json";
|
|
43764
|
-
var ATTRIBUTE_NAME_AGENT_STATE_REDACTED_PATHS_JSON = "frisk.agent_state_redacted_paths.json";
|
|
43765
|
-
var ATTRIBUTE_NAME_DECISION_MATCHED_RULE_COUNT = "frisk.decision.matched_rule_count";
|
|
43766
|
-
var ATTRIBUTE_NAME_DECISION_OUTCOME = "frisk.decision.outcome";
|
|
43767
|
-
var ATTRIBUTE_NAME_DECISION_REASON = "frisk.decision.reason";
|
|
43768
|
-
var ATTRIBUTE_NAME_ERROR_TYPE = "error.type";
|
|
43769
|
-
var ATTRIBUTE_NAME_ERROR_MESSAGE = "error.message";
|
|
43770
|
-
var ATTRIBUTE_NAME_TOOL_CALL_IS_SUCCESS = "frisk.tool_call.is_success";
|
|
43771
|
-
var ATTRIBUTE_NAME_TOOL_CALL_IS_ERROR = "frisk.tool_call.is_error";
|
|
43772
|
-
var ATTRIBUTE_NAME_TOOL_CALL_COUNT = "frisk.tool_calls.count";
|
|
43773
|
-
var ATTRIBUTE_NAME_TOOL_CALL_ERROR_COUNT = "frisk.tool_calls.error_count";
|
|
43774
|
-
var ATTRIBUTE_NAME_TOOL_CALL_SEQUENCE_NUMBER = "frisk.tool_call.sequence_number";
|
|
43775
|
-
|
|
43776
43747
|
// ../../node_modules/zod/v4/core/core.js
|
|
43777
43748
|
var NEVER = Object.freeze({
|
|
43778
43749
|
status: "aborted"
|
|
@@ -48164,6 +48135,18 @@ var llmReasoningZodShape = {
|
|
|
48164
48135
|
[LLM_REASONING_ARG_NAME]: string2().describe(LLM_REASONING_ARG_DESCRIPTION)
|
|
48165
48136
|
};
|
|
48166
48137
|
|
|
48138
|
+
// src/core/llm-reasoning/extractLlmReasoning.ts
|
|
48139
|
+
function extractLlmReasoning(toolArgs) {
|
|
48140
|
+
if (typeof toolArgs !== "object" || toolArgs === null || Array.isArray(toolArgs)) {
|
|
48141
|
+
return null;
|
|
48142
|
+
}
|
|
48143
|
+
const rawReasoning = toolArgs[LLM_REASONING_ARG_NAME];
|
|
48144
|
+
if (rawReasoning === null || rawReasoning === undefined) {
|
|
48145
|
+
return null;
|
|
48146
|
+
}
|
|
48147
|
+
return String(rawReasoning);
|
|
48148
|
+
}
|
|
48149
|
+
|
|
48167
48150
|
// src/core/llm-reasoning/removeLlmReasoningArg.ts
|
|
48168
48151
|
function removeLlmReasoningArg(input) {
|
|
48169
48152
|
if (!(LLM_REASONING_ARG_NAME in input)) {
|
|
@@ -48209,136 +48192,226 @@ class SessionRegistry {
|
|
|
48209
48192
|
}
|
|
48210
48193
|
}
|
|
48211
48194
|
|
|
48212
|
-
// src/core/
|
|
48195
|
+
// src/core/spans/frisk-span.ts
|
|
48213
48196
|
var import_api = __toESM(require_src(), 1);
|
|
48214
48197
|
|
|
48215
|
-
|
|
48216
|
-
|
|
48217
|
-
|
|
48218
|
-
|
|
48219
|
-
|
|
48220
|
-
|
|
48221
|
-
}
|
|
48222
|
-
|
|
48223
|
-
// src/core/tool-call-span.ts
|
|
48224
|
-
class ToolCallSpan {
|
|
48225
|
-
adapter;
|
|
48226
|
-
toolCall;
|
|
48227
|
-
friskToolId;
|
|
48228
|
-
agentState;
|
|
48229
|
-
parent;
|
|
48230
|
-
tracer;
|
|
48231
|
-
redaction;
|
|
48232
|
-
_span = null;
|
|
48233
|
-
_traceContextCarrier = null;
|
|
48234
|
-
sessionId;
|
|
48235
|
-
friskToolVersionId;
|
|
48198
|
+
class FriskSpan {
|
|
48199
|
+
_spanName;
|
|
48200
|
+
_attributeFields;
|
|
48201
|
+
_otelSpan;
|
|
48202
|
+
_attributes = {};
|
|
48203
|
+
_ended = false;
|
|
48236
48204
|
constructor({
|
|
48237
|
-
sessionId,
|
|
48238
|
-
adapter,
|
|
48239
|
-
toolCall,
|
|
48240
|
-
friskToolId,
|
|
48241
|
-
friskToolVersionId,
|
|
48242
|
-
agentState,
|
|
48243
|
-
parent,
|
|
48244
48205
|
tracer,
|
|
48245
|
-
|
|
48206
|
+
parent,
|
|
48207
|
+
spanName,
|
|
48208
|
+
attributeFields
|
|
48246
48209
|
}) {
|
|
48247
|
-
this.
|
|
48248
|
-
this.
|
|
48249
|
-
|
|
48250
|
-
this.
|
|
48251
|
-
this.friskToolVersionId = friskToolVersionId ?? null;
|
|
48252
|
-
this.agentState = agentState;
|
|
48253
|
-
this.parent = parent;
|
|
48254
|
-
this.tracer = tracer;
|
|
48255
|
-
this.redaction = resolveRedactionOptions(redact);
|
|
48210
|
+
this._spanName = spanName;
|
|
48211
|
+
this._attributeFields = attributeFields;
|
|
48212
|
+
const parentContext = parent ? import_api.trace.setSpan(import_api.context.active(), parent.otelSpan) : import_api.context.active();
|
|
48213
|
+
this._otelSpan = tracer.startSpan(this._spanName, undefined, parentContext);
|
|
48256
48214
|
}
|
|
48257
|
-
get
|
|
48258
|
-
|
|
48259
|
-
throw new ToolCallSpanNotInitializedError;
|
|
48260
|
-
}
|
|
48261
|
-
return this._span;
|
|
48215
|
+
get otelSpan() {
|
|
48216
|
+
return this._otelSpan;
|
|
48262
48217
|
}
|
|
48263
|
-
get
|
|
48264
|
-
return this.
|
|
48218
|
+
get spanId() {
|
|
48219
|
+
return this._otelSpan.spanContext().spanId;
|
|
48265
48220
|
}
|
|
48266
|
-
|
|
48267
|
-
this.
|
|
48268
|
-
|
|
48269
|
-
|
|
48270
|
-
|
|
48271
|
-
|
|
48221
|
+
setAttribute(field, value) {
|
|
48222
|
+
this.setAttributesByField({ [field]: value });
|
|
48223
|
+
}
|
|
48224
|
+
getAttribute(field) {
|
|
48225
|
+
return this._attributes[this.constantFor(field)];
|
|
48226
|
+
}
|
|
48227
|
+
end() {
|
|
48228
|
+
if (this._ended) {
|
|
48229
|
+
return;
|
|
48272
48230
|
}
|
|
48231
|
+
this._ended = true;
|
|
48232
|
+
this._otelSpan.end();
|
|
48273
48233
|
}
|
|
48274
|
-
|
|
48275
|
-
|
|
48276
|
-
|
|
48277
|
-
|
|
48278
|
-
|
|
48279
|
-
|
|
48234
|
+
setAttributesByField(values) {
|
|
48235
|
+
for (const [field, value] of Object.entries(values)) {
|
|
48236
|
+
const constant = this.constantFor(field);
|
|
48237
|
+
if (value === null || value === undefined) {
|
|
48238
|
+
continue;
|
|
48239
|
+
}
|
|
48240
|
+
this._attributes[constant] = value;
|
|
48241
|
+
this._otelSpan.setAttribute(constant, value);
|
|
48242
|
+
}
|
|
48243
|
+
}
|
|
48244
|
+
constantFor(field) {
|
|
48245
|
+
const constant = this._attributeFields[field];
|
|
48246
|
+
if (constant === undefined) {
|
|
48247
|
+
throw new Error(`Unknown attribute '${field}' for ${this.constructor.name}`);
|
|
48280
48248
|
}
|
|
48249
|
+
return constant;
|
|
48250
|
+
}
|
|
48251
|
+
}
|
|
48252
|
+
// src/telemetry/constants.ts
|
|
48253
|
+
var TRACER_NAME = "frisk_js_sdk";
|
|
48254
|
+
var TRACER_VERSION = "0.1.0";
|
|
48255
|
+
var SPAN_NAME_DECIDE_TOOL_CALL = "frisk.tool_call.decide";
|
|
48256
|
+
var SPAN_NAME_OBSERVE_TOOL_CALL = "frisk.tool_call.observation";
|
|
48257
|
+
var SPAN_NAME_LLM_CALL = "frisk.llm_call";
|
|
48258
|
+
var SPAN_NAME_OPERATION = "frisk.operation";
|
|
48259
|
+
var SPAN_NAME_FRISK_SESSION = "frisk.session";
|
|
48260
|
+
var ATTRIBUTE_NAME_LLM_CALL_SPAN_ID = "frisk.tool_call.llm_call_span_id";
|
|
48261
|
+
var ATTRIBUTE_NAME_LLM_CALL_PROMPTS_JSON = "frisk.llm_call.prompts.json";
|
|
48262
|
+
var ATTRIBUTE_NAME_LLM_CALL_RESPONSES_JSON = "frisk.llm_call.responses.json";
|
|
48263
|
+
var ATTRIBUTE_NAME_LLM_CALL_TOOL_CALLS_JSON = "frisk.llm_call.tool_calls.json";
|
|
48264
|
+
var ATTRIBUTE_NAME_MODEL_NAME = "frisk.model.name";
|
|
48265
|
+
var ATTRIBUTE_NAME_MODEL_PROVIDER = "frisk.model.provider";
|
|
48266
|
+
var ATTRIBUTE_NAME_TOKEN_USAGE_INPUT_TOKENS = "frisk.token_usage.input_tokens";
|
|
48267
|
+
var ATTRIBUTE_NAME_TOKEN_USAGE_OUTPUT_TOKENS = "frisk.token_usage.output_tokens";
|
|
48268
|
+
var ATTRIBUTE_NAME_TOKEN_USAGE_TOTAL_TOKENS = "frisk.token_usage.total_tokens";
|
|
48269
|
+
var ATTRIBUTE_NAME_SESSION_PROMPT = "frisk.session.prompt";
|
|
48270
|
+
var ATTRIBUTE_NAME_SESSION_ID = "frisk.session.id";
|
|
48271
|
+
var ATTRIBUTE_NAME_REMOTE_SESSION_ID = "frisk.session.remote_id";
|
|
48272
|
+
var ATTRIBUTE_NAME_LLM_REASONING = "frisk.llm_reasoning";
|
|
48273
|
+
var ATTRIBUTE_NAME_TOOL_NAME = "frisk.tool.name";
|
|
48274
|
+
var ATTRIBUTE_NAME_FRISK_TOOL_ID = "frisk.tool.id";
|
|
48275
|
+
var ATTRIBUTE_NAME_FRISK_TOOL_VERSION_ID = "frisk.tool.version_id";
|
|
48276
|
+
var ATTRIBUTE_NAME_TOOL_CALL_ID = "frisk.tool_call.id";
|
|
48277
|
+
var ATTRIBUTE_NAME_TOOL_ARGS_JSON = "frisk.tool.args.json";
|
|
48278
|
+
var ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON = "frisk.tool.args_redacted_paths.json";
|
|
48279
|
+
var ATTRIBUTE_NAME_AGENT_STATE_JSON = "frisk.agent_state.json";
|
|
48280
|
+
var ATTRIBUTE_NAME_AGENT_STATE_REDACTED_PATHS_JSON = "frisk.agent_state_redacted_paths.json";
|
|
48281
|
+
var ATTRIBUTE_NAME_DECISION_MATCHED_RULE_COUNT = "frisk.decision.matched_rule_count";
|
|
48282
|
+
var ATTRIBUTE_NAME_DECISION_OUTCOME = "frisk.decision.outcome";
|
|
48283
|
+
var ATTRIBUTE_NAME_DECISION_REASON = "frisk.decision.reason";
|
|
48284
|
+
var ATTRIBUTE_NAME_ERROR_TYPE = "error.type";
|
|
48285
|
+
var ATTRIBUTE_NAME_ERROR_MESSAGE = "error.message";
|
|
48286
|
+
var ATTRIBUTE_NAME_TOOL_CALL_IS_SUCCESS = "frisk.tool_call.is_success";
|
|
48287
|
+
var ATTRIBUTE_NAME_TOOL_CALL_IS_ERROR = "frisk.tool_call.is_error";
|
|
48288
|
+
var ATTRIBUTE_NAME_TOOL_CALL_COUNT = "frisk.tool_calls.count";
|
|
48289
|
+
var ATTRIBUTE_NAME_TOOL_CALL_ERROR_COUNT = "frisk.tool_calls.error_count";
|
|
48290
|
+
var ATTRIBUTE_NAME_TOOL_CALL_SEQUENCE_NUMBER = "frisk.tool_call.sequence_number";
|
|
48291
|
+
|
|
48292
|
+
// src/core/spans/llm-call-span.ts
|
|
48293
|
+
var FIELDS = {
|
|
48294
|
+
sessionId: ATTRIBUTE_NAME_SESSION_ID,
|
|
48295
|
+
promptsJson: ATTRIBUTE_NAME_LLM_CALL_PROMPTS_JSON,
|
|
48296
|
+
responsesJson: ATTRIBUTE_NAME_LLM_CALL_RESPONSES_JSON,
|
|
48297
|
+
toolCallsJson: ATTRIBUTE_NAME_LLM_CALL_TOOL_CALLS_JSON,
|
|
48298
|
+
modelName: ATTRIBUTE_NAME_MODEL_NAME,
|
|
48299
|
+
modelProvider: ATTRIBUTE_NAME_MODEL_PROVIDER,
|
|
48300
|
+
inputTokens: ATTRIBUTE_NAME_TOKEN_USAGE_INPUT_TOKENS,
|
|
48301
|
+
outputTokens: ATTRIBUTE_NAME_TOKEN_USAGE_OUTPUT_TOKENS,
|
|
48302
|
+
totalTokens: ATTRIBUTE_NAME_TOKEN_USAGE_TOTAL_TOKENS,
|
|
48303
|
+
errorType: ATTRIBUTE_NAME_ERROR_TYPE,
|
|
48304
|
+
errorMessage: ATTRIBUTE_NAME_ERROR_MESSAGE
|
|
48305
|
+
};
|
|
48306
|
+
|
|
48307
|
+
class LlmCallSpan extends FriskSpan {
|
|
48308
|
+
constructor(args) {
|
|
48309
|
+
super({ ...args, spanName: SPAN_NAME_LLM_CALL, attributeFields: FIELDS });
|
|
48281
48310
|
}
|
|
48282
|
-
|
|
48283
|
-
this.
|
|
48311
|
+
setAttributes(values) {
|
|
48312
|
+
this.setAttributesByField(values);
|
|
48284
48313
|
}
|
|
48285
|
-
|
|
48286
|
-
|
|
48314
|
+
}
|
|
48315
|
+
// src/core/spans/operation-span.ts
|
|
48316
|
+
var FIELDS2 = {
|
|
48317
|
+
sessionId: ATTRIBUTE_NAME_SESSION_ID
|
|
48318
|
+
};
|
|
48319
|
+
|
|
48320
|
+
class OperationSpan extends FriskSpan {
|
|
48321
|
+
constructor(args) {
|
|
48322
|
+
super({ ...args, spanName: SPAN_NAME_OPERATION, attributeFields: FIELDS2 });
|
|
48287
48323
|
}
|
|
48288
|
-
|
|
48289
|
-
|
|
48290
|
-
|
|
48291
|
-
|
|
48292
|
-
|
|
48293
|
-
|
|
48294
|
-
|
|
48324
|
+
setAttributes(values) {
|
|
48325
|
+
this.setAttributesByField(values);
|
|
48326
|
+
}
|
|
48327
|
+
}
|
|
48328
|
+
// src/core/spans/session-span.ts
|
|
48329
|
+
var FIELDS3 = {
|
|
48330
|
+
sessionId: ATTRIBUTE_NAME_SESSION_ID,
|
|
48331
|
+
remoteSessionId: ATTRIBUTE_NAME_REMOTE_SESSION_ID,
|
|
48332
|
+
prompt: ATTRIBUTE_NAME_SESSION_PROMPT,
|
|
48333
|
+
toolCallCount: ATTRIBUTE_NAME_TOOL_CALL_COUNT,
|
|
48334
|
+
toolCallErrorCount: ATTRIBUTE_NAME_TOOL_CALL_ERROR_COUNT,
|
|
48335
|
+
inputTokens: ATTRIBUTE_NAME_TOKEN_USAGE_INPUT_TOKENS,
|
|
48336
|
+
outputTokens: ATTRIBUTE_NAME_TOKEN_USAGE_OUTPUT_TOKENS,
|
|
48337
|
+
totalTokens: ATTRIBUTE_NAME_TOKEN_USAGE_TOTAL_TOKENS
|
|
48338
|
+
};
|
|
48339
|
+
|
|
48340
|
+
class SessionSpan extends FriskSpan {
|
|
48341
|
+
constructor(args) {
|
|
48342
|
+
super({
|
|
48343
|
+
...args,
|
|
48344
|
+
spanName: SPAN_NAME_FRISK_SESSION,
|
|
48345
|
+
attributeFields: FIELDS3
|
|
48295
48346
|
});
|
|
48296
|
-
if (decision.reason) {
|
|
48297
|
-
this.setAttribute(ATTRIBUTE_NAME_DECISION_REASON, decision.reason);
|
|
48298
|
-
}
|
|
48299
48347
|
}
|
|
48300
|
-
|
|
48301
|
-
|
|
48302
|
-
|
|
48303
|
-
|
|
48304
|
-
|
|
48305
|
-
|
|
48306
|
-
|
|
48307
|
-
|
|
48308
|
-
|
|
48348
|
+
setAttributes(values) {
|
|
48349
|
+
this.setAttributesByField(values);
|
|
48350
|
+
}
|
|
48351
|
+
}
|
|
48352
|
+
// src/core/spans/tool-call-decision-span.ts
|
|
48353
|
+
var FIELDS4 = {
|
|
48354
|
+
sessionId: ATTRIBUTE_NAME_SESSION_ID,
|
|
48355
|
+
toolName: ATTRIBUTE_NAME_TOOL_NAME,
|
|
48356
|
+
toolCallId: ATTRIBUTE_NAME_TOOL_CALL_ID,
|
|
48357
|
+
toolArgsJson: ATTRIBUTE_NAME_TOOL_ARGS_JSON,
|
|
48358
|
+
toolArgsRedactedPathsJson: ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON,
|
|
48359
|
+
agentStateJson: ATTRIBUTE_NAME_AGENT_STATE_JSON,
|
|
48360
|
+
agentStateRedactedPathsJson: ATTRIBUTE_NAME_AGENT_STATE_REDACTED_PATHS_JSON,
|
|
48361
|
+
friskToolId: ATTRIBUTE_NAME_FRISK_TOOL_ID,
|
|
48362
|
+
friskToolVersionId: ATTRIBUTE_NAME_FRISK_TOOL_VERSION_ID,
|
|
48363
|
+
llmReasoning: ATTRIBUTE_NAME_LLM_REASONING,
|
|
48364
|
+
decisionOutcome: ATTRIBUTE_NAME_DECISION_OUTCOME,
|
|
48365
|
+
decisionMatchedRuleCount: ATTRIBUTE_NAME_DECISION_MATCHED_RULE_COUNT,
|
|
48366
|
+
decisionReason: ATTRIBUTE_NAME_DECISION_REASON,
|
|
48367
|
+
errorType: ATTRIBUTE_NAME_ERROR_TYPE,
|
|
48368
|
+
errorMessage: ATTRIBUTE_NAME_ERROR_MESSAGE
|
|
48369
|
+
};
|
|
48370
|
+
|
|
48371
|
+
class ToolCallDecisionSpan extends FriskSpan {
|
|
48372
|
+
constructor(args) {
|
|
48373
|
+
super({
|
|
48374
|
+
...args,
|
|
48375
|
+
spanName: SPAN_NAME_DECIDE_TOOL_CALL,
|
|
48376
|
+
attributeFields: FIELDS4
|
|
48309
48377
|
});
|
|
48310
48378
|
}
|
|
48311
|
-
|
|
48312
|
-
|
|
48313
|
-
const redactedToolArgsResult = this.adapter.serializeToolArgs(removeLlmReasoningArg(this.toolCall.args), { redact: this.redaction.redactToolArgs });
|
|
48314
|
-
const redactedAgentStateResult = this.adapter.serializeAgentState(this.agentState, { redact: this.redaction.redactAgentState });
|
|
48315
|
-
this._span = this.tracer.startSpan(SPAN_NAME_DECIDE_TOOL_CALL, {
|
|
48316
|
-
attributes: {
|
|
48317
|
-
[ATTRIBUTE_NAME_SESSION_ID]: this.sessionId,
|
|
48318
|
-
[ATTRIBUTE_NAME_TOOL_NAME]: this.toolCall.name,
|
|
48319
|
-
...this.friskToolId !== null ? { [ATTRIBUTE_NAME_FRISK_TOOL_ID]: this.friskToolId } : {},
|
|
48320
|
-
...this.friskToolVersionId !== null ? {
|
|
48321
|
-
[ATTRIBUTE_NAME_FRISK_TOOL_VERSION_ID]: this.friskToolVersionId
|
|
48322
|
-
} : {},
|
|
48323
|
-
[ATTRIBUTE_NAME_TOOL_CALL_ID]: this.toolCall.id,
|
|
48324
|
-
[ATTRIBUTE_NAME_TOOL_ARGS_JSON]: redactedToolArgsResult.value ?? "",
|
|
48325
|
-
[ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON]: JSON.stringify(redactedToolArgsResult.redactedPaths),
|
|
48326
|
-
[ATTRIBUTE_NAME_AGENT_STATE_JSON]: redactedAgentStateResult.value ?? "",
|
|
48327
|
-
[ATTRIBUTE_NAME_AGENT_STATE_REDACTED_PATHS_JSON]: JSON.stringify(redactedAgentStateResult.redactedPaths)
|
|
48328
|
-
}
|
|
48329
|
-
}, parentContext);
|
|
48330
|
-
this._traceContextCarrier = {};
|
|
48331
|
-
const spanContext = import_api.trace.setSpan(import_api.context.active(), this.span);
|
|
48332
|
-
import_api.propagation.inject(spanContext, this._traceContextCarrier);
|
|
48333
|
-
}
|
|
48334
|
-
exit() {
|
|
48335
|
-
if (!this.span) {
|
|
48336
|
-
return;
|
|
48337
|
-
}
|
|
48338
|
-
this.span.end();
|
|
48379
|
+
setAttributes(values) {
|
|
48380
|
+
this.setAttributesByField(values);
|
|
48339
48381
|
}
|
|
48340
48382
|
}
|
|
48383
|
+
// src/core/spans/tool-call-observation-span.ts
|
|
48384
|
+
var FIELDS5 = {
|
|
48385
|
+
sessionId: ATTRIBUTE_NAME_SESSION_ID,
|
|
48386
|
+
toolName: ATTRIBUTE_NAME_TOOL_NAME,
|
|
48387
|
+
toolCallId: ATTRIBUTE_NAME_TOOL_CALL_ID,
|
|
48388
|
+
toolArgsJson: ATTRIBUTE_NAME_TOOL_ARGS_JSON,
|
|
48389
|
+
toolArgsRedactedPathsJson: ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON,
|
|
48390
|
+
agentStateJson: ATTRIBUTE_NAME_AGENT_STATE_JSON,
|
|
48391
|
+
agentStateRedactedPathsJson: ATTRIBUTE_NAME_AGENT_STATE_REDACTED_PATHS_JSON,
|
|
48392
|
+
toolCallSequenceNumber: ATTRIBUTE_NAME_TOOL_CALL_SEQUENCE_NUMBER,
|
|
48393
|
+
friskToolId: ATTRIBUTE_NAME_FRISK_TOOL_ID,
|
|
48394
|
+
friskToolVersionId: ATTRIBUTE_NAME_FRISK_TOOL_VERSION_ID,
|
|
48395
|
+
llmReasoning: ATTRIBUTE_NAME_LLM_REASONING,
|
|
48396
|
+
isSuccess: ATTRIBUTE_NAME_TOOL_CALL_IS_SUCCESS,
|
|
48397
|
+
isError: ATTRIBUTE_NAME_TOOL_CALL_IS_ERROR,
|
|
48398
|
+
errorMessage: ATTRIBUTE_NAME_ERROR_MESSAGE,
|
|
48399
|
+
errorType: ATTRIBUTE_NAME_ERROR_TYPE,
|
|
48400
|
+
llmCallSpanId: ATTRIBUTE_NAME_LLM_CALL_SPAN_ID
|
|
48401
|
+
};
|
|
48341
48402
|
|
|
48403
|
+
class ToolCallObservationSpan extends FriskSpan {
|
|
48404
|
+
constructor(args) {
|
|
48405
|
+
super({
|
|
48406
|
+
...args,
|
|
48407
|
+
spanName: SPAN_NAME_OBSERVE_TOOL_CALL,
|
|
48408
|
+
attributeFields: FIELDS5
|
|
48409
|
+
});
|
|
48410
|
+
}
|
|
48411
|
+
setAttributes(values) {
|
|
48412
|
+
this.setAttributesByField(values);
|
|
48413
|
+
}
|
|
48414
|
+
}
|
|
48342
48415
|
// src/core/types.ts
|
|
48343
48416
|
var DecisionOutcome;
|
|
48344
48417
|
((DecisionOutcome2) => {
|
|
@@ -48358,9 +48431,13 @@ class FriskSession {
|
|
|
48358
48431
|
logger;
|
|
48359
48432
|
_rootRunId = null;
|
|
48360
48433
|
_isTracing = false;
|
|
48434
|
+
_agentState = null;
|
|
48361
48435
|
toolCallSequenceNumber = 0;
|
|
48362
48436
|
toolCallSequenceGenerator = this.createToolCallSequenceGenerator();
|
|
48363
48437
|
toolCallErrorCount = 0;
|
|
48438
|
+
tokenUsageInput = 0;
|
|
48439
|
+
tokenUsageOutput = 0;
|
|
48440
|
+
tokenUsageTotal = 0;
|
|
48364
48441
|
constructor({ frisk, redact, tracer, logging }) {
|
|
48365
48442
|
const sessionId = this.constructor.generateSessionId();
|
|
48366
48443
|
this.logger = deriveSdkLogger(logging, {
|
|
@@ -48383,33 +48460,67 @@ class FriskSession {
|
|
|
48383
48460
|
get rootRunId() {
|
|
48384
48461
|
return this._rootRunId;
|
|
48385
48462
|
}
|
|
48463
|
+
createLlmCallSpan({
|
|
48464
|
+
parent
|
|
48465
|
+
} = {}) {
|
|
48466
|
+
const span = new LlmCallSpan({
|
|
48467
|
+
tracer: this.tracer,
|
|
48468
|
+
parent: parent ?? this._rootSpan
|
|
48469
|
+
});
|
|
48470
|
+
span.setAttributes({ sessionId: this.id });
|
|
48471
|
+
return span;
|
|
48472
|
+
}
|
|
48473
|
+
createOperationSpan({
|
|
48474
|
+
parent
|
|
48475
|
+
} = {}) {
|
|
48476
|
+
const span = new OperationSpan({
|
|
48477
|
+
tracer: this.tracer,
|
|
48478
|
+
parent: parent ?? this._rootSpan
|
|
48479
|
+
});
|
|
48480
|
+
span.setAttributes({ sessionId: this.id });
|
|
48481
|
+
return span;
|
|
48482
|
+
}
|
|
48386
48483
|
async createToolCallSpan({
|
|
48387
48484
|
name,
|
|
48388
|
-
args: toolArgsInput
|
|
48485
|
+
args: toolArgsInput,
|
|
48486
|
+
agentState,
|
|
48487
|
+
parent
|
|
48389
48488
|
}) {
|
|
48390
48489
|
const toolArgs = this.validateToolArgs(toolArgsInput);
|
|
48490
|
+
const llmReasoning = extractLlmReasoning(toolArgs);
|
|
48391
48491
|
const redactedToolArgsResult = this.frisk.adapter?.serializeToolArgs(removeLlmReasoningArg(toolArgs), { redact: this.redaction.redactToolArgs }) ?? {
|
|
48392
48492
|
value: "{}",
|
|
48393
48493
|
redactedPaths: []
|
|
48394
48494
|
};
|
|
48395
|
-
const
|
|
48396
|
-
const
|
|
48397
|
-
|
|
48398
|
-
[
|
|
48399
|
-
[ATTRIBUTE_NAME_TOOL_NAME]: name,
|
|
48400
|
-
[ATTRIBUTE_NAME_TOOL_ARGS_JSON]: redactedToolArgsResult.value,
|
|
48401
|
-
[ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON]: JSON.stringify(redactedToolArgsResult.redactedPaths),
|
|
48402
|
-
[ATTRIBUTE_NAME_TOOL_CALL_SEQUENCE_NUMBER]: this.toolCallSequenceGenerator.next().value
|
|
48495
|
+
const agentStateToUse = agentState ?? this._agentState ?? {};
|
|
48496
|
+
const redactedAgentStateResult = this.frisk.adapter?.serializeAgentState(agentStateToUse, { redact: this.redaction.redactAgentState }) ?? {
|
|
48497
|
+
value: "{}",
|
|
48498
|
+
redactedPaths: []
|
|
48403
48499
|
};
|
|
48500
|
+
const span = new ToolCallObservationSpan({
|
|
48501
|
+
tracer: this.tracer,
|
|
48502
|
+
parent: parent ?? this._rootSpan
|
|
48503
|
+
});
|
|
48504
|
+
span.setAttributes({
|
|
48505
|
+
sessionId: this.id,
|
|
48506
|
+
toolName: name,
|
|
48507
|
+
toolArgsJson: redactedToolArgsResult.value ?? "{}",
|
|
48508
|
+
toolArgsRedactedPathsJson: JSON.stringify(redactedToolArgsResult.redactedPaths),
|
|
48509
|
+
agentStateJson: redactedAgentStateResult.value ?? "{}",
|
|
48510
|
+
agentStateRedactedPathsJson: JSON.stringify(redactedAgentStateResult.redactedPaths),
|
|
48511
|
+
toolCallSequenceNumber: this.toolCallSequenceGenerator.next().value
|
|
48512
|
+
});
|
|
48404
48513
|
await this.frisk.toolRegistrationComplete;
|
|
48405
48514
|
const registeredTool = this.frisk.getRegisteredTool(name);
|
|
48406
48515
|
if (registeredTool) {
|
|
48407
|
-
|
|
48408
|
-
|
|
48516
|
+
span.setAttributes({
|
|
48517
|
+
friskToolId: registeredTool.id,
|
|
48518
|
+
friskToolVersionId: registeredTool.versionId
|
|
48519
|
+
});
|
|
48520
|
+
}
|
|
48521
|
+
if (llmReasoning !== null) {
|
|
48522
|
+
span.setAttributes({ llmReasoning });
|
|
48409
48523
|
}
|
|
48410
|
-
const span = this.getTracer().startSpan(SPAN_NAME_OBSERVE_TOOL_CALL, {
|
|
48411
|
-
attributes: spanAttributes
|
|
48412
|
-
}, parentContext);
|
|
48413
48524
|
return span;
|
|
48414
48525
|
}
|
|
48415
48526
|
closeToolCallSpan({
|
|
@@ -48419,19 +48530,19 @@ class FriskSession {
|
|
|
48419
48530
|
status
|
|
48420
48531
|
}) {
|
|
48421
48532
|
if (toolCallId) {
|
|
48422
|
-
span.
|
|
48533
|
+
span.setAttributes({ toolCallId });
|
|
48423
48534
|
}
|
|
48424
48535
|
if (status === "error" /* Error */ || !!err) {
|
|
48425
48536
|
this.incrementToolCallErrors();
|
|
48426
|
-
span.
|
|
48427
|
-
span.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_IS_SUCCESS, false);
|
|
48537
|
+
span.setAttributes({ isError: true, isSuccess: false });
|
|
48428
48538
|
} else if (status === "success" /* Success */) {
|
|
48429
|
-
span.
|
|
48430
|
-
span.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_IS_ERROR, false);
|
|
48539
|
+
span.setAttributes({ isSuccess: true, isError: false });
|
|
48431
48540
|
}
|
|
48432
|
-
if (err
|
|
48433
|
-
span.
|
|
48434
|
-
|
|
48541
|
+
if (err instanceof Error) {
|
|
48542
|
+
span.setAttributes({
|
|
48543
|
+
errorMessage: `${err}`,
|
|
48544
|
+
errorType: `${err.constructor.name}`
|
|
48545
|
+
});
|
|
48435
48546
|
}
|
|
48436
48547
|
span.end();
|
|
48437
48548
|
}
|
|
@@ -48445,32 +48556,37 @@ class FriskSession {
|
|
|
48445
48556
|
agentState
|
|
48446
48557
|
}) {
|
|
48447
48558
|
const registeredTool = this.frisk.getRegisteredTool(toolCall.name);
|
|
48448
|
-
const
|
|
48449
|
-
|
|
48450
|
-
|
|
48451
|
-
|
|
48452
|
-
friskToolId: registeredTool?.id ?? null,
|
|
48453
|
-
friskToolVersionId: registeredTool?.versionId ?? null,
|
|
48454
|
-
agentState,
|
|
48455
|
-
parent: this._rootSpan,
|
|
48559
|
+
const redactedToolArgs = this.frisk.adapter.serializeToolArgs(removeLlmReasoningArg(toolCall.args), { redact: this.redaction.redactToolArgs });
|
|
48560
|
+
const redactedAgentState = this.frisk.adapter.serializeAgentState(agentState, { redact: this.redaction.redactAgentState });
|
|
48561
|
+
const llmReasoning = extractLlmReasoning(toolCall.args);
|
|
48562
|
+
const span = new ToolCallDecisionSpan({
|
|
48456
48563
|
tracer: this.tracer,
|
|
48457
|
-
|
|
48564
|
+
parent: this._rootSpan
|
|
48458
48565
|
});
|
|
48459
|
-
|
|
48460
|
-
|
|
48566
|
+
try {
|
|
48567
|
+
span.setAttributes({
|
|
48568
|
+
sessionId: this.id,
|
|
48569
|
+
toolName: toolCall.name,
|
|
48570
|
+
toolCallId: toolCall.id,
|
|
48571
|
+
toolArgsJson: redactedToolArgs.value ?? "{}",
|
|
48572
|
+
toolArgsRedactedPathsJson: JSON.stringify(redactedToolArgs.redactedPaths),
|
|
48573
|
+
agentStateJson: redactedAgentState.value ?? "{}",
|
|
48574
|
+
agentStateRedactedPathsJson: JSON.stringify(redactedAgentState.redactedPaths),
|
|
48575
|
+
friskToolId: registeredTool?.id,
|
|
48576
|
+
friskToolVersionId: registeredTool?.versionId,
|
|
48577
|
+
llmReasoning: llmReasoning ?? undefined
|
|
48578
|
+
});
|
|
48579
|
+
const spanContext = import_api2.trace.setSpan(import_api2.context.active(), span.otelSpan);
|
|
48580
|
+
const traceContextCarrier = {};
|
|
48581
|
+
import_api2.propagation.inject(spanContext, traceContextCarrier);
|
|
48461
48582
|
try {
|
|
48462
|
-
if (LLM_REASONING_ARG_NAME in toolArgs) {
|
|
48463
|
-
const llmReasoning = toolArgs[LLM_REASONING_ARG_NAME];
|
|
48464
|
-
span.setAttribute(ATTRIBUTE_NAME_LLM_REASONING, llmReasoning);
|
|
48465
|
-
}
|
|
48466
|
-
const baseToolCallArgs = removeLlmReasoningArg(toolCall.args);
|
|
48467
48583
|
const coreResult = this.frisk.decideToolCall({
|
|
48468
48584
|
toolCall: {
|
|
48469
48585
|
...toolCall,
|
|
48470
|
-
args:
|
|
48586
|
+
args: removeLlmReasoningArg(toolCall.args)
|
|
48471
48587
|
},
|
|
48472
48588
|
agentState,
|
|
48473
|
-
traceContextCarrier
|
|
48589
|
+
traceContextCarrier
|
|
48474
48590
|
});
|
|
48475
48591
|
const result = {
|
|
48476
48592
|
outcome: coreResult.outcome,
|
|
@@ -48479,7 +48595,11 @@ class FriskSession {
|
|
|
48479
48595
|
policyId: coreResult.policyId,
|
|
48480
48596
|
policyVersionId: coreResult.policyVersionId
|
|
48481
48597
|
};
|
|
48482
|
-
span.
|
|
48598
|
+
span.setAttributes({
|
|
48599
|
+
decisionOutcome: result.outcome,
|
|
48600
|
+
decisionMatchedRuleCount: Number(result.rulesMatchedCount),
|
|
48601
|
+
decisionReason: result.reason ?? undefined
|
|
48602
|
+
});
|
|
48483
48603
|
return result;
|
|
48484
48604
|
} catch (error2) {
|
|
48485
48605
|
const wrapped = new ToolCallEvaluationError(error2);
|
|
@@ -48487,14 +48607,19 @@ class FriskSession {
|
|
|
48487
48607
|
toolName: toolCall.name,
|
|
48488
48608
|
toolCallId: toolCall.id
|
|
48489
48609
|
});
|
|
48490
|
-
span.
|
|
48610
|
+
span.setAttributes({
|
|
48611
|
+
errorType: wrapped.constructor.name,
|
|
48612
|
+
errorMessage: wrapped.message
|
|
48613
|
+
});
|
|
48491
48614
|
return {
|
|
48492
48615
|
outcome: "error" /* ERROR */,
|
|
48493
48616
|
rulesMatchedCount: 0,
|
|
48494
48617
|
reason: wrapped.message
|
|
48495
48618
|
};
|
|
48496
48619
|
}
|
|
48497
|
-
}
|
|
48620
|
+
} finally {
|
|
48621
|
+
span.end();
|
|
48622
|
+
}
|
|
48498
48623
|
}
|
|
48499
48624
|
*createToolCallSequenceGenerator() {
|
|
48500
48625
|
while (true) {
|
|
@@ -48510,23 +48635,49 @@ class FriskSession {
|
|
|
48510
48635
|
getToolCallErrorCount() {
|
|
48511
48636
|
return this.toolCallErrorCount;
|
|
48512
48637
|
}
|
|
48513
|
-
|
|
48638
|
+
recordTokenUsage({
|
|
48639
|
+
inputTokens = 0,
|
|
48640
|
+
outputTokens = 0,
|
|
48641
|
+
totalTokens = 0
|
|
48642
|
+
}) {
|
|
48643
|
+
this.tokenUsageInput += inputTokens;
|
|
48644
|
+
this.tokenUsageOutput += outputTokens;
|
|
48645
|
+
this.tokenUsageTotal += totalTokens;
|
|
48646
|
+
this._rootSpan?.setAttributes({
|
|
48647
|
+
inputTokens: this.tokenUsageInput,
|
|
48648
|
+
outputTokens: this.tokenUsageOutput,
|
|
48649
|
+
totalTokens: this.tokenUsageTotal
|
|
48650
|
+
});
|
|
48651
|
+
}
|
|
48652
|
+
getTokenUsage() {
|
|
48653
|
+
return {
|
|
48654
|
+
inputTokens: this.tokenUsageInput,
|
|
48655
|
+
outputTokens: this.tokenUsageOutput,
|
|
48656
|
+
totalTokens: this.tokenUsageTotal
|
|
48657
|
+
};
|
|
48658
|
+
}
|
|
48659
|
+
initTracing({ runId, agentState }) {
|
|
48514
48660
|
this._rootRunId = runId;
|
|
48515
48661
|
this._isTracing = true;
|
|
48516
|
-
|
|
48517
|
-
span
|
|
48518
|
-
span.
|
|
48519
|
-
const userPrompt = this.frisk.adapter.extractPrompt?.(
|
|
48662
|
+
this._agentState = agentState;
|
|
48663
|
+
const span = new SessionSpan({ tracer: this.tracer });
|
|
48664
|
+
span.setAttributes({ sessionId: this.id, remoteSessionId: runId });
|
|
48665
|
+
const userPrompt = this.frisk.adapter.extractPrompt?.(agentState);
|
|
48520
48666
|
if (userPrompt) {
|
|
48521
|
-
span.
|
|
48667
|
+
span.setAttributes({ prompt: userPrompt });
|
|
48522
48668
|
}
|
|
48523
48669
|
this.setRootSpan(span);
|
|
48524
48670
|
return span;
|
|
48525
48671
|
}
|
|
48526
48672
|
endTracing() {
|
|
48527
48673
|
if (this._rootSpan) {
|
|
48528
|
-
this._rootSpan.
|
|
48529
|
-
|
|
48674
|
+
this._rootSpan.setAttributes({
|
|
48675
|
+
toolCallCount: this.getToolCallCount(),
|
|
48676
|
+
toolCallErrorCount: this.getToolCallErrorCount(),
|
|
48677
|
+
inputTokens: this.tokenUsageInput,
|
|
48678
|
+
outputTokens: this.tokenUsageOutput,
|
|
48679
|
+
totalTokens: this.tokenUsageTotal
|
|
48680
|
+
});
|
|
48530
48681
|
this._rootSpan.end();
|
|
48531
48682
|
}
|
|
48532
48683
|
this._isTracing = false;
|
|
@@ -48546,6 +48697,7 @@ class FriskCallbackHandler extends BaseCallbackHandler {
|
|
|
48546
48697
|
name = "FriskCallbackHandler";
|
|
48547
48698
|
session;
|
|
48548
48699
|
spansByRunId;
|
|
48700
|
+
llmCallSpanIdByToolCallId;
|
|
48549
48701
|
frisk;
|
|
48550
48702
|
logger;
|
|
48551
48703
|
constructor({
|
|
@@ -48557,22 +48709,57 @@ class FriskCallbackHandler extends BaseCallbackHandler {
|
|
|
48557
48709
|
this.session = session;
|
|
48558
48710
|
this.frisk = frisk;
|
|
48559
48711
|
this.spansByRunId = new Map;
|
|
48712
|
+
this.llmCallSpanIdByToolCallId = new Map;
|
|
48560
48713
|
this.logger = deriveSdkLogger(logging, {
|
|
48561
48714
|
component: "FriskCallbackHandler"
|
|
48562
48715
|
});
|
|
48563
48716
|
}
|
|
48564
48717
|
handleChainStart(_chain, inputs, runId, parentRunId) {
|
|
48718
|
+
let span;
|
|
48565
48719
|
if (parentRunId === undefined) {
|
|
48566
|
-
this.session.initTracing({
|
|
48720
|
+
span = this.session.initTracing({
|
|
48567
48721
|
runId,
|
|
48568
|
-
inputs
|
|
48722
|
+
agentState: inputs
|
|
48723
|
+
});
|
|
48724
|
+
} else {
|
|
48725
|
+
span = this.session.createOperationSpan({
|
|
48726
|
+
parent: this.resolveParentSpan(parentRunId)
|
|
48569
48727
|
});
|
|
48570
48728
|
}
|
|
48729
|
+
this.spansByRunId.set(runId, span);
|
|
48571
48730
|
}
|
|
48572
48731
|
handleChainEnd(_outputs, runId, _parentRunId, _tags, _kwargs) {
|
|
48573
48732
|
if (this.session.rootRunId === runId) {
|
|
48733
|
+
this.spansByRunId.delete(runId);
|
|
48734
|
+
for (const span of this.spansByRunId.values()) {
|
|
48735
|
+
span.end();
|
|
48736
|
+
}
|
|
48737
|
+
this.spansByRunId.clear();
|
|
48738
|
+
this.llmCallSpanIdByToolCallId.clear();
|
|
48574
48739
|
this.session.endTracing();
|
|
48740
|
+
return;
|
|
48575
48741
|
}
|
|
48742
|
+
this.endSpan(runId);
|
|
48743
|
+
}
|
|
48744
|
+
handleChatModelStart(_llm, messages, runId, parentRunId) {
|
|
48745
|
+
const span = this.openLlmCallSpan(runId, parentRunId);
|
|
48746
|
+
const promptsJson = this.safeJsonStringify(this.getPromptMessages(messages), "chat prompt messages");
|
|
48747
|
+
if (promptsJson !== null) {
|
|
48748
|
+
span.setAttributes({ promptsJson });
|
|
48749
|
+
}
|
|
48750
|
+
}
|
|
48751
|
+
handleLLMStart(_llm, prompts, runId, parentRunId) {
|
|
48752
|
+
const span = this.openLlmCallSpan(runId, parentRunId);
|
|
48753
|
+
const promptsJson = this.safeJsonStringify(prompts, "LLM prompts");
|
|
48754
|
+
if (promptsJson !== null) {
|
|
48755
|
+
span.setAttributes({ promptsJson });
|
|
48756
|
+
}
|
|
48757
|
+
}
|
|
48758
|
+
handleLLMEnd(output, runId) {
|
|
48759
|
+
this.finalizeLlmCall(output, runId, null);
|
|
48760
|
+
}
|
|
48761
|
+
handleLLMError(err, runId) {
|
|
48762
|
+
this.finalizeLlmCall(null, runId, err);
|
|
48576
48763
|
}
|
|
48577
48764
|
async handleToolStart(tool, input, runId, parentRunId, tags, metadata, runName) {
|
|
48578
48765
|
const toolName = runName;
|
|
@@ -48591,18 +48778,20 @@ class FriskCallbackHandler extends BaseCallbackHandler {
|
|
|
48591
48778
|
}
|
|
48592
48779
|
const span = await this.session.createToolCallSpan({
|
|
48593
48780
|
name: toolName,
|
|
48594
|
-
args: parsedToolArgs
|
|
48781
|
+
args: parsedToolArgs,
|
|
48782
|
+
parent: this.resolveParentSpan(parentRunId)
|
|
48595
48783
|
});
|
|
48596
48784
|
this.spansByRunId.set(runId, span);
|
|
48597
48785
|
}
|
|
48598
48786
|
async handleToolEnd(output, runId, parentRunId, tags) {
|
|
48599
48787
|
const span = this.spansByRunId.get(runId);
|
|
48600
|
-
if (!span) {
|
|
48788
|
+
if (!(span instanceof ToolCallObservationSpan)) {
|
|
48601
48789
|
captureError(new Error("Langchain invoked handleToolEnd but no span was found for the given runId. This tool call won't be included in Frisk telemetry data."), this.logger);
|
|
48602
48790
|
return;
|
|
48603
48791
|
}
|
|
48604
48792
|
const toolCallId = output.tool_call_id;
|
|
48605
48793
|
const status = output.status;
|
|
48794
|
+
this.stampLlmCallSpanId(span, toolCallId);
|
|
48606
48795
|
this.closeToolCallSpan({
|
|
48607
48796
|
toolCallId,
|
|
48608
48797
|
span,
|
|
@@ -48613,7 +48802,7 @@ class FriskCallbackHandler extends BaseCallbackHandler {
|
|
|
48613
48802
|
}
|
|
48614
48803
|
async handleToolError(err, runId, parentRunId, tags) {
|
|
48615
48804
|
const span = this.spansByRunId.get(runId);
|
|
48616
|
-
if (!span) {
|
|
48805
|
+
if (!(span instanceof ToolCallObservationSpan)) {
|
|
48617
48806
|
captureError(new Error("Langchain invoked handleToolError but no span was found for the given runId. This tool call won't be included in Frisk telemetry data."), this.logger);
|
|
48618
48807
|
return;
|
|
48619
48808
|
}
|
|
@@ -48625,6 +48814,144 @@ class FriskCallbackHandler extends BaseCallbackHandler {
|
|
|
48625
48814
|
});
|
|
48626
48815
|
this.spansByRunId.delete(runId);
|
|
48627
48816
|
}
|
|
48817
|
+
resolveParentSpan(parentRunId) {
|
|
48818
|
+
if (parentRunId === undefined) {
|
|
48819
|
+
return null;
|
|
48820
|
+
}
|
|
48821
|
+
return this.spansByRunId.get(parentRunId) ?? null;
|
|
48822
|
+
}
|
|
48823
|
+
openLlmCallSpan(runId, parentRunId) {
|
|
48824
|
+
const existing = this.spansByRunId.get(runId);
|
|
48825
|
+
if (existing instanceof LlmCallSpan) {
|
|
48826
|
+
return existing;
|
|
48827
|
+
}
|
|
48828
|
+
const span = this.session.createLlmCallSpan({
|
|
48829
|
+
parent: this.resolveParentSpan(parentRunId)
|
|
48830
|
+
});
|
|
48831
|
+
this.spansByRunId.set(runId, span);
|
|
48832
|
+
return span;
|
|
48833
|
+
}
|
|
48834
|
+
safeJsonStringify(value, what) {
|
|
48835
|
+
try {
|
|
48836
|
+
return JSON.stringify(value);
|
|
48837
|
+
} catch (e) {
|
|
48838
|
+
captureError(new Error(`Failed to serialize ${what} for Frisk telemetry`, {
|
|
48839
|
+
cause: e
|
|
48840
|
+
}), this.logger);
|
|
48841
|
+
return null;
|
|
48842
|
+
}
|
|
48843
|
+
}
|
|
48844
|
+
getPromptMessages(messages) {
|
|
48845
|
+
const lastBatch = messages[messages.length - 1];
|
|
48846
|
+
if (!lastBatch || lastBatch.length === 0) {
|
|
48847
|
+
return [];
|
|
48848
|
+
}
|
|
48849
|
+
const collected = [];
|
|
48850
|
+
for (let i = lastBatch.length - 1;i >= 0; i--) {
|
|
48851
|
+
const message = lastBatch[i];
|
|
48852
|
+
const type = message.getType();
|
|
48853
|
+
if (type === "ai") {
|
|
48854
|
+
break;
|
|
48855
|
+
}
|
|
48856
|
+
const entry = { type, content: message.content };
|
|
48857
|
+
if (type === "tool") {
|
|
48858
|
+
const toolMessage = message;
|
|
48859
|
+
entry.metadata = {
|
|
48860
|
+
tool_name: toolMessage.name ?? null,
|
|
48861
|
+
tool_call_id: toolMessage.tool_call_id ?? null
|
|
48862
|
+
};
|
|
48863
|
+
}
|
|
48864
|
+
collected.push(entry);
|
|
48865
|
+
}
|
|
48866
|
+
collected.reverse();
|
|
48867
|
+
return collected;
|
|
48868
|
+
}
|
|
48869
|
+
finalizeLlmCall(output, runId, err) {
|
|
48870
|
+
const found = this.spansByRunId.get(runId) ?? null;
|
|
48871
|
+
const llmCallSpan = found instanceof LlmCallSpan ? found : null;
|
|
48872
|
+
const generations = output?.generations ?? [];
|
|
48873
|
+
const responses = [];
|
|
48874
|
+
const toolCalls = [];
|
|
48875
|
+
let modelName;
|
|
48876
|
+
let modelProvider;
|
|
48877
|
+
let inputTokens = 0;
|
|
48878
|
+
let outputTokens = 0;
|
|
48879
|
+
let totalTokens = 0;
|
|
48880
|
+
let hasUsage = false;
|
|
48881
|
+
for (const generationList of generations) {
|
|
48882
|
+
for (const generation of generationList) {
|
|
48883
|
+
const message = generation.message;
|
|
48884
|
+
const generationInfo = generation.generationInfo ?? {};
|
|
48885
|
+
const responseMetadata = message?.response_metadata ?? {};
|
|
48886
|
+
modelName = modelName || generationInfo.model || generationInfo.model_name || responseMetadata.model;
|
|
48887
|
+
modelProvider = modelProvider || generationInfo.model_provider || responseMetadata.model_provider;
|
|
48888
|
+
if (!message || message.getType() !== "ai") {
|
|
48889
|
+
if (!message && generation.text) {
|
|
48890
|
+
responses.push({ content: generation.text });
|
|
48891
|
+
}
|
|
48892
|
+
continue;
|
|
48893
|
+
}
|
|
48894
|
+
responses.push({ content: message.content });
|
|
48895
|
+
const usage = message.usage_metadata;
|
|
48896
|
+
if (usage) {
|
|
48897
|
+
inputTokens += usage.input_tokens ?? 0;
|
|
48898
|
+
outputTokens += usage.output_tokens ?? 0;
|
|
48899
|
+
totalTokens += usage.total_tokens ?? 0;
|
|
48900
|
+
hasUsage = true;
|
|
48901
|
+
}
|
|
48902
|
+
const messageToolCalls = message.tool_calls ?? [];
|
|
48903
|
+
for (const toolCall of messageToolCalls) {
|
|
48904
|
+
const announced = { tool_name: toolCall.name };
|
|
48905
|
+
const toolCallId = toolCall.id;
|
|
48906
|
+
if (toolCallId) {
|
|
48907
|
+
announced.tool_call_id = toolCallId;
|
|
48908
|
+
}
|
|
48909
|
+
toolCalls.push(announced);
|
|
48910
|
+
if (llmCallSpan !== null && toolCallId) {
|
|
48911
|
+
this.llmCallSpanIdByToolCallId.set(toolCallId, llmCallSpan.spanId);
|
|
48912
|
+
}
|
|
48913
|
+
}
|
|
48914
|
+
}
|
|
48915
|
+
}
|
|
48916
|
+
if (hasUsage) {
|
|
48917
|
+
this.session.recordTokenUsage({ inputTokens, outputTokens, totalTokens });
|
|
48918
|
+
}
|
|
48919
|
+
if (llmCallSpan !== null) {
|
|
48920
|
+
const responsesJson = responses.length > 0 ? this.safeJsonStringify(responses, "LLM responses") : null;
|
|
48921
|
+
const toolCallsJson = toolCalls.length > 0 ? this.safeJsonStringify(toolCalls, "LLM tool calls") : null;
|
|
48922
|
+
llmCallSpan.setAttributes({
|
|
48923
|
+
modelName,
|
|
48924
|
+
modelProvider,
|
|
48925
|
+
...hasUsage ? { inputTokens, outputTokens, totalTokens } : {},
|
|
48926
|
+
...responsesJson !== null ? { responsesJson } : {},
|
|
48927
|
+
...toolCallsJson !== null ? { toolCallsJson } : {}
|
|
48928
|
+
});
|
|
48929
|
+
if (err !== null) {
|
|
48930
|
+
llmCallSpan.setAttributes({
|
|
48931
|
+
errorType: err.constructor.name,
|
|
48932
|
+
errorMessage: `${err}`
|
|
48933
|
+
});
|
|
48934
|
+
}
|
|
48935
|
+
}
|
|
48936
|
+
this.endSpan(runId);
|
|
48937
|
+
}
|
|
48938
|
+
stampLlmCallSpanId(span, toolCallId) {
|
|
48939
|
+
if (!toolCallId) {
|
|
48940
|
+
return;
|
|
48941
|
+
}
|
|
48942
|
+
const llmCallSpanId = this.llmCallSpanIdByToolCallId.get(toolCallId);
|
|
48943
|
+
if (llmCallSpanId !== undefined) {
|
|
48944
|
+
span.setAttributes({ llmCallSpanId });
|
|
48945
|
+
}
|
|
48946
|
+
this.llmCallSpanIdByToolCallId.delete(toolCallId);
|
|
48947
|
+
}
|
|
48948
|
+
endSpan(runId) {
|
|
48949
|
+
const span = this.spansByRunId.get(runId);
|
|
48950
|
+
if (span !== undefined) {
|
|
48951
|
+
span.end();
|
|
48952
|
+
this.spansByRunId.delete(runId);
|
|
48953
|
+
}
|
|
48954
|
+
}
|
|
48628
48955
|
closeToolCallSpan({
|
|
48629
48956
|
toolCallId,
|
|
48630
48957
|
span,
|
|
@@ -48679,26 +49006,52 @@ function combineRedactOptions(...options) {
|
|
|
48679
49006
|
}
|
|
48680
49007
|
return false;
|
|
48681
49008
|
}
|
|
48682
|
-
function
|
|
49009
|
+
function deleteDotPath(root, path) {
|
|
49010
|
+
const parts = path.split(".").filter((p) => p.length > 0);
|
|
49011
|
+
if (parts.length === 0)
|
|
49012
|
+
return false;
|
|
49013
|
+
let cur = root;
|
|
49014
|
+
for (const key of parts.slice(0, -1)) {
|
|
49015
|
+
if (cur === null || typeof cur !== "object" || Array.isArray(cur))
|
|
49016
|
+
return false;
|
|
49017
|
+
if (!(key in cur))
|
|
49018
|
+
return false;
|
|
49019
|
+
cur = cur[key];
|
|
49020
|
+
}
|
|
49021
|
+
if (cur === null || typeof cur !== "object" || Array.isArray(cur))
|
|
49022
|
+
return false;
|
|
49023
|
+
const last = parts[parts.length - 1];
|
|
49024
|
+
if (!(last in cur))
|
|
49025
|
+
return false;
|
|
49026
|
+
delete cur[last];
|
|
49027
|
+
return true;
|
|
49028
|
+
}
|
|
49029
|
+
function deepClone(obj) {
|
|
49030
|
+
return JSON.parse(JSON.stringify(obj));
|
|
49031
|
+
}
|
|
49032
|
+
function redactObject(data, redactOption) {
|
|
48683
49033
|
if (redactOption === undefined || redactOption === false) {
|
|
48684
49034
|
return { value: data, redactedPaths: [] };
|
|
48685
49035
|
}
|
|
48686
|
-
const redactedPaths = [];
|
|
48687
|
-
const result = { ...data };
|
|
48688
49036
|
if (redactOption === true) {
|
|
48689
|
-
|
|
48690
|
-
|
|
48691
|
-
|
|
48692
|
-
}
|
|
48693
|
-
}
|
|
48694
|
-
|
|
48695
|
-
|
|
48696
|
-
|
|
48697
|
-
|
|
48698
|
-
|
|
49037
|
+
return { value: {}, redactedPaths: ["*"] };
|
|
49038
|
+
}
|
|
49039
|
+
if (!Array.isArray(redactOption) || redactOption.length === 0) {
|
|
49040
|
+
return { value: data, redactedPaths: [] };
|
|
49041
|
+
}
|
|
49042
|
+
const out = deepClone(data);
|
|
49043
|
+
const hits = [];
|
|
49044
|
+
const seen = new Set;
|
|
49045
|
+
for (const rawPath of redactOption) {
|
|
49046
|
+
const path = rawPath.trim();
|
|
49047
|
+
if (path.length === 0)
|
|
49048
|
+
continue;
|
|
49049
|
+
if (deleteDotPath(out, path) && !seen.has(path)) {
|
|
49050
|
+
seen.add(path);
|
|
49051
|
+
hits.push(path);
|
|
48699
49052
|
}
|
|
48700
49053
|
}
|
|
48701
|
-
return { value:
|
|
49054
|
+
return { value: out, redactedPaths: hits };
|
|
48702
49055
|
}
|
|
48703
49056
|
// src/framework-adapter/base-framework-adapter.ts
|
|
48704
49057
|
class BaseFrameworkAdapter {
|
|
@@ -48725,10 +49078,10 @@ class BaseFrameworkAdapter {
|
|
|
48725
49078
|
};
|
|
48726
49079
|
}
|
|
48727
49080
|
toolArgsToDict(toolArgs, options) {
|
|
48728
|
-
return
|
|
49081
|
+
return redactObject(toolArgs, options?.redact);
|
|
48729
49082
|
}
|
|
48730
49083
|
agentStateToDict(agentState, options) {
|
|
48731
|
-
return
|
|
49084
|
+
return redactObject(agentState, options?.redact);
|
|
48732
49085
|
}
|
|
48733
49086
|
normalizeToolCall(toolCall) {
|
|
48734
49087
|
return {
|
|
@@ -48749,22 +49102,6 @@ class BaseFrameworkAdapter {
|
|
|
48749
49102
|
var DefaultWrapToolOptions = {
|
|
48750
49103
|
captureReasoning: true
|
|
48751
49104
|
};
|
|
48752
|
-
|
|
48753
|
-
// src/native-bindings/index.ts
|
|
48754
|
-
import { createRequire as createRequire2 } from "module";
|
|
48755
|
-
import { dirname, resolve } from "path";
|
|
48756
|
-
var require2 = createRequire2(import.meta.url);
|
|
48757
|
-
function resolveNativePath() {
|
|
48758
|
-
const injected = process.env.FRISk_NATIVE_BINDINGS_PATH;
|
|
48759
|
-
if (injected)
|
|
48760
|
-
return injected;
|
|
48761
|
-
const pkgJsonPath = require2.resolve("@friskai/frisk-js/package.json");
|
|
48762
|
-
const pkgRoot = dirname(pkgJsonPath);
|
|
48763
|
-
return resolve(pkgRoot, "native/index.cjs");
|
|
48764
|
-
}
|
|
48765
|
-
var nativeBindings = require2(resolveNativePath());
|
|
48766
|
-
var FriskHandle = nativeBindings.FriskHandle;
|
|
48767
|
-
var redactDictionary = nativeBindings.redactDictionary;
|
|
48768
49105
|
// src/telemetry/tracing-manager.ts
|
|
48769
49106
|
var import_grpc_js = __toESM(require_src4(), 1);
|
|
48770
49107
|
var import_exporter_trace_otlp_grpc = __toESM(require_src12(), 1);
|
|
@@ -49040,6 +49377,14 @@ class AccessTokenProvider {
|
|
|
49040
49377
|
}
|
|
49041
49378
|
}
|
|
49042
49379
|
|
|
49380
|
+
// src/core/redaction-options.ts
|
|
49381
|
+
function resolveRedactionOptions(options) {
|
|
49382
|
+
return {
|
|
49383
|
+
redactToolArgs: options?.redactToolArgs ?? false,
|
|
49384
|
+
redactAgentState: options?.redactAgentState ?? false
|
|
49385
|
+
};
|
|
49386
|
+
}
|
|
49387
|
+
|
|
49043
49388
|
// src/core/sdk-attributes/detect-runtime.ts
|
|
49044
49389
|
function detectRuntime() {
|
|
49045
49390
|
const g = globalThis;
|
|
@@ -49075,12 +49420,12 @@ function detectRuntime() {
|
|
|
49075
49420
|
|
|
49076
49421
|
// src/core/sdk-attributes/read-sdk-meta.ts
|
|
49077
49422
|
import { existsSync, readFileSync } from "node:fs";
|
|
49078
|
-
import { dirname
|
|
49423
|
+
import { dirname, join } from "node:path";
|
|
49079
49424
|
import { fileURLToPath } from "node:url";
|
|
49080
49425
|
|
|
49081
49426
|
// src/generated/sdk-meta.ts
|
|
49082
49427
|
var SDK_NAME = "@friskai/frisk-js";
|
|
49083
|
-
var SDK_VERSION = "0.
|
|
49428
|
+
var SDK_VERSION = "0.3.1";
|
|
49084
49429
|
|
|
49085
49430
|
// src/core/sdk-attributes/read-sdk-meta.ts
|
|
49086
49431
|
function getSdkMeta() {
|
|
@@ -49114,7 +49459,7 @@ function findNearestPackageJson(startDir) {
|
|
|
49114
49459
|
if (existsSync(candidate)) {
|
|
49115
49460
|
return candidate;
|
|
49116
49461
|
}
|
|
49117
|
-
const parent =
|
|
49462
|
+
const parent = dirname(dir);
|
|
49118
49463
|
if (parent === dir) {
|
|
49119
49464
|
return null;
|
|
49120
49465
|
}
|
|
@@ -49123,7 +49468,7 @@ function findNearestPackageJson(startDir) {
|
|
|
49123
49468
|
}
|
|
49124
49469
|
function tryReadPackageJson() {
|
|
49125
49470
|
try {
|
|
49126
|
-
const here =
|
|
49471
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
49127
49472
|
const pkgPath = findNearestPackageJson(here);
|
|
49128
49473
|
if (!pkgPath)
|
|
49129
49474
|
return null;
|
|
@@ -49491,6 +49836,9 @@ class ToolRegistry {
|
|
|
49491
49836
|
|
|
49492
49837
|
// src/core/frisk.ts
|
|
49493
49838
|
class Frisk {
|
|
49839
|
+
get toolPoliciesAvailable() {
|
|
49840
|
+
return this.toolPolicies?.available ?? false;
|
|
49841
|
+
}
|
|
49494
49842
|
get redaction() {
|
|
49495
49843
|
return this._redaction;
|
|
49496
49844
|
}
|
|
@@ -49498,24 +49846,34 @@ class Frisk {
|
|
|
49498
49846
|
apiBaseUrl;
|
|
49499
49847
|
otlpEndpoint;
|
|
49500
49848
|
accessTokenProvider;
|
|
49849
|
+
get adapter() {
|
|
49850
|
+
return this._adapter;
|
|
49851
|
+
}
|
|
49852
|
+
get logLevel() {
|
|
49853
|
+
return this._logLevel;
|
|
49854
|
+
}
|
|
49855
|
+
get tracingManager() {
|
|
49856
|
+
if (!this._tracingManager) {
|
|
49857
|
+
throw new FriskNotInitializedError;
|
|
49858
|
+
}
|
|
49859
|
+
return this._tracingManager;
|
|
49860
|
+
}
|
|
49501
49861
|
initialized = false;
|
|
49502
49862
|
rootLogger;
|
|
49503
49863
|
logger;
|
|
49504
49864
|
_logLevel;
|
|
49505
49865
|
_adapter;
|
|
49506
|
-
_friskHandle = null;
|
|
49507
49866
|
_tracingManager = null;
|
|
49508
|
-
|
|
49867
|
+
toolRegistry;
|
|
49509
49868
|
sdkAttributes;
|
|
49869
|
+
extensions = [];
|
|
49870
|
+
toolPolicies = null;
|
|
49510
49871
|
wrapToolsCalled = false;
|
|
49511
49872
|
get toolRegistrationComplete() {
|
|
49512
49873
|
if (!this.wrapToolsCalled) {
|
|
49513
49874
|
return Promise.resolve(true);
|
|
49514
49875
|
}
|
|
49515
|
-
return this.
|
|
49516
|
-
}
|
|
49517
|
-
get logLevel() {
|
|
49518
|
-
return this._logLevel;
|
|
49876
|
+
return this.toolRegistry.initialized;
|
|
49519
49877
|
}
|
|
49520
49878
|
static async connect(options) {
|
|
49521
49879
|
const instance = new this(options);
|
|
@@ -49529,7 +49887,7 @@ class Frisk {
|
|
|
49529
49887
|
this._logLevel = options?.logging?.logLevel;
|
|
49530
49888
|
this.logger = deriveSdkLogger({
|
|
49531
49889
|
logger: this.rootLogger,
|
|
49532
|
-
logLevel: this.
|
|
49890
|
+
logLevel: this.logLevel
|
|
49533
49891
|
}, {
|
|
49534
49892
|
component: "FriskCore"
|
|
49535
49893
|
});
|
|
@@ -49549,10 +49907,10 @@ class Frisk {
|
|
|
49549
49907
|
baseUrl,
|
|
49550
49908
|
logging: {
|
|
49551
49909
|
logger: this.rootLogger,
|
|
49552
|
-
logLevel: this.
|
|
49910
|
+
logLevel: this.logLevel
|
|
49553
49911
|
}
|
|
49554
49912
|
});
|
|
49555
|
-
this.
|
|
49913
|
+
this.toolRegistry = new ToolRegistry({
|
|
49556
49914
|
apiBaseUrl: baseUrl,
|
|
49557
49915
|
getAccessToken: async () => this.accessTokenProvider.getAccessToken(),
|
|
49558
49916
|
logger: this.logger
|
|
@@ -49563,21 +49921,20 @@ class Frisk {
|
|
|
49563
49921
|
}
|
|
49564
49922
|
this.otlpEndpoint = otlpEndpoint;
|
|
49565
49923
|
this._redaction = resolveRedactionOptions(options?.redact);
|
|
49924
|
+
this.extensions = options?.extensions ?? [];
|
|
49925
|
+
this.mountExtensions();
|
|
49566
49926
|
}
|
|
49567
|
-
|
|
49568
|
-
|
|
49569
|
-
|
|
49927
|
+
mountExtensions() {
|
|
49928
|
+
for (const ext of this.extensions) {
|
|
49929
|
+
if ("available" in ext && "decideToolCall" in ext) {
|
|
49930
|
+
this.toolPolicies = ext;
|
|
49931
|
+
}
|
|
49570
49932
|
}
|
|
49571
|
-
return this._friskHandle;
|
|
49572
49933
|
}
|
|
49573
|
-
|
|
49574
|
-
|
|
49575
|
-
|
|
49576
|
-
get tracingManager() {
|
|
49577
|
-
if (!this._tracingManager) {
|
|
49578
|
-
throw new FriskNotInitializedError;
|
|
49934
|
+
async initializeExtensions() {
|
|
49935
|
+
for (const ext of this.extensions) {
|
|
49936
|
+
await ext.initialize(this);
|
|
49579
49937
|
}
|
|
49580
|
-
return this._tracingManager;
|
|
49581
49938
|
}
|
|
49582
49939
|
async connect() {
|
|
49583
49940
|
if (!this.initialized) {
|
|
@@ -49591,20 +49948,20 @@ class Frisk {
|
|
|
49591
49948
|
tracerName: TRACER_NAME,
|
|
49592
49949
|
tracerVersion: TRACER_VERSION
|
|
49593
49950
|
});
|
|
49594
|
-
this._friskHandle = new FriskHandle(currentToken, this.apiBaseUrl, this.otlpEndpoint);
|
|
49595
49951
|
this.accessTokenProvider.addCallback((newToken) => this.updateAccessToken(newToken));
|
|
49596
49952
|
this.accessTokenProvider.startBackgroundRefresh();
|
|
49597
49953
|
this.initialized = true;
|
|
49954
|
+
await this.initializeExtensions();
|
|
49598
49955
|
}
|
|
49599
49956
|
}
|
|
49600
49957
|
session(metadata) {
|
|
49601
49958
|
const session = new FriskSession({
|
|
49602
49959
|
frisk: this,
|
|
49603
|
-
redact: this.
|
|
49960
|
+
redact: this.redaction,
|
|
49604
49961
|
tracer: this.tracingManager.getTracer(),
|
|
49605
49962
|
logging: {
|
|
49606
49963
|
logger: this.rootLogger,
|
|
49607
|
-
logLevel: this.
|
|
49964
|
+
logLevel: this.logLevel
|
|
49608
49965
|
}
|
|
49609
49966
|
});
|
|
49610
49967
|
const registry2 = SessionRegistry.getInstance();
|
|
@@ -49612,20 +49969,20 @@ class Frisk {
|
|
|
49612
49969
|
return session;
|
|
49613
49970
|
}
|
|
49614
49971
|
normalizeToolCall(toolCall) {
|
|
49615
|
-
return this.
|
|
49972
|
+
return this.adapter.normalizeToolCall(toolCall);
|
|
49616
49973
|
}
|
|
49617
49974
|
wrapTools(tools, options = DefaultWrapToolOptions) {
|
|
49618
49975
|
this.wrapToolsCalled = true;
|
|
49619
49976
|
const toolList = [...tools];
|
|
49620
|
-
const registerToolProperties = toolList.map((tool) => this.
|
|
49977
|
+
const registerToolProperties = toolList.map((tool) => this.adapter.extractRegisterToolProperties?.(tool)).filter((properties) => properties !== null && properties !== undefined);
|
|
49621
49978
|
if (registerToolProperties.length > 0) {
|
|
49622
|
-
this.
|
|
49979
|
+
this.toolRegistry.registerTools({
|
|
49623
49980
|
tools: registerToolProperties,
|
|
49624
49981
|
sdkAttributes: this.sdkAttributes
|
|
49625
49982
|
});
|
|
49626
49983
|
}
|
|
49627
|
-
if (this.
|
|
49628
|
-
return this.
|
|
49984
|
+
if (this.adapter.wrapTools) {
|
|
49985
|
+
return this.adapter.wrapTools(toolList, options);
|
|
49629
49986
|
}
|
|
49630
49987
|
return toolList;
|
|
49631
49988
|
}
|
|
@@ -49637,8 +49994,8 @@ class Frisk {
|
|
|
49637
49994
|
};
|
|
49638
49995
|
}
|
|
49639
49996
|
wrapTool(tool, options = DefaultWrapToolOptions) {
|
|
49640
|
-
if (this.
|
|
49641
|
-
return this.
|
|
49997
|
+
if (this.adapter.wrapTool) {
|
|
49998
|
+
return this.adapter.wrapTool(tool, options);
|
|
49642
49999
|
}
|
|
49643
50000
|
return tool;
|
|
49644
50001
|
}
|
|
@@ -49647,30 +50004,38 @@ class Frisk {
|
|
|
49647
50004
|
return registry2.get(sessionId);
|
|
49648
50005
|
}
|
|
49649
50006
|
updateAccessToken(authToken) {
|
|
49650
|
-
this.
|
|
50007
|
+
this.toolPolicies?.updateAccessToken(authToken);
|
|
49651
50008
|
this.tracingManager.updateAuthToken(authToken);
|
|
49652
50009
|
}
|
|
49653
50010
|
getRegisteredTool(toolName) {
|
|
49654
|
-
return this.
|
|
50011
|
+
return this.toolRegistry.getRegisteredTool(toolName);
|
|
49655
50012
|
}
|
|
49656
50013
|
decideToolCall({
|
|
49657
50014
|
toolCall,
|
|
49658
50015
|
agentState,
|
|
49659
50016
|
traceContextCarrier
|
|
49660
50017
|
}) {
|
|
49661
|
-
|
|
49662
|
-
|
|
49663
|
-
|
|
49664
|
-
const
|
|
49665
|
-
const
|
|
49666
|
-
const
|
|
49667
|
-
|
|
49668
|
-
|
|
49669
|
-
|
|
49670
|
-
|
|
49671
|
-
|
|
49672
|
-
|
|
49673
|
-
|
|
50018
|
+
if (!this.toolPolicies) {
|
|
50019
|
+
throw new MissingToolPoliciesExtensionError;
|
|
50020
|
+
}
|
|
50021
|
+
const toolArgsJson = toolCall.args ? JSON.stringify(toolCall.args) : null;
|
|
50022
|
+
const agentStateJson = agentState ? JSON.stringify(agentState) : null;
|
|
50023
|
+
const redactedArgs = toolCall.args ? redactObject(toolCall.args, this.redaction.redactToolArgs) : { value: {}, redactedPaths: [] };
|
|
50024
|
+
const toolArgsRedactedJson = toolCall.args ? JSON.stringify(redactedArgs.value) : null;
|
|
50025
|
+
const toolArgsRedactedPathsJson = JSON.stringify(redactedArgs.redactedPaths);
|
|
50026
|
+
const redactedState = agentState ? redactObject(agentState, this.redaction.redactAgentState) : { value: {}, redactedPaths: [] };
|
|
50027
|
+
const agentStateRedactedJson = agentState ? JSON.stringify(redactedState.value) : null;
|
|
50028
|
+
const agentStateRedactedPathsJson = JSON.stringify(redactedState.redactedPaths);
|
|
50029
|
+
return this.toolPolicies.decideToolCall({
|
|
50030
|
+
toolCall,
|
|
50031
|
+
toolArgsJson,
|
|
50032
|
+
toolArgsRedactedJson,
|
|
50033
|
+
toolArgsRedactedPathsJson,
|
|
50034
|
+
agentStateJson,
|
|
50035
|
+
agentStateRedactedJson,
|
|
50036
|
+
agentStateRedactedPathsJson,
|
|
50037
|
+
traceContextCarrier
|
|
50038
|
+
});
|
|
49674
50039
|
}
|
|
49675
50040
|
async getOrCreateToolApprovalRequest({
|
|
49676
50041
|
toolCallId,
|
|
@@ -49718,7 +50083,9 @@ class Frisk {
|
|
|
49718
50083
|
if (this.tracingManager) {
|
|
49719
50084
|
await this.tracingManager.shutdown();
|
|
49720
50085
|
}
|
|
49721
|
-
this.
|
|
50086
|
+
for (const ext of this.extensions) {
|
|
50087
|
+
ext.shutdown();
|
|
50088
|
+
}
|
|
49722
50089
|
}
|
|
49723
50090
|
}
|
|
49724
50091
|
|
|
@@ -49778,7 +50145,10 @@ class FriskToolMiddleware {
|
|
|
49778
50145
|
this.logger = deriveSdkLogger(options?.logging, {
|
|
49779
50146
|
component: "FriskToolMiddleware"
|
|
49780
50147
|
});
|
|
49781
|
-
this.toolPoliciesEnabled = options?.controls?.toolPolicies
|
|
50148
|
+
this.toolPoliciesEnabled = options?.controls?.toolPolicies === true;
|
|
50149
|
+
if (this.toolPoliciesEnabled && !frisk.toolPoliciesAvailable) {
|
|
50150
|
+
throw new MissingToolPoliciesExtensionError;
|
|
50151
|
+
}
|
|
49782
50152
|
}
|
|
49783
50153
|
get frisk() {
|
|
49784
50154
|
return this._frisk;
|
|
@@ -50039,14 +50409,14 @@ function createFriskToolCallId() {
|
|
|
50039
50409
|
}
|
|
50040
50410
|
|
|
50041
50411
|
// src/adapters/langchain/langchain-framework-adapter/get-langchain-version.ts
|
|
50042
|
-
import { createRequire as
|
|
50412
|
+
import { createRequire as createRequire2 } from "module";
|
|
50043
50413
|
var langchainVersionSet = false;
|
|
50044
50414
|
var langchainVersion = null;
|
|
50045
50415
|
function tryGetLangchainVersion() {
|
|
50046
50416
|
if (!langchainVersionSet) {
|
|
50047
50417
|
try {
|
|
50048
|
-
const
|
|
50049
|
-
const pkg =
|
|
50418
|
+
const require2 = createRequire2(import.meta.url);
|
|
50419
|
+
const pkg = require2("langchain/package.json");
|
|
50050
50420
|
langchainVersion = pkg.version ?? null;
|
|
50051
50421
|
} catch {
|
|
50052
50422
|
langchainVersion = null;
|
|
@@ -50147,11 +50517,11 @@ class LangchainFrameworkAdapter {
|
|
|
50147
50517
|
};
|
|
50148
50518
|
}
|
|
50149
50519
|
toolArgsToDict(toolArgs, options) {
|
|
50150
|
-
return
|
|
50520
|
+
return redactObject(toolArgs, options?.redact);
|
|
50151
50521
|
}
|
|
50152
50522
|
agentStateToDict(agentState, options) {
|
|
50153
50523
|
const combinedRedact = combineRedactOptions(EXCLUDED_STATE_KEYS, options?.redact);
|
|
50154
|
-
return
|
|
50524
|
+
return redactObject(agentState, combinedRedact);
|
|
50155
50525
|
}
|
|
50156
50526
|
normalizeToolCall(toolCall) {
|
|
50157
50527
|
return {
|
|
@@ -50218,7 +50588,7 @@ var FRISK_CONTEXT_SCHEMA = object({
|
|
|
50218
50588
|
[FRISK_SESSION_ID_KEY]: string2().optional()
|
|
50219
50589
|
});
|
|
50220
50590
|
var DefaultFriskGuardControls = {
|
|
50221
|
-
toolPolicies:
|
|
50591
|
+
toolPolicies: false
|
|
50222
50592
|
};
|
|
50223
50593
|
|
|
50224
50594
|
class FriskLangchain extends Frisk {
|
|
@@ -50279,5 +50649,5 @@ export {
|
|
|
50279
50649
|
FRISK_SESSION_ID_KEY
|
|
50280
50650
|
};
|
|
50281
50651
|
|
|
50282
|
-
//# debugId=
|
|
50652
|
+
//# debugId=B3DA4933179DBD8B64756E2164756E21
|
|
50283
50653
|
//# sourceMappingURL=index.js.map
|