@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
package/dist/index.js
CHANGED
|
@@ -1141,7 +1141,7 @@ var require_call_credentials = __commonJS((exports) => {
|
|
|
1141
1141
|
if (isCurrentOauth2Client(googleCredentials)) {
|
|
1142
1142
|
getHeaders = googleCredentials.getRequestHeaders(options.service_url);
|
|
1143
1143
|
} else {
|
|
1144
|
-
getHeaders = new Promise((
|
|
1144
|
+
getHeaders = new Promise((resolve, reject) => {
|
|
1145
1145
|
googleCredentials.getRequestMetadata(options.service_url, (err, headers) => {
|
|
1146
1146
|
if (err) {
|
|
1147
1147
|
reject(err);
|
|
@@ -1151,7 +1151,7 @@ var require_call_credentials = __commonJS((exports) => {
|
|
|
1151
1151
|
reject(new Error("Headers not set by metadata plugin"));
|
|
1152
1152
|
return;
|
|
1153
1153
|
}
|
|
1154
|
-
|
|
1154
|
+
resolve(headers);
|
|
1155
1155
|
});
|
|
1156
1156
|
});
|
|
1157
1157
|
}
|
|
@@ -1206,10 +1206,10 @@ var require_call_credentials = __commonJS((exports) => {
|
|
|
1206
1206
|
this.metadataGenerator = metadataGenerator;
|
|
1207
1207
|
}
|
|
1208
1208
|
generateMetadata(options) {
|
|
1209
|
-
return new Promise((
|
|
1209
|
+
return new Promise((resolve, reject) => {
|
|
1210
1210
|
this.metadataGenerator(options, (err, metadata) => {
|
|
1211
1211
|
if (metadata !== undefined) {
|
|
1212
|
-
|
|
1212
|
+
resolve(metadata);
|
|
1213
1213
|
} else {
|
|
1214
1214
|
reject(err);
|
|
1215
1215
|
}
|
|
@@ -1531,14 +1531,14 @@ var require_channel_credentials = __commonJS((exports) => {
|
|
|
1531
1531
|
}
|
|
1532
1532
|
connect(socket) {
|
|
1533
1533
|
const tlsConnectOptions = Object.assign({ socket }, this.connectionOptions);
|
|
1534
|
-
return new Promise((
|
|
1534
|
+
return new Promise((resolve, reject) => {
|
|
1535
1535
|
const tlsSocket = (0, tls_1.connect)(tlsConnectOptions, () => {
|
|
1536
1536
|
var _a;
|
|
1537
1537
|
if (((_a = this.connectionOptions.rejectUnauthorized) !== null && _a !== undefined ? _a : true) && !tlsSocket.authorized) {
|
|
1538
1538
|
reject(tlsSocket.authorizationError);
|
|
1539
1539
|
return;
|
|
1540
1540
|
}
|
|
1541
|
-
|
|
1541
|
+
resolve({
|
|
1542
1542
|
socket: tlsSocket,
|
|
1543
1543
|
secure: true
|
|
1544
1544
|
});
|
|
@@ -1658,8 +1658,8 @@ var require_channel_credentials = __commonJS((exports) => {
|
|
|
1658
1658
|
if (this.hasReceivedUpdates()) {
|
|
1659
1659
|
return Promise.resolve(this.getLatestSecureContext());
|
|
1660
1660
|
} else {
|
|
1661
|
-
return new Promise((
|
|
1662
|
-
this.secureContextWatchers.push(
|
|
1661
|
+
return new Promise((resolve) => {
|
|
1662
|
+
this.secureContextWatchers.push(resolve);
|
|
1663
1663
|
});
|
|
1664
1664
|
}
|
|
1665
1665
|
}
|
|
@@ -1692,7 +1692,7 @@ var require_channel_credentials = __commonJS((exports) => {
|
|
|
1692
1692
|
this.callCredentials = callCredentials;
|
|
1693
1693
|
}
|
|
1694
1694
|
connect(socket) {
|
|
1695
|
-
return new Promise((
|
|
1695
|
+
return new Promise((resolve, reject) => {
|
|
1696
1696
|
const secureContext = this.parent.getLatestSecureContext();
|
|
1697
1697
|
if (!secureContext) {
|
|
1698
1698
|
reject(new Error("Failed to load credentials"));
|
|
@@ -1717,7 +1717,7 @@ var require_channel_credentials = __commonJS((exports) => {
|
|
|
1717
1717
|
reject(tlsSocket.authorizationError);
|
|
1718
1718
|
return;
|
|
1719
1719
|
}
|
|
1720
|
-
|
|
1720
|
+
resolve({
|
|
1721
1721
|
socket: tlsSocket,
|
|
1722
1722
|
secure: true
|
|
1723
1723
|
});
|
|
@@ -5245,7 +5245,7 @@ var require_aspromise = __commonJS((exports, module) => {
|
|
|
5245
5245
|
var params = new Array(arguments.length - 1), offset = 0, index = 2, pending = true;
|
|
5246
5246
|
while (index < arguments.length)
|
|
5247
5247
|
params[offset++] = arguments[index++];
|
|
5248
|
-
return new Promise(function executor(
|
|
5248
|
+
return new Promise(function executor(resolve, reject) {
|
|
5249
5249
|
params[offset] = function callback(err) {
|
|
5250
5250
|
if (pending) {
|
|
5251
5251
|
pending = false;
|
|
@@ -5255,7 +5255,7 @@ var require_aspromise = __commonJS((exports, module) => {
|
|
|
5255
5255
|
var params2 = new Array(arguments.length - 1), offset2 = 0;
|
|
5256
5256
|
while (offset2 < params2.length)
|
|
5257
5257
|
params2[offset2++] = arguments[offset2];
|
|
5258
|
-
|
|
5258
|
+
resolve.apply(null, params2);
|
|
5259
5259
|
}
|
|
5260
5260
|
}
|
|
5261
5261
|
};
|
|
@@ -6643,7 +6643,7 @@ var require_path = __commonJS((exports) => {
|
|
|
6643
6643
|
}
|
|
6644
6644
|
return prefix + parts.join("/");
|
|
6645
6645
|
};
|
|
6646
|
-
path.resolve = function
|
|
6646
|
+
path.resolve = function resolve(originPath, includePath, alreadyNormalized) {
|
|
6647
6647
|
if (!alreadyNormalized)
|
|
6648
6648
|
includePath = normalize(includePath);
|
|
6649
6649
|
if (isAbsolute(includePath))
|
|
@@ -6956,7 +6956,7 @@ var require_mapfield = __commonJS((exports, module) => {
|
|
|
6956
6956
|
keepComments ? this.comment : undefined
|
|
6957
6957
|
]);
|
|
6958
6958
|
};
|
|
6959
|
-
MapField.prototype.resolve = function
|
|
6959
|
+
MapField.prototype.resolve = function resolve() {
|
|
6960
6960
|
if (this.resolved)
|
|
6961
6961
|
return this;
|
|
6962
6962
|
if (types.mapKey[this.keyType] === undefined)
|
|
@@ -7029,7 +7029,7 @@ var require_method = __commonJS((exports, module) => {
|
|
|
7029
7029
|
this.parsedOptions
|
|
7030
7030
|
]);
|
|
7031
7031
|
};
|
|
7032
|
-
Method.prototype.resolve = function
|
|
7032
|
+
Method.prototype.resolve = function resolve() {
|
|
7033
7033
|
if (this.resolved)
|
|
7034
7034
|
return this;
|
|
7035
7035
|
this.resolvedRequestType = this.parent.lookupType(this.requestType);
|
|
@@ -8429,7 +8429,7 @@ var require_field = __commonJS((exports, module) => {
|
|
|
8429
8429
|
keepComments ? this.comment : undefined
|
|
8430
8430
|
]);
|
|
8431
8431
|
};
|
|
8432
|
-
Field.prototype.resolve = function
|
|
8432
|
+
Field.prototype.resolve = function resolve() {
|
|
8433
8433
|
if (this.resolved)
|
|
8434
8434
|
return this;
|
|
8435
8435
|
if ((this.typeDefault = types.defaults[this.type]) === undefined) {
|
|
@@ -8683,7 +8683,7 @@ var require_object = __commonJS((exports, module) => {
|
|
|
8683
8683
|
this.parent = null;
|
|
8684
8684
|
this.resolved = false;
|
|
8685
8685
|
};
|
|
8686
|
-
ReflectionObject.prototype.resolve = function
|
|
8686
|
+
ReflectionObject.prototype.resolve = function resolve() {
|
|
8687
8687
|
if (this.resolved)
|
|
8688
8688
|
return this;
|
|
8689
8689
|
if (this.root instanceof Root)
|
|
@@ -14234,18 +14234,18 @@ var require_compression_filter = __commonJS((exports) => {
|
|
|
14234
14234
|
this.maxRecvMessageLength = maxRecvMessageLength;
|
|
14235
14235
|
}
|
|
14236
14236
|
compressMessage(message) {
|
|
14237
|
-
return new Promise((
|
|
14237
|
+
return new Promise((resolve, reject) => {
|
|
14238
14238
|
zlib.deflate(message, (err, output) => {
|
|
14239
14239
|
if (err) {
|
|
14240
14240
|
reject(err);
|
|
14241
14241
|
} else {
|
|
14242
|
-
|
|
14242
|
+
resolve(output);
|
|
14243
14243
|
}
|
|
14244
14244
|
});
|
|
14245
14245
|
});
|
|
14246
14246
|
}
|
|
14247
14247
|
decompressMessage(message) {
|
|
14248
|
-
return new Promise((
|
|
14248
|
+
return new Promise((resolve, reject) => {
|
|
14249
14249
|
let totalLength = 0;
|
|
14250
14250
|
const messageParts = [];
|
|
14251
14251
|
const decompresser = zlib.createInflate();
|
|
@@ -14261,7 +14261,7 @@ var require_compression_filter = __commonJS((exports) => {
|
|
|
14261
14261
|
}
|
|
14262
14262
|
});
|
|
14263
14263
|
decompresser.on("end", () => {
|
|
14264
|
-
|
|
14264
|
+
resolve(Buffer.concat(messageParts));
|
|
14265
14265
|
});
|
|
14266
14266
|
decompresser.write(message);
|
|
14267
14267
|
decompresser.end();
|
|
@@ -14275,18 +14275,18 @@ var require_compression_filter = __commonJS((exports) => {
|
|
|
14275
14275
|
this.maxRecvMessageLength = maxRecvMessageLength;
|
|
14276
14276
|
}
|
|
14277
14277
|
compressMessage(message) {
|
|
14278
|
-
return new Promise((
|
|
14278
|
+
return new Promise((resolve, reject) => {
|
|
14279
14279
|
zlib.gzip(message, (err, output) => {
|
|
14280
14280
|
if (err) {
|
|
14281
14281
|
reject(err);
|
|
14282
14282
|
} else {
|
|
14283
|
-
|
|
14283
|
+
resolve(output);
|
|
14284
14284
|
}
|
|
14285
14285
|
});
|
|
14286
14286
|
});
|
|
14287
14287
|
}
|
|
14288
14288
|
decompressMessage(message) {
|
|
14289
|
-
return new Promise((
|
|
14289
|
+
return new Promise((resolve, reject) => {
|
|
14290
14290
|
let totalLength = 0;
|
|
14291
14291
|
const messageParts = [];
|
|
14292
14292
|
const decompresser = zlib.createGunzip();
|
|
@@ -14302,7 +14302,7 @@ var require_compression_filter = __commonJS((exports) => {
|
|
|
14302
14302
|
}
|
|
14303
14303
|
});
|
|
14304
14304
|
decompresser.on("end", () => {
|
|
14305
|
-
|
|
14305
|
+
resolve(Buffer.concat(messageParts));
|
|
14306
14306
|
});
|
|
14307
14307
|
decompresser.write(message);
|
|
14308
14308
|
decompresser.end();
|
|
@@ -15556,7 +15556,7 @@ var require_http_proxy = __commonJS((exports) => {
|
|
|
15556
15556
|
options.headers = headers;
|
|
15557
15557
|
const proxyAddressString = (0, subchannel_address_1.subchannelAddressToString)(address);
|
|
15558
15558
|
trace("Using proxy " + proxyAddressString + " to connect to " + options.path);
|
|
15559
|
-
return new Promise((
|
|
15559
|
+
return new Promise((resolve, reject) => {
|
|
15560
15560
|
const request = http.request(options);
|
|
15561
15561
|
request.once("connect", (res, socket, head) => {
|
|
15562
15562
|
request.removeAllListeners();
|
|
@@ -15567,7 +15567,7 @@ var require_http_proxy = __commonJS((exports) => {
|
|
|
15567
15567
|
socket.unshift(head);
|
|
15568
15568
|
}
|
|
15569
15569
|
trace("Successfully established a plaintext connection to " + options.path + " through proxy " + proxyAddressString);
|
|
15570
|
-
|
|
15570
|
+
resolve(socket);
|
|
15571
15571
|
} else {
|
|
15572
15572
|
(0, logging_1.log)(constants_1.LogVerbosity.ERROR, "Failed to connect to " + options.path + " through proxy " + proxyAddressString + " with status " + res.statusCode);
|
|
15573
15573
|
reject();
|
|
@@ -16439,7 +16439,7 @@ var require_transport = __commonJS((exports) => {
|
|
|
16439
16439
|
if (secureConnectResult.socket.closed) {
|
|
16440
16440
|
return Promise.reject("Connection closed before starting HTTP/2 handshake");
|
|
16441
16441
|
}
|
|
16442
|
-
return new Promise((
|
|
16442
|
+
return new Promise((resolve, reject) => {
|
|
16443
16443
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
16444
16444
|
let remoteName = null;
|
|
16445
16445
|
let realTarget = this.channelTarget;
|
|
@@ -16504,7 +16504,7 @@ var require_transport = __commonJS((exports) => {
|
|
|
16504
16504
|
session.removeAllListeners();
|
|
16505
16505
|
secureConnectResult.socket.removeListener("close", closeHandler);
|
|
16506
16506
|
secureConnectResult.socket.removeListener("error", errorHandler);
|
|
16507
|
-
|
|
16507
|
+
resolve(new Http2Transport(session, address, options, remoteName));
|
|
16508
16508
|
this.session = null;
|
|
16509
16509
|
});
|
|
16510
16510
|
session.once("close", closeHandler);
|
|
@@ -16518,7 +16518,7 @@ var require_transport = __commonJS((exports) => {
|
|
|
16518
16518
|
if (proxiedSocket) {
|
|
16519
16519
|
return proxiedSocket;
|
|
16520
16520
|
} else {
|
|
16521
|
-
return new Promise((
|
|
16521
|
+
return new Promise((resolve, reject) => {
|
|
16522
16522
|
const closeCallback = () => {
|
|
16523
16523
|
reject(new Error("Socket closed"));
|
|
16524
16524
|
};
|
|
@@ -16528,7 +16528,7 @@ var require_transport = __commonJS((exports) => {
|
|
|
16528
16528
|
const socket = net.connect(address, () => {
|
|
16529
16529
|
socket.removeListener("close", closeCallback);
|
|
16530
16530
|
socket.removeListener("error", errorCallback);
|
|
16531
|
-
|
|
16531
|
+
resolve(socket);
|
|
16532
16532
|
});
|
|
16533
16533
|
socket.once("close", closeCallback);
|
|
16534
16534
|
socket.once("error", errorCallback);
|
|
@@ -19742,7 +19742,7 @@ var require_server_interceptors = __commonJS((exports) => {
|
|
|
19742
19742
|
} else {
|
|
19743
19743
|
decompresser = zlib.createGunzip();
|
|
19744
19744
|
}
|
|
19745
|
-
return new Promise((
|
|
19745
|
+
return new Promise((resolve, reject) => {
|
|
19746
19746
|
let totalLength = 0;
|
|
19747
19747
|
const messageParts = [];
|
|
19748
19748
|
decompresser.on("data", (chunk) => {
|
|
@@ -19757,7 +19757,7 @@ var require_server_interceptors = __commonJS((exports) => {
|
|
|
19757
19757
|
}
|
|
19758
19758
|
});
|
|
19759
19759
|
decompresser.on("end", () => {
|
|
19760
|
-
|
|
19760
|
+
resolve(Buffer.concat(messageParts));
|
|
19761
19761
|
});
|
|
19762
19762
|
decompresser.write(messageContents);
|
|
19763
19763
|
decompresser.end();
|
|
@@ -20350,10 +20350,10 @@ var require_server = __commonJS((exports) => {
|
|
|
20350
20350
|
bindOneAddress(address, boundPortObject) {
|
|
20351
20351
|
this.trace("Attempting to bind " + (0, subchannel_address_1.subchannelAddressToString)(address));
|
|
20352
20352
|
const http2Server = this.createHttp2Server(boundPortObject.credentials);
|
|
20353
|
-
return new Promise((
|
|
20353
|
+
return new Promise((resolve, reject) => {
|
|
20354
20354
|
const onError = (err) => {
|
|
20355
20355
|
this.trace("Failed to bind " + (0, subchannel_address_1.subchannelAddressToString)(address) + " with error " + err.message);
|
|
20356
|
-
|
|
20356
|
+
resolve({
|
|
20357
20357
|
port: "port" in address ? address.port : 1,
|
|
20358
20358
|
error: err.message
|
|
20359
20359
|
});
|
|
@@ -20381,7 +20381,7 @@ var require_server = __commonJS((exports) => {
|
|
|
20381
20381
|
});
|
|
20382
20382
|
boundPortObject.listeningServers.add(http2Server);
|
|
20383
20383
|
this.trace("Successfully bound " + (0, subchannel_address_1.subchannelAddressToString)(boundSubchannelAddress));
|
|
20384
|
-
|
|
20384
|
+
resolve({
|
|
20385
20385
|
port: "port" in boundSubchannelAddress ? boundSubchannelAddress.port : 1
|
|
20386
20386
|
});
|
|
20387
20387
|
http2Server.removeListener("error", onError);
|
|
@@ -20434,7 +20434,7 @@ var require_server = __commonJS((exports) => {
|
|
|
20434
20434
|
}
|
|
20435
20435
|
}
|
|
20436
20436
|
resolvePort(port) {
|
|
20437
|
-
return new Promise((
|
|
20437
|
+
return new Promise((resolve, reject) => {
|
|
20438
20438
|
let seenResolution = false;
|
|
20439
20439
|
const resolverListener = (endpointList, attributes, serviceConfig, resolutionNote) => {
|
|
20440
20440
|
if (seenResolution) {
|
|
@@ -20450,7 +20450,7 @@ var require_server = __commonJS((exports) => {
|
|
|
20450
20450
|
reject(new Error(`No addresses resolved for port ${port}`));
|
|
20451
20451
|
return true;
|
|
20452
20452
|
}
|
|
20453
|
-
|
|
20453
|
+
resolve(addressList);
|
|
20454
20454
|
return true;
|
|
20455
20455
|
};
|
|
20456
20456
|
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_src4();
|
|
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
|
}
|
|
@@ -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
|
}
|
|
@@ -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((error) => {
|
|
43063
43063
|
(0, core_1.globalErrorHandler)(error || 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((error) => {
|
|
43158
43158
|
clearTimeout(timeoutInterval);
|
|
43159
43159
|
state = ForceFlushState.error;
|
|
43160
|
-
|
|
43160
|
+
resolve(error);
|
|
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 errors = results.filter((result) => result !== ForceFlushState.resolved);
|
|
43167
43167
|
if (errors.length > 0) {
|
|
43168
43168
|
reject(errors);
|
|
43169
43169
|
} else {
|
|
43170
|
-
|
|
43170
|
+
resolve();
|
|
43171
43171
|
}
|
|
43172
43172
|
}).catch((error) => reject([error]));
|
|
43173
43173
|
});
|
|
@@ -43595,10 +43595,10 @@ class UnexpectedFriskServerResponseError extends Error {
|
|
|
43595
43595
|
}
|
|
43596
43596
|
}
|
|
43597
43597
|
|
|
43598
|
-
class
|
|
43599
|
-
constructor(
|
|
43600
|
-
super(
|
|
43601
|
-
this.name = "
|
|
43598
|
+
class MissingToolPoliciesExtensionError extends FriskError {
|
|
43599
|
+
constructor(options) {
|
|
43600
|
+
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);
|
|
43601
|
+
this.name = "MissingToolPoliciesExtensionError";
|
|
43602
43602
|
}
|
|
43603
43603
|
}
|
|
43604
43604
|
|
|
@@ -43940,23 +43940,6 @@ class AccessTokenProvider {
|
|
|
43940
43940
|
return this.refreshIntervalId !== null;
|
|
43941
43941
|
}
|
|
43942
43942
|
}
|
|
43943
|
-
// ../../node_modules/uuid/wrapper.mjs
|
|
43944
|
-
var import_dist = __toESM(require_dist(), 1);
|
|
43945
|
-
var v1 = import_dist.default.v1;
|
|
43946
|
-
var v1ToV6 = import_dist.default.v1ToV6;
|
|
43947
|
-
var v3 = import_dist.default.v3;
|
|
43948
|
-
var v4 = import_dist.default.v4;
|
|
43949
|
-
var v5 = import_dist.default.v5;
|
|
43950
|
-
var v6 = import_dist.default.v6;
|
|
43951
|
-
var v6ToV1 = import_dist.default.v6ToV1;
|
|
43952
|
-
var v7 = import_dist.default.v7;
|
|
43953
|
-
var NIL = import_dist.default.NIL;
|
|
43954
|
-
var MAX = import_dist.default.MAX;
|
|
43955
|
-
var version = import_dist.default.version;
|
|
43956
|
-
var validate = import_dist.default.validate;
|
|
43957
|
-
var stringify = import_dist.default.stringify;
|
|
43958
|
-
var parse = import_dist.default.parse;
|
|
43959
|
-
|
|
43960
43943
|
// src/env/index.ts
|
|
43961
43944
|
var FRISK_API_KEY = "FRISK_API_KEY";
|
|
43962
43945
|
var FRISK_BASE_URL = "FRISK_BASE_URL";
|
|
@@ -43993,27 +43976,70 @@ function combineRedactOptions(...options) {
|
|
|
43993
43976
|
}
|
|
43994
43977
|
return false;
|
|
43995
43978
|
}
|
|
43996
|
-
function
|
|
43979
|
+
function deleteDotPath(root, path) {
|
|
43980
|
+
const parts = path.split(".").filter((p) => p.length > 0);
|
|
43981
|
+
if (parts.length === 0)
|
|
43982
|
+
return false;
|
|
43983
|
+
let cur = root;
|
|
43984
|
+
for (const key of parts.slice(0, -1)) {
|
|
43985
|
+
if (cur === null || typeof cur !== "object" || Array.isArray(cur))
|
|
43986
|
+
return false;
|
|
43987
|
+
if (!(key in cur))
|
|
43988
|
+
return false;
|
|
43989
|
+
cur = cur[key];
|
|
43990
|
+
}
|
|
43991
|
+
if (cur === null || typeof cur !== "object" || Array.isArray(cur))
|
|
43992
|
+
return false;
|
|
43993
|
+
const last = parts[parts.length - 1];
|
|
43994
|
+
if (!(last in cur))
|
|
43995
|
+
return false;
|
|
43996
|
+
delete cur[last];
|
|
43997
|
+
return true;
|
|
43998
|
+
}
|
|
43999
|
+
function deepClone(obj) {
|
|
44000
|
+
return JSON.parse(JSON.stringify(obj));
|
|
44001
|
+
}
|
|
44002
|
+
function redactObject(data, redactOption) {
|
|
43997
44003
|
if (redactOption === undefined || redactOption === false) {
|
|
43998
44004
|
return { value: data, redactedPaths: [] };
|
|
43999
44005
|
}
|
|
44000
|
-
const redactedPaths = [];
|
|
44001
|
-
const result = { ...data };
|
|
44002
44006
|
if (redactOption === true) {
|
|
44003
|
-
|
|
44004
|
-
|
|
44005
|
-
|
|
44006
|
-
}
|
|
44007
|
-
}
|
|
44008
|
-
|
|
44009
|
-
|
|
44010
|
-
|
|
44011
|
-
|
|
44012
|
-
|
|
44007
|
+
return { value: {}, redactedPaths: ["*"] };
|
|
44008
|
+
}
|
|
44009
|
+
if (!Array.isArray(redactOption) || redactOption.length === 0) {
|
|
44010
|
+
return { value: data, redactedPaths: [] };
|
|
44011
|
+
}
|
|
44012
|
+
const out = deepClone(data);
|
|
44013
|
+
const hits = [];
|
|
44014
|
+
const seen = new Set;
|
|
44015
|
+
for (const rawPath of redactOption) {
|
|
44016
|
+
const path = rawPath.trim();
|
|
44017
|
+
if (path.length === 0)
|
|
44018
|
+
continue;
|
|
44019
|
+
if (deleteDotPath(out, path) && !seen.has(path)) {
|
|
44020
|
+
seen.add(path);
|
|
44021
|
+
hits.push(path);
|
|
44013
44022
|
}
|
|
44014
44023
|
}
|
|
44015
|
-
return { value:
|
|
44024
|
+
return { value: out, redactedPaths: hits };
|
|
44016
44025
|
}
|
|
44026
|
+
// ../../node_modules/uuid/wrapper.mjs
|
|
44027
|
+
var import_dist = __toESM(require_dist(), 1);
|
|
44028
|
+
var v1 = import_dist.default.v1;
|
|
44029
|
+
var v1ToV6 = import_dist.default.v1ToV6;
|
|
44030
|
+
var v3 = import_dist.default.v3;
|
|
44031
|
+
var v4 = import_dist.default.v4;
|
|
44032
|
+
var v5 = import_dist.default.v5;
|
|
44033
|
+
var v6 = import_dist.default.v6;
|
|
44034
|
+
var v6ToV1 = import_dist.default.v6ToV1;
|
|
44035
|
+
var v7 = import_dist.default.v7;
|
|
44036
|
+
var NIL = import_dist.default.NIL;
|
|
44037
|
+
var MAX = import_dist.default.MAX;
|
|
44038
|
+
var version = import_dist.default.version;
|
|
44039
|
+
var validate = import_dist.default.validate;
|
|
44040
|
+
var stringify = import_dist.default.stringify;
|
|
44041
|
+
var parse = import_dist.default.parse;
|
|
44042
|
+
|
|
44017
44043
|
// src/framework-adapter/base-framework-adapter.ts
|
|
44018
44044
|
class BaseFrameworkAdapter {
|
|
44019
44045
|
agentFramework = "none";
|
|
@@ -44039,10 +44065,10 @@ class BaseFrameworkAdapter {
|
|
|
44039
44065
|
};
|
|
44040
44066
|
}
|
|
44041
44067
|
toolArgsToDict(toolArgs, options) {
|
|
44042
|
-
return
|
|
44068
|
+
return redactObject(toolArgs, options?.redact);
|
|
44043
44069
|
}
|
|
44044
44070
|
agentStateToDict(agentState, options) {
|
|
44045
|
-
return
|
|
44071
|
+
return redactObject(agentState, options?.redact);
|
|
44046
44072
|
}
|
|
44047
44073
|
normalizeToolCall(toolCall) {
|
|
44048
44074
|
return {
|
|
@@ -44064,28 +44090,23 @@ var DefaultWrapToolOptions = {
|
|
|
44064
44090
|
captureReasoning: true
|
|
44065
44091
|
};
|
|
44066
44092
|
|
|
44067
|
-
// src/native-bindings/index.ts
|
|
44068
|
-
import { createRequire as createRequire2 } from "module";
|
|
44069
|
-
import { dirname, resolve } from "path";
|
|
44070
|
-
var require2 = createRequire2(import.meta.url);
|
|
44071
|
-
function resolveNativePath() {
|
|
44072
|
-
const injected = process.env.FRISk_NATIVE_BINDINGS_PATH;
|
|
44073
|
-
if (injected)
|
|
44074
|
-
return injected;
|
|
44075
|
-
const pkgJsonPath = require2.resolve("@friskai/frisk-js/package.json");
|
|
44076
|
-
const pkgRoot = dirname(pkgJsonPath);
|
|
44077
|
-
return resolve(pkgRoot, "native/index.cjs");
|
|
44078
|
-
}
|
|
44079
|
-
var nativeBindings = require2(resolveNativePath());
|
|
44080
|
-
var FriskHandle = nativeBindings.FriskHandle;
|
|
44081
|
-
var redactDictionary = nativeBindings.redactDictionary;
|
|
44082
|
-
|
|
44083
44093
|
// src/telemetry/constants.ts
|
|
44084
44094
|
var TRACER_NAME = "frisk_js_sdk";
|
|
44085
44095
|
var TRACER_VERSION = "0.1.0";
|
|
44086
44096
|
var SPAN_NAME_DECIDE_TOOL_CALL = "frisk.tool_call.decide";
|
|
44087
44097
|
var SPAN_NAME_OBSERVE_TOOL_CALL = "frisk.tool_call.observation";
|
|
44098
|
+
var SPAN_NAME_LLM_CALL = "frisk.llm_call";
|
|
44099
|
+
var SPAN_NAME_OPERATION = "frisk.operation";
|
|
44088
44100
|
var SPAN_NAME_FRISK_SESSION = "frisk.session";
|
|
44101
|
+
var ATTRIBUTE_NAME_LLM_CALL_SPAN_ID = "frisk.tool_call.llm_call_span_id";
|
|
44102
|
+
var ATTRIBUTE_NAME_LLM_CALL_PROMPTS_JSON = "frisk.llm_call.prompts.json";
|
|
44103
|
+
var ATTRIBUTE_NAME_LLM_CALL_RESPONSES_JSON = "frisk.llm_call.responses.json";
|
|
44104
|
+
var ATTRIBUTE_NAME_LLM_CALL_TOOL_CALLS_JSON = "frisk.llm_call.tool_calls.json";
|
|
44105
|
+
var ATTRIBUTE_NAME_MODEL_NAME = "frisk.model.name";
|
|
44106
|
+
var ATTRIBUTE_NAME_MODEL_PROVIDER = "frisk.model.provider";
|
|
44107
|
+
var ATTRIBUTE_NAME_TOKEN_USAGE_INPUT_TOKENS = "frisk.token_usage.input_tokens";
|
|
44108
|
+
var ATTRIBUTE_NAME_TOKEN_USAGE_OUTPUT_TOKENS = "frisk.token_usage.output_tokens";
|
|
44109
|
+
var ATTRIBUTE_NAME_TOKEN_USAGE_TOTAL_TOKENS = "frisk.token_usage.total_tokens";
|
|
44089
44110
|
var ATTRIBUTE_NAME_SESSION_PROMPT = "frisk.session.prompt";
|
|
44090
44111
|
var ATTRIBUTE_NAME_SESSION_ID = "frisk.session.id";
|
|
44091
44112
|
var ATTRIBUTE_NAME_REMOTE_SESSION_ID = "frisk.session.remote_id";
|
|
@@ -48449,6 +48470,18 @@ var llmReasoningZodShape = {
|
|
|
48449
48470
|
[LLM_REASONING_ARG_NAME]: string2().describe(LLM_REASONING_ARG_DESCRIPTION)
|
|
48450
48471
|
};
|
|
48451
48472
|
|
|
48473
|
+
// src/core/llm-reasoning/extractLlmReasoning.ts
|
|
48474
|
+
function extractLlmReasoning(toolArgs) {
|
|
48475
|
+
if (typeof toolArgs !== "object" || toolArgs === null || Array.isArray(toolArgs)) {
|
|
48476
|
+
return null;
|
|
48477
|
+
}
|
|
48478
|
+
const rawReasoning = toolArgs[LLM_REASONING_ARG_NAME];
|
|
48479
|
+
if (rawReasoning === null || rawReasoning === undefined) {
|
|
48480
|
+
return null;
|
|
48481
|
+
}
|
|
48482
|
+
return String(rawReasoning);
|
|
48483
|
+
}
|
|
48484
|
+
|
|
48452
48485
|
// src/core/llm-reasoning/removeLlmReasoningArg.ts
|
|
48453
48486
|
function removeLlmReasoningArg(input) {
|
|
48454
48487
|
if (!(LLM_REASONING_ARG_NAME in input)) {
|
|
@@ -48494,136 +48527,186 @@ class SessionRegistry {
|
|
|
48494
48527
|
}
|
|
48495
48528
|
}
|
|
48496
48529
|
|
|
48497
|
-
// src/core/
|
|
48530
|
+
// src/core/spans/frisk-span.ts
|
|
48498
48531
|
var import_api = __toESM(require_src4(), 1);
|
|
48499
48532
|
|
|
48500
|
-
|
|
48501
|
-
|
|
48502
|
-
|
|
48503
|
-
|
|
48504
|
-
|
|
48505
|
-
|
|
48506
|
-
}
|
|
48507
|
-
|
|
48508
|
-
// src/core/tool-call-span.ts
|
|
48509
|
-
class ToolCallSpan {
|
|
48510
|
-
adapter;
|
|
48511
|
-
toolCall;
|
|
48512
|
-
friskToolId;
|
|
48513
|
-
agentState;
|
|
48514
|
-
parent;
|
|
48515
|
-
tracer;
|
|
48516
|
-
redaction;
|
|
48517
|
-
_span = null;
|
|
48518
|
-
_traceContextCarrier = null;
|
|
48519
|
-
sessionId;
|
|
48520
|
-
friskToolVersionId;
|
|
48533
|
+
class FriskSpan {
|
|
48534
|
+
_spanName;
|
|
48535
|
+
_attributeFields;
|
|
48536
|
+
_otelSpan;
|
|
48537
|
+
_attributes = {};
|
|
48538
|
+
_ended = false;
|
|
48521
48539
|
constructor({
|
|
48522
|
-
sessionId,
|
|
48523
|
-
adapter,
|
|
48524
|
-
toolCall,
|
|
48525
|
-
friskToolId,
|
|
48526
|
-
friskToolVersionId,
|
|
48527
|
-
agentState,
|
|
48528
|
-
parent,
|
|
48529
48540
|
tracer,
|
|
48530
|
-
|
|
48541
|
+
parent,
|
|
48542
|
+
spanName,
|
|
48543
|
+
attributeFields
|
|
48531
48544
|
}) {
|
|
48532
|
-
this.
|
|
48533
|
-
this.
|
|
48534
|
-
|
|
48535
|
-
this.
|
|
48536
|
-
this.friskToolVersionId = friskToolVersionId ?? null;
|
|
48537
|
-
this.agentState = agentState;
|
|
48538
|
-
this.parent = parent;
|
|
48539
|
-
this.tracer = tracer;
|
|
48540
|
-
this.redaction = resolveRedactionOptions(redact);
|
|
48545
|
+
this._spanName = spanName;
|
|
48546
|
+
this._attributeFields = attributeFields;
|
|
48547
|
+
const parentContext = parent ? import_api.trace.setSpan(import_api.context.active(), parent.otelSpan) : import_api.context.active();
|
|
48548
|
+
this._otelSpan = tracer.startSpan(this._spanName, undefined, parentContext);
|
|
48541
48549
|
}
|
|
48542
|
-
get
|
|
48543
|
-
|
|
48544
|
-
throw new ToolCallSpanNotInitializedError;
|
|
48545
|
-
}
|
|
48546
|
-
return this._span;
|
|
48550
|
+
get otelSpan() {
|
|
48551
|
+
return this._otelSpan;
|
|
48547
48552
|
}
|
|
48548
|
-
get
|
|
48549
|
-
return this.
|
|
48553
|
+
get spanId() {
|
|
48554
|
+
return this._otelSpan.spanContext().spanId;
|
|
48550
48555
|
}
|
|
48551
|
-
|
|
48552
|
-
this.
|
|
48553
|
-
|
|
48554
|
-
|
|
48555
|
-
|
|
48556
|
-
|
|
48556
|
+
setAttribute(field, value) {
|
|
48557
|
+
this.setAttributesByField({ [field]: value });
|
|
48558
|
+
}
|
|
48559
|
+
getAttribute(field) {
|
|
48560
|
+
return this._attributes[this.constantFor(field)];
|
|
48561
|
+
}
|
|
48562
|
+
end() {
|
|
48563
|
+
if (this._ended) {
|
|
48564
|
+
return;
|
|
48557
48565
|
}
|
|
48566
|
+
this._ended = true;
|
|
48567
|
+
this._otelSpan.end();
|
|
48558
48568
|
}
|
|
48559
|
-
|
|
48560
|
-
|
|
48561
|
-
|
|
48562
|
-
|
|
48563
|
-
|
|
48564
|
-
|
|
48569
|
+
setAttributesByField(values) {
|
|
48570
|
+
for (const [field, value] of Object.entries(values)) {
|
|
48571
|
+
const constant = this.constantFor(field);
|
|
48572
|
+
if (value === null || value === undefined) {
|
|
48573
|
+
continue;
|
|
48574
|
+
}
|
|
48575
|
+
this._attributes[constant] = value;
|
|
48576
|
+
this._otelSpan.setAttribute(constant, value);
|
|
48565
48577
|
}
|
|
48566
48578
|
}
|
|
48567
|
-
|
|
48568
|
-
this.
|
|
48579
|
+
constantFor(field) {
|
|
48580
|
+
const constant = this._attributeFields[field];
|
|
48581
|
+
if (constant === undefined) {
|
|
48582
|
+
throw new Error(`Unknown attribute '${field}' for ${this.constructor.name}`);
|
|
48583
|
+
}
|
|
48584
|
+
return constant;
|
|
48569
48585
|
}
|
|
48570
|
-
|
|
48571
|
-
|
|
48586
|
+
}
|
|
48587
|
+
// src/core/spans/llm-call-span.ts
|
|
48588
|
+
var FIELDS = {
|
|
48589
|
+
sessionId: ATTRIBUTE_NAME_SESSION_ID,
|
|
48590
|
+
promptsJson: ATTRIBUTE_NAME_LLM_CALL_PROMPTS_JSON,
|
|
48591
|
+
responsesJson: ATTRIBUTE_NAME_LLM_CALL_RESPONSES_JSON,
|
|
48592
|
+
toolCallsJson: ATTRIBUTE_NAME_LLM_CALL_TOOL_CALLS_JSON,
|
|
48593
|
+
modelName: ATTRIBUTE_NAME_MODEL_NAME,
|
|
48594
|
+
modelProvider: ATTRIBUTE_NAME_MODEL_PROVIDER,
|
|
48595
|
+
inputTokens: ATTRIBUTE_NAME_TOKEN_USAGE_INPUT_TOKENS,
|
|
48596
|
+
outputTokens: ATTRIBUTE_NAME_TOKEN_USAGE_OUTPUT_TOKENS,
|
|
48597
|
+
totalTokens: ATTRIBUTE_NAME_TOKEN_USAGE_TOTAL_TOKENS,
|
|
48598
|
+
errorType: ATTRIBUTE_NAME_ERROR_TYPE,
|
|
48599
|
+
errorMessage: ATTRIBUTE_NAME_ERROR_MESSAGE
|
|
48600
|
+
};
|
|
48601
|
+
|
|
48602
|
+
class LlmCallSpan extends FriskSpan {
|
|
48603
|
+
constructor(args) {
|
|
48604
|
+
super({ ...args, spanName: SPAN_NAME_LLM_CALL, attributeFields: FIELDS });
|
|
48572
48605
|
}
|
|
48573
|
-
|
|
48574
|
-
|
|
48575
|
-
|
|
48576
|
-
|
|
48577
|
-
|
|
48578
|
-
|
|
48579
|
-
|
|
48606
|
+
setAttributes(values) {
|
|
48607
|
+
this.setAttributesByField(values);
|
|
48608
|
+
}
|
|
48609
|
+
}
|
|
48610
|
+
// src/core/spans/operation-span.ts
|
|
48611
|
+
var FIELDS2 = {
|
|
48612
|
+
sessionId: ATTRIBUTE_NAME_SESSION_ID
|
|
48613
|
+
};
|
|
48614
|
+
|
|
48615
|
+
class OperationSpan extends FriskSpan {
|
|
48616
|
+
constructor(args) {
|
|
48617
|
+
super({ ...args, spanName: SPAN_NAME_OPERATION, attributeFields: FIELDS2 });
|
|
48618
|
+
}
|
|
48619
|
+
setAttributes(values) {
|
|
48620
|
+
this.setAttributesByField(values);
|
|
48621
|
+
}
|
|
48622
|
+
}
|
|
48623
|
+
// src/core/spans/session-span.ts
|
|
48624
|
+
var FIELDS3 = {
|
|
48625
|
+
sessionId: ATTRIBUTE_NAME_SESSION_ID,
|
|
48626
|
+
remoteSessionId: ATTRIBUTE_NAME_REMOTE_SESSION_ID,
|
|
48627
|
+
prompt: ATTRIBUTE_NAME_SESSION_PROMPT,
|
|
48628
|
+
toolCallCount: ATTRIBUTE_NAME_TOOL_CALL_COUNT,
|
|
48629
|
+
toolCallErrorCount: ATTRIBUTE_NAME_TOOL_CALL_ERROR_COUNT,
|
|
48630
|
+
inputTokens: ATTRIBUTE_NAME_TOKEN_USAGE_INPUT_TOKENS,
|
|
48631
|
+
outputTokens: ATTRIBUTE_NAME_TOKEN_USAGE_OUTPUT_TOKENS,
|
|
48632
|
+
totalTokens: ATTRIBUTE_NAME_TOKEN_USAGE_TOTAL_TOKENS
|
|
48633
|
+
};
|
|
48634
|
+
|
|
48635
|
+
class SessionSpan extends FriskSpan {
|
|
48636
|
+
constructor(args) {
|
|
48637
|
+
super({
|
|
48638
|
+
...args,
|
|
48639
|
+
spanName: SPAN_NAME_FRISK_SESSION,
|
|
48640
|
+
attributeFields: FIELDS3
|
|
48580
48641
|
});
|
|
48581
|
-
if (decision.reason) {
|
|
48582
|
-
this.setAttribute(ATTRIBUTE_NAME_DECISION_REASON, decision.reason);
|
|
48583
|
-
}
|
|
48584
48642
|
}
|
|
48585
|
-
|
|
48586
|
-
|
|
48587
|
-
|
|
48588
|
-
|
|
48589
|
-
|
|
48590
|
-
|
|
48591
|
-
|
|
48592
|
-
|
|
48593
|
-
|
|
48643
|
+
setAttributes(values) {
|
|
48644
|
+
this.setAttributesByField(values);
|
|
48645
|
+
}
|
|
48646
|
+
}
|
|
48647
|
+
// src/core/spans/tool-call-decision-span.ts
|
|
48648
|
+
var FIELDS4 = {
|
|
48649
|
+
sessionId: ATTRIBUTE_NAME_SESSION_ID,
|
|
48650
|
+
toolName: ATTRIBUTE_NAME_TOOL_NAME,
|
|
48651
|
+
toolCallId: ATTRIBUTE_NAME_TOOL_CALL_ID,
|
|
48652
|
+
toolArgsJson: ATTRIBUTE_NAME_TOOL_ARGS_JSON,
|
|
48653
|
+
toolArgsRedactedPathsJson: ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON,
|
|
48654
|
+
agentStateJson: ATTRIBUTE_NAME_AGENT_STATE_JSON,
|
|
48655
|
+
agentStateRedactedPathsJson: ATTRIBUTE_NAME_AGENT_STATE_REDACTED_PATHS_JSON,
|
|
48656
|
+
friskToolId: ATTRIBUTE_NAME_FRISK_TOOL_ID,
|
|
48657
|
+
friskToolVersionId: ATTRIBUTE_NAME_FRISK_TOOL_VERSION_ID,
|
|
48658
|
+
llmReasoning: ATTRIBUTE_NAME_LLM_REASONING,
|
|
48659
|
+
decisionOutcome: ATTRIBUTE_NAME_DECISION_OUTCOME,
|
|
48660
|
+
decisionMatchedRuleCount: ATTRIBUTE_NAME_DECISION_MATCHED_RULE_COUNT,
|
|
48661
|
+
decisionReason: ATTRIBUTE_NAME_DECISION_REASON,
|
|
48662
|
+
errorType: ATTRIBUTE_NAME_ERROR_TYPE,
|
|
48663
|
+
errorMessage: ATTRIBUTE_NAME_ERROR_MESSAGE
|
|
48664
|
+
};
|
|
48665
|
+
|
|
48666
|
+
class ToolCallDecisionSpan extends FriskSpan {
|
|
48667
|
+
constructor(args) {
|
|
48668
|
+
super({
|
|
48669
|
+
...args,
|
|
48670
|
+
spanName: SPAN_NAME_DECIDE_TOOL_CALL,
|
|
48671
|
+
attributeFields: FIELDS4
|
|
48594
48672
|
});
|
|
48595
48673
|
}
|
|
48596
|
-
|
|
48597
|
-
|
|
48598
|
-
const redactedToolArgsResult = this.adapter.serializeToolArgs(removeLlmReasoningArg(this.toolCall.args), { redact: this.redaction.redactToolArgs });
|
|
48599
|
-
const redactedAgentStateResult = this.adapter.serializeAgentState(this.agentState, { redact: this.redaction.redactAgentState });
|
|
48600
|
-
this._span = this.tracer.startSpan(SPAN_NAME_DECIDE_TOOL_CALL, {
|
|
48601
|
-
attributes: {
|
|
48602
|
-
[ATTRIBUTE_NAME_SESSION_ID]: this.sessionId,
|
|
48603
|
-
[ATTRIBUTE_NAME_TOOL_NAME]: this.toolCall.name,
|
|
48604
|
-
...this.friskToolId !== null ? { [ATTRIBUTE_NAME_FRISK_TOOL_ID]: this.friskToolId } : {},
|
|
48605
|
-
...this.friskToolVersionId !== null ? {
|
|
48606
|
-
[ATTRIBUTE_NAME_FRISK_TOOL_VERSION_ID]: this.friskToolVersionId
|
|
48607
|
-
} : {},
|
|
48608
|
-
[ATTRIBUTE_NAME_TOOL_CALL_ID]: this.toolCall.id,
|
|
48609
|
-
[ATTRIBUTE_NAME_TOOL_ARGS_JSON]: redactedToolArgsResult.value ?? "",
|
|
48610
|
-
[ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON]: JSON.stringify(redactedToolArgsResult.redactedPaths),
|
|
48611
|
-
[ATTRIBUTE_NAME_AGENT_STATE_JSON]: redactedAgentStateResult.value ?? "",
|
|
48612
|
-
[ATTRIBUTE_NAME_AGENT_STATE_REDACTED_PATHS_JSON]: JSON.stringify(redactedAgentStateResult.redactedPaths)
|
|
48613
|
-
}
|
|
48614
|
-
}, parentContext);
|
|
48615
|
-
this._traceContextCarrier = {};
|
|
48616
|
-
const spanContext = import_api.trace.setSpan(import_api.context.active(), this.span);
|
|
48617
|
-
import_api.propagation.inject(spanContext, this._traceContextCarrier);
|
|
48618
|
-
}
|
|
48619
|
-
exit() {
|
|
48620
|
-
if (!this.span) {
|
|
48621
|
-
return;
|
|
48622
|
-
}
|
|
48623
|
-
this.span.end();
|
|
48674
|
+
setAttributes(values) {
|
|
48675
|
+
this.setAttributesByField(values);
|
|
48624
48676
|
}
|
|
48625
48677
|
}
|
|
48678
|
+
// src/core/spans/tool-call-observation-span.ts
|
|
48679
|
+
var FIELDS5 = {
|
|
48680
|
+
sessionId: ATTRIBUTE_NAME_SESSION_ID,
|
|
48681
|
+
toolName: ATTRIBUTE_NAME_TOOL_NAME,
|
|
48682
|
+
toolCallId: ATTRIBUTE_NAME_TOOL_CALL_ID,
|
|
48683
|
+
toolArgsJson: ATTRIBUTE_NAME_TOOL_ARGS_JSON,
|
|
48684
|
+
toolArgsRedactedPathsJson: ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON,
|
|
48685
|
+
agentStateJson: ATTRIBUTE_NAME_AGENT_STATE_JSON,
|
|
48686
|
+
agentStateRedactedPathsJson: ATTRIBUTE_NAME_AGENT_STATE_REDACTED_PATHS_JSON,
|
|
48687
|
+
toolCallSequenceNumber: ATTRIBUTE_NAME_TOOL_CALL_SEQUENCE_NUMBER,
|
|
48688
|
+
friskToolId: ATTRIBUTE_NAME_FRISK_TOOL_ID,
|
|
48689
|
+
friskToolVersionId: ATTRIBUTE_NAME_FRISK_TOOL_VERSION_ID,
|
|
48690
|
+
llmReasoning: ATTRIBUTE_NAME_LLM_REASONING,
|
|
48691
|
+
isSuccess: ATTRIBUTE_NAME_TOOL_CALL_IS_SUCCESS,
|
|
48692
|
+
isError: ATTRIBUTE_NAME_TOOL_CALL_IS_ERROR,
|
|
48693
|
+
errorMessage: ATTRIBUTE_NAME_ERROR_MESSAGE,
|
|
48694
|
+
errorType: ATTRIBUTE_NAME_ERROR_TYPE,
|
|
48695
|
+
llmCallSpanId: ATTRIBUTE_NAME_LLM_CALL_SPAN_ID
|
|
48696
|
+
};
|
|
48626
48697
|
|
|
48698
|
+
class ToolCallObservationSpan extends FriskSpan {
|
|
48699
|
+
constructor(args) {
|
|
48700
|
+
super({
|
|
48701
|
+
...args,
|
|
48702
|
+
spanName: SPAN_NAME_OBSERVE_TOOL_CALL,
|
|
48703
|
+
attributeFields: FIELDS5
|
|
48704
|
+
});
|
|
48705
|
+
}
|
|
48706
|
+
setAttributes(values) {
|
|
48707
|
+
this.setAttributesByField(values);
|
|
48708
|
+
}
|
|
48709
|
+
}
|
|
48627
48710
|
// src/core/types.ts
|
|
48628
48711
|
var DecisionOutcome;
|
|
48629
48712
|
((DecisionOutcome2) => {
|
|
@@ -48643,9 +48726,13 @@ class FriskSession {
|
|
|
48643
48726
|
logger;
|
|
48644
48727
|
_rootRunId = null;
|
|
48645
48728
|
_isTracing = false;
|
|
48729
|
+
_agentState = null;
|
|
48646
48730
|
toolCallSequenceNumber = 0;
|
|
48647
48731
|
toolCallSequenceGenerator = this.createToolCallSequenceGenerator();
|
|
48648
48732
|
toolCallErrorCount = 0;
|
|
48733
|
+
tokenUsageInput = 0;
|
|
48734
|
+
tokenUsageOutput = 0;
|
|
48735
|
+
tokenUsageTotal = 0;
|
|
48649
48736
|
constructor({ frisk, redact, tracer, logging }) {
|
|
48650
48737
|
const sessionId = this.constructor.generateSessionId();
|
|
48651
48738
|
this.logger = deriveSdkLogger(logging, {
|
|
@@ -48668,33 +48755,67 @@ class FriskSession {
|
|
|
48668
48755
|
get rootRunId() {
|
|
48669
48756
|
return this._rootRunId;
|
|
48670
48757
|
}
|
|
48758
|
+
createLlmCallSpan({
|
|
48759
|
+
parent
|
|
48760
|
+
} = {}) {
|
|
48761
|
+
const span = new LlmCallSpan({
|
|
48762
|
+
tracer: this.tracer,
|
|
48763
|
+
parent: parent ?? this._rootSpan
|
|
48764
|
+
});
|
|
48765
|
+
span.setAttributes({ sessionId: this.id });
|
|
48766
|
+
return span;
|
|
48767
|
+
}
|
|
48768
|
+
createOperationSpan({
|
|
48769
|
+
parent
|
|
48770
|
+
} = {}) {
|
|
48771
|
+
const span = new OperationSpan({
|
|
48772
|
+
tracer: this.tracer,
|
|
48773
|
+
parent: parent ?? this._rootSpan
|
|
48774
|
+
});
|
|
48775
|
+
span.setAttributes({ sessionId: this.id });
|
|
48776
|
+
return span;
|
|
48777
|
+
}
|
|
48671
48778
|
async createToolCallSpan({
|
|
48672
48779
|
name,
|
|
48673
|
-
args: toolArgsInput
|
|
48780
|
+
args: toolArgsInput,
|
|
48781
|
+
agentState,
|
|
48782
|
+
parent
|
|
48674
48783
|
}) {
|
|
48675
48784
|
const toolArgs = this.validateToolArgs(toolArgsInput);
|
|
48785
|
+
const llmReasoning = extractLlmReasoning(toolArgs);
|
|
48676
48786
|
const redactedToolArgsResult = this.frisk.adapter?.serializeToolArgs(removeLlmReasoningArg(toolArgs), { redact: this.redaction.redactToolArgs }) ?? {
|
|
48677
48787
|
value: "{}",
|
|
48678
48788
|
redactedPaths: []
|
|
48679
48789
|
};
|
|
48680
|
-
const
|
|
48681
|
-
const
|
|
48682
|
-
|
|
48683
|
-
[
|
|
48684
|
-
[ATTRIBUTE_NAME_TOOL_NAME]: name,
|
|
48685
|
-
[ATTRIBUTE_NAME_TOOL_ARGS_JSON]: redactedToolArgsResult.value,
|
|
48686
|
-
[ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON]: JSON.stringify(redactedToolArgsResult.redactedPaths),
|
|
48687
|
-
[ATTRIBUTE_NAME_TOOL_CALL_SEQUENCE_NUMBER]: this.toolCallSequenceGenerator.next().value
|
|
48790
|
+
const agentStateToUse = agentState ?? this._agentState ?? {};
|
|
48791
|
+
const redactedAgentStateResult = this.frisk.adapter?.serializeAgentState(agentStateToUse, { redact: this.redaction.redactAgentState }) ?? {
|
|
48792
|
+
value: "{}",
|
|
48793
|
+
redactedPaths: []
|
|
48688
48794
|
};
|
|
48795
|
+
const span = new ToolCallObservationSpan({
|
|
48796
|
+
tracer: this.tracer,
|
|
48797
|
+
parent: parent ?? this._rootSpan
|
|
48798
|
+
});
|
|
48799
|
+
span.setAttributes({
|
|
48800
|
+
sessionId: this.id,
|
|
48801
|
+
toolName: name,
|
|
48802
|
+
toolArgsJson: redactedToolArgsResult.value ?? "{}",
|
|
48803
|
+
toolArgsRedactedPathsJson: JSON.stringify(redactedToolArgsResult.redactedPaths),
|
|
48804
|
+
agentStateJson: redactedAgentStateResult.value ?? "{}",
|
|
48805
|
+
agentStateRedactedPathsJson: JSON.stringify(redactedAgentStateResult.redactedPaths),
|
|
48806
|
+
toolCallSequenceNumber: this.toolCallSequenceGenerator.next().value
|
|
48807
|
+
});
|
|
48689
48808
|
await this.frisk.toolRegistrationComplete;
|
|
48690
48809
|
const registeredTool = this.frisk.getRegisteredTool(name);
|
|
48691
48810
|
if (registeredTool) {
|
|
48692
|
-
|
|
48693
|
-
|
|
48811
|
+
span.setAttributes({
|
|
48812
|
+
friskToolId: registeredTool.id,
|
|
48813
|
+
friskToolVersionId: registeredTool.versionId
|
|
48814
|
+
});
|
|
48815
|
+
}
|
|
48816
|
+
if (llmReasoning !== null) {
|
|
48817
|
+
span.setAttributes({ llmReasoning });
|
|
48694
48818
|
}
|
|
48695
|
-
const span = this.getTracer().startSpan(SPAN_NAME_OBSERVE_TOOL_CALL, {
|
|
48696
|
-
attributes: spanAttributes
|
|
48697
|
-
}, parentContext);
|
|
48698
48819
|
return span;
|
|
48699
48820
|
}
|
|
48700
48821
|
closeToolCallSpan({
|
|
@@ -48704,19 +48825,19 @@ class FriskSession {
|
|
|
48704
48825
|
status
|
|
48705
48826
|
}) {
|
|
48706
48827
|
if (toolCallId) {
|
|
48707
|
-
span.
|
|
48828
|
+
span.setAttributes({ toolCallId });
|
|
48708
48829
|
}
|
|
48709
48830
|
if (status === "error" /* Error */ || !!err) {
|
|
48710
48831
|
this.incrementToolCallErrors();
|
|
48711
|
-
span.
|
|
48712
|
-
span.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_IS_SUCCESS, false);
|
|
48832
|
+
span.setAttributes({ isError: true, isSuccess: false });
|
|
48713
48833
|
} else if (status === "success" /* Success */) {
|
|
48714
|
-
span.
|
|
48715
|
-
span.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_IS_ERROR, false);
|
|
48834
|
+
span.setAttributes({ isSuccess: true, isError: false });
|
|
48716
48835
|
}
|
|
48717
|
-
if (err
|
|
48718
|
-
span.
|
|
48719
|
-
|
|
48836
|
+
if (err instanceof Error) {
|
|
48837
|
+
span.setAttributes({
|
|
48838
|
+
errorMessage: `${err}`,
|
|
48839
|
+
errorType: `${err.constructor.name}`
|
|
48840
|
+
});
|
|
48720
48841
|
}
|
|
48721
48842
|
span.end();
|
|
48722
48843
|
}
|
|
@@ -48730,32 +48851,37 @@ class FriskSession {
|
|
|
48730
48851
|
agentState
|
|
48731
48852
|
}) {
|
|
48732
48853
|
const registeredTool = this.frisk.getRegisteredTool(toolCall.name);
|
|
48733
|
-
const
|
|
48734
|
-
|
|
48735
|
-
|
|
48736
|
-
|
|
48737
|
-
friskToolId: registeredTool?.id ?? null,
|
|
48738
|
-
friskToolVersionId: registeredTool?.versionId ?? null,
|
|
48739
|
-
agentState,
|
|
48740
|
-
parent: this._rootSpan,
|
|
48854
|
+
const redactedToolArgs = this.frisk.adapter.serializeToolArgs(removeLlmReasoningArg(toolCall.args), { redact: this.redaction.redactToolArgs });
|
|
48855
|
+
const redactedAgentState = this.frisk.adapter.serializeAgentState(agentState, { redact: this.redaction.redactAgentState });
|
|
48856
|
+
const llmReasoning = extractLlmReasoning(toolCall.args);
|
|
48857
|
+
const span = new ToolCallDecisionSpan({
|
|
48741
48858
|
tracer: this.tracer,
|
|
48742
|
-
|
|
48859
|
+
parent: this._rootSpan
|
|
48743
48860
|
});
|
|
48744
|
-
|
|
48745
|
-
|
|
48861
|
+
try {
|
|
48862
|
+
span.setAttributes({
|
|
48863
|
+
sessionId: this.id,
|
|
48864
|
+
toolName: toolCall.name,
|
|
48865
|
+
toolCallId: toolCall.id,
|
|
48866
|
+
toolArgsJson: redactedToolArgs.value ?? "{}",
|
|
48867
|
+
toolArgsRedactedPathsJson: JSON.stringify(redactedToolArgs.redactedPaths),
|
|
48868
|
+
agentStateJson: redactedAgentState.value ?? "{}",
|
|
48869
|
+
agentStateRedactedPathsJson: JSON.stringify(redactedAgentState.redactedPaths),
|
|
48870
|
+
friskToolId: registeredTool?.id,
|
|
48871
|
+
friskToolVersionId: registeredTool?.versionId,
|
|
48872
|
+
llmReasoning: llmReasoning ?? undefined
|
|
48873
|
+
});
|
|
48874
|
+
const spanContext = import_api2.trace.setSpan(import_api2.context.active(), span.otelSpan);
|
|
48875
|
+
const traceContextCarrier = {};
|
|
48876
|
+
import_api2.propagation.inject(spanContext, traceContextCarrier);
|
|
48746
48877
|
try {
|
|
48747
|
-
if (LLM_REASONING_ARG_NAME in toolArgs) {
|
|
48748
|
-
const llmReasoning = toolArgs[LLM_REASONING_ARG_NAME];
|
|
48749
|
-
span.setAttribute(ATTRIBUTE_NAME_LLM_REASONING, llmReasoning);
|
|
48750
|
-
}
|
|
48751
|
-
const baseToolCallArgs = removeLlmReasoningArg(toolCall.args);
|
|
48752
48878
|
const coreResult = this.frisk.decideToolCall({
|
|
48753
48879
|
toolCall: {
|
|
48754
48880
|
...toolCall,
|
|
48755
|
-
args:
|
|
48881
|
+
args: removeLlmReasoningArg(toolCall.args)
|
|
48756
48882
|
},
|
|
48757
48883
|
agentState,
|
|
48758
|
-
traceContextCarrier
|
|
48884
|
+
traceContextCarrier
|
|
48759
48885
|
});
|
|
48760
48886
|
const result = {
|
|
48761
48887
|
outcome: coreResult.outcome,
|
|
@@ -48764,7 +48890,11 @@ class FriskSession {
|
|
|
48764
48890
|
policyId: coreResult.policyId,
|
|
48765
48891
|
policyVersionId: coreResult.policyVersionId
|
|
48766
48892
|
};
|
|
48767
|
-
span.
|
|
48893
|
+
span.setAttributes({
|
|
48894
|
+
decisionOutcome: result.outcome,
|
|
48895
|
+
decisionMatchedRuleCount: Number(result.rulesMatchedCount),
|
|
48896
|
+
decisionReason: result.reason ?? undefined
|
|
48897
|
+
});
|
|
48768
48898
|
return result;
|
|
48769
48899
|
} catch (error) {
|
|
48770
48900
|
const wrapped = new ToolCallEvaluationError(error);
|
|
@@ -48772,14 +48902,19 @@ class FriskSession {
|
|
|
48772
48902
|
toolName: toolCall.name,
|
|
48773
48903
|
toolCallId: toolCall.id
|
|
48774
48904
|
});
|
|
48775
|
-
span.
|
|
48905
|
+
span.setAttributes({
|
|
48906
|
+
errorType: wrapped.constructor.name,
|
|
48907
|
+
errorMessage: wrapped.message
|
|
48908
|
+
});
|
|
48776
48909
|
return {
|
|
48777
48910
|
outcome: "error" /* ERROR */,
|
|
48778
48911
|
rulesMatchedCount: 0,
|
|
48779
48912
|
reason: wrapped.message
|
|
48780
48913
|
};
|
|
48781
48914
|
}
|
|
48782
|
-
}
|
|
48915
|
+
} finally {
|
|
48916
|
+
span.end();
|
|
48917
|
+
}
|
|
48783
48918
|
}
|
|
48784
48919
|
*createToolCallSequenceGenerator() {
|
|
48785
48920
|
while (true) {
|
|
@@ -48795,23 +48930,49 @@ class FriskSession {
|
|
|
48795
48930
|
getToolCallErrorCount() {
|
|
48796
48931
|
return this.toolCallErrorCount;
|
|
48797
48932
|
}
|
|
48798
|
-
|
|
48933
|
+
recordTokenUsage({
|
|
48934
|
+
inputTokens = 0,
|
|
48935
|
+
outputTokens = 0,
|
|
48936
|
+
totalTokens = 0
|
|
48937
|
+
}) {
|
|
48938
|
+
this.tokenUsageInput += inputTokens;
|
|
48939
|
+
this.tokenUsageOutput += outputTokens;
|
|
48940
|
+
this.tokenUsageTotal += totalTokens;
|
|
48941
|
+
this._rootSpan?.setAttributes({
|
|
48942
|
+
inputTokens: this.tokenUsageInput,
|
|
48943
|
+
outputTokens: this.tokenUsageOutput,
|
|
48944
|
+
totalTokens: this.tokenUsageTotal
|
|
48945
|
+
});
|
|
48946
|
+
}
|
|
48947
|
+
getTokenUsage() {
|
|
48948
|
+
return {
|
|
48949
|
+
inputTokens: this.tokenUsageInput,
|
|
48950
|
+
outputTokens: this.tokenUsageOutput,
|
|
48951
|
+
totalTokens: this.tokenUsageTotal
|
|
48952
|
+
};
|
|
48953
|
+
}
|
|
48954
|
+
initTracing({ runId, agentState }) {
|
|
48799
48955
|
this._rootRunId = runId;
|
|
48800
48956
|
this._isTracing = true;
|
|
48801
|
-
|
|
48802
|
-
span
|
|
48803
|
-
span.
|
|
48804
|
-
const userPrompt = this.frisk.adapter.extractPrompt?.(
|
|
48957
|
+
this._agentState = agentState;
|
|
48958
|
+
const span = new SessionSpan({ tracer: this.tracer });
|
|
48959
|
+
span.setAttributes({ sessionId: this.id, remoteSessionId: runId });
|
|
48960
|
+
const userPrompt = this.frisk.adapter.extractPrompt?.(agentState);
|
|
48805
48961
|
if (userPrompt) {
|
|
48806
|
-
span.
|
|
48962
|
+
span.setAttributes({ prompt: userPrompt });
|
|
48807
48963
|
}
|
|
48808
48964
|
this.setRootSpan(span);
|
|
48809
48965
|
return span;
|
|
48810
48966
|
}
|
|
48811
48967
|
endTracing() {
|
|
48812
48968
|
if (this._rootSpan) {
|
|
48813
|
-
this._rootSpan.
|
|
48814
|
-
|
|
48969
|
+
this._rootSpan.setAttributes({
|
|
48970
|
+
toolCallCount: this.getToolCallCount(),
|
|
48971
|
+
toolCallErrorCount: this.getToolCallErrorCount(),
|
|
48972
|
+
inputTokens: this.tokenUsageInput,
|
|
48973
|
+
outputTokens: this.tokenUsageOutput,
|
|
48974
|
+
totalTokens: this.tokenUsageTotal
|
|
48975
|
+
});
|
|
48815
48976
|
this._rootSpan.end();
|
|
48816
48977
|
}
|
|
48817
48978
|
this._isTracing = false;
|
|
@@ -48826,6 +48987,14 @@ class FriskSession {
|
|
|
48826
48987
|
}
|
|
48827
48988
|
}
|
|
48828
48989
|
|
|
48990
|
+
// src/core/redaction-options.ts
|
|
48991
|
+
function resolveRedactionOptions(options) {
|
|
48992
|
+
return {
|
|
48993
|
+
redactToolArgs: options?.redactToolArgs ?? false,
|
|
48994
|
+
redactAgentState: options?.redactAgentState ?? false
|
|
48995
|
+
};
|
|
48996
|
+
}
|
|
48997
|
+
|
|
48829
48998
|
// src/core/sdk-attributes/detect-runtime.ts
|
|
48830
48999
|
function detectRuntime() {
|
|
48831
49000
|
const g = globalThis;
|
|
@@ -48861,12 +49030,12 @@ function detectRuntime() {
|
|
|
48861
49030
|
|
|
48862
49031
|
// src/core/sdk-attributes/read-sdk-meta.ts
|
|
48863
49032
|
import { existsSync, readFileSync } from "node:fs";
|
|
48864
|
-
import { dirname
|
|
49033
|
+
import { dirname, join } from "node:path";
|
|
48865
49034
|
import { fileURLToPath } from "node:url";
|
|
48866
49035
|
|
|
48867
49036
|
// src/generated/sdk-meta.ts
|
|
48868
49037
|
var SDK_NAME = "@friskai/frisk-js";
|
|
48869
|
-
var SDK_VERSION = "0.
|
|
49038
|
+
var SDK_VERSION = "0.3.1";
|
|
48870
49039
|
|
|
48871
49040
|
// src/core/sdk-attributes/read-sdk-meta.ts
|
|
48872
49041
|
function getSdkMeta() {
|
|
@@ -48900,7 +49069,7 @@ function findNearestPackageJson(startDir) {
|
|
|
48900
49069
|
if (existsSync(candidate)) {
|
|
48901
49070
|
return candidate;
|
|
48902
49071
|
}
|
|
48903
|
-
const parent =
|
|
49072
|
+
const parent = dirname(dir);
|
|
48904
49073
|
if (parent === dir) {
|
|
48905
49074
|
return null;
|
|
48906
49075
|
}
|
|
@@ -48909,7 +49078,7 @@ function findNearestPackageJson(startDir) {
|
|
|
48909
49078
|
}
|
|
48910
49079
|
function tryReadPackageJson() {
|
|
48911
49080
|
try {
|
|
48912
|
-
const here =
|
|
49081
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
48913
49082
|
const pkgPath = findNearestPackageJson(here);
|
|
48914
49083
|
if (!pkgPath)
|
|
48915
49084
|
return null;
|
|
@@ -49277,6 +49446,9 @@ class ToolRegistry {
|
|
|
49277
49446
|
|
|
49278
49447
|
// src/core/frisk.ts
|
|
49279
49448
|
class Frisk {
|
|
49449
|
+
get toolPoliciesAvailable() {
|
|
49450
|
+
return this.toolPolicies?.available ?? false;
|
|
49451
|
+
}
|
|
49280
49452
|
get redaction() {
|
|
49281
49453
|
return this._redaction;
|
|
49282
49454
|
}
|
|
@@ -49284,24 +49456,34 @@ class Frisk {
|
|
|
49284
49456
|
apiBaseUrl;
|
|
49285
49457
|
otlpEndpoint;
|
|
49286
49458
|
accessTokenProvider;
|
|
49459
|
+
get adapter() {
|
|
49460
|
+
return this._adapter;
|
|
49461
|
+
}
|
|
49462
|
+
get logLevel() {
|
|
49463
|
+
return this._logLevel;
|
|
49464
|
+
}
|
|
49465
|
+
get tracingManager() {
|
|
49466
|
+
if (!this._tracingManager) {
|
|
49467
|
+
throw new FriskNotInitializedError;
|
|
49468
|
+
}
|
|
49469
|
+
return this._tracingManager;
|
|
49470
|
+
}
|
|
49287
49471
|
initialized = false;
|
|
49288
49472
|
rootLogger;
|
|
49289
49473
|
logger;
|
|
49290
49474
|
_logLevel;
|
|
49291
49475
|
_adapter;
|
|
49292
|
-
_friskHandle = null;
|
|
49293
49476
|
_tracingManager = null;
|
|
49294
|
-
|
|
49477
|
+
toolRegistry;
|
|
49295
49478
|
sdkAttributes;
|
|
49479
|
+
extensions = [];
|
|
49480
|
+
toolPolicies = null;
|
|
49296
49481
|
wrapToolsCalled = false;
|
|
49297
49482
|
get toolRegistrationComplete() {
|
|
49298
49483
|
if (!this.wrapToolsCalled) {
|
|
49299
49484
|
return Promise.resolve(true);
|
|
49300
49485
|
}
|
|
49301
|
-
return this.
|
|
49302
|
-
}
|
|
49303
|
-
get logLevel() {
|
|
49304
|
-
return this._logLevel;
|
|
49486
|
+
return this.toolRegistry.initialized;
|
|
49305
49487
|
}
|
|
49306
49488
|
static async connect(options) {
|
|
49307
49489
|
const instance = new this(options);
|
|
@@ -49315,7 +49497,7 @@ class Frisk {
|
|
|
49315
49497
|
this._logLevel = options?.logging?.logLevel;
|
|
49316
49498
|
this.logger = deriveSdkLogger({
|
|
49317
49499
|
logger: this.rootLogger,
|
|
49318
|
-
logLevel: this.
|
|
49500
|
+
logLevel: this.logLevel
|
|
49319
49501
|
}, {
|
|
49320
49502
|
component: "FriskCore"
|
|
49321
49503
|
});
|
|
@@ -49335,10 +49517,10 @@ class Frisk {
|
|
|
49335
49517
|
baseUrl,
|
|
49336
49518
|
logging: {
|
|
49337
49519
|
logger: this.rootLogger,
|
|
49338
|
-
logLevel: this.
|
|
49520
|
+
logLevel: this.logLevel
|
|
49339
49521
|
}
|
|
49340
49522
|
});
|
|
49341
|
-
this.
|
|
49523
|
+
this.toolRegistry = new ToolRegistry({
|
|
49342
49524
|
apiBaseUrl: baseUrl,
|
|
49343
49525
|
getAccessToken: async () => this.accessTokenProvider.getAccessToken(),
|
|
49344
49526
|
logger: this.logger
|
|
@@ -49349,21 +49531,20 @@ class Frisk {
|
|
|
49349
49531
|
}
|
|
49350
49532
|
this.otlpEndpoint = otlpEndpoint;
|
|
49351
49533
|
this._redaction = resolveRedactionOptions(options?.redact);
|
|
49534
|
+
this.extensions = options?.extensions ?? [];
|
|
49535
|
+
this.mountExtensions();
|
|
49352
49536
|
}
|
|
49353
|
-
|
|
49354
|
-
|
|
49355
|
-
|
|
49537
|
+
mountExtensions() {
|
|
49538
|
+
for (const ext of this.extensions) {
|
|
49539
|
+
if ("available" in ext && "decideToolCall" in ext) {
|
|
49540
|
+
this.toolPolicies = ext;
|
|
49541
|
+
}
|
|
49356
49542
|
}
|
|
49357
|
-
return this._friskHandle;
|
|
49358
49543
|
}
|
|
49359
|
-
|
|
49360
|
-
|
|
49361
|
-
|
|
49362
|
-
get tracingManager() {
|
|
49363
|
-
if (!this._tracingManager) {
|
|
49364
|
-
throw new FriskNotInitializedError;
|
|
49544
|
+
async initializeExtensions() {
|
|
49545
|
+
for (const ext of this.extensions) {
|
|
49546
|
+
await ext.initialize(this);
|
|
49365
49547
|
}
|
|
49366
|
-
return this._tracingManager;
|
|
49367
49548
|
}
|
|
49368
49549
|
async connect() {
|
|
49369
49550
|
if (!this.initialized) {
|
|
@@ -49377,20 +49558,20 @@ class Frisk {
|
|
|
49377
49558
|
tracerName: TRACER_NAME,
|
|
49378
49559
|
tracerVersion: TRACER_VERSION
|
|
49379
49560
|
});
|
|
49380
|
-
this._friskHandle = new FriskHandle(currentToken, this.apiBaseUrl, this.otlpEndpoint);
|
|
49381
49561
|
this.accessTokenProvider.addCallback((newToken) => this.updateAccessToken(newToken));
|
|
49382
49562
|
this.accessTokenProvider.startBackgroundRefresh();
|
|
49383
49563
|
this.initialized = true;
|
|
49564
|
+
await this.initializeExtensions();
|
|
49384
49565
|
}
|
|
49385
49566
|
}
|
|
49386
49567
|
session(metadata) {
|
|
49387
49568
|
const session = new FriskSession({
|
|
49388
49569
|
frisk: this,
|
|
49389
|
-
redact: this.
|
|
49570
|
+
redact: this.redaction,
|
|
49390
49571
|
tracer: this.tracingManager.getTracer(),
|
|
49391
49572
|
logging: {
|
|
49392
49573
|
logger: this.rootLogger,
|
|
49393
|
-
logLevel: this.
|
|
49574
|
+
logLevel: this.logLevel
|
|
49394
49575
|
}
|
|
49395
49576
|
});
|
|
49396
49577
|
const registry2 = SessionRegistry.getInstance();
|
|
@@ -49398,20 +49579,20 @@ class Frisk {
|
|
|
49398
49579
|
return session;
|
|
49399
49580
|
}
|
|
49400
49581
|
normalizeToolCall(toolCall) {
|
|
49401
|
-
return this.
|
|
49582
|
+
return this.adapter.normalizeToolCall(toolCall);
|
|
49402
49583
|
}
|
|
49403
49584
|
wrapTools(tools, options = DefaultWrapToolOptions) {
|
|
49404
49585
|
this.wrapToolsCalled = true;
|
|
49405
49586
|
const toolList = [...tools];
|
|
49406
|
-
const registerToolProperties = toolList.map((tool) => this.
|
|
49587
|
+
const registerToolProperties = toolList.map((tool) => this.adapter.extractRegisterToolProperties?.(tool)).filter((properties) => properties !== null && properties !== undefined);
|
|
49407
49588
|
if (registerToolProperties.length > 0) {
|
|
49408
|
-
this.
|
|
49589
|
+
this.toolRegistry.registerTools({
|
|
49409
49590
|
tools: registerToolProperties,
|
|
49410
49591
|
sdkAttributes: this.sdkAttributes
|
|
49411
49592
|
});
|
|
49412
49593
|
}
|
|
49413
|
-
if (this.
|
|
49414
|
-
return this.
|
|
49594
|
+
if (this.adapter.wrapTools) {
|
|
49595
|
+
return this.adapter.wrapTools(toolList, options);
|
|
49415
49596
|
}
|
|
49416
49597
|
return toolList;
|
|
49417
49598
|
}
|
|
@@ -49423,8 +49604,8 @@ class Frisk {
|
|
|
49423
49604
|
};
|
|
49424
49605
|
}
|
|
49425
49606
|
wrapTool(tool, options = DefaultWrapToolOptions) {
|
|
49426
|
-
if (this.
|
|
49427
|
-
return this.
|
|
49607
|
+
if (this.adapter.wrapTool) {
|
|
49608
|
+
return this.adapter.wrapTool(tool, options);
|
|
49428
49609
|
}
|
|
49429
49610
|
return tool;
|
|
49430
49611
|
}
|
|
@@ -49433,30 +49614,38 @@ class Frisk {
|
|
|
49433
49614
|
return registry2.get(sessionId);
|
|
49434
49615
|
}
|
|
49435
49616
|
updateAccessToken(authToken) {
|
|
49436
|
-
this.
|
|
49617
|
+
this.toolPolicies?.updateAccessToken(authToken);
|
|
49437
49618
|
this.tracingManager.updateAuthToken(authToken);
|
|
49438
49619
|
}
|
|
49439
49620
|
getRegisteredTool(toolName) {
|
|
49440
|
-
return this.
|
|
49621
|
+
return this.toolRegistry.getRegisteredTool(toolName);
|
|
49441
49622
|
}
|
|
49442
49623
|
decideToolCall({
|
|
49443
49624
|
toolCall,
|
|
49444
49625
|
agentState,
|
|
49445
49626
|
traceContextCarrier
|
|
49446
49627
|
}) {
|
|
49447
|
-
|
|
49448
|
-
|
|
49449
|
-
|
|
49450
|
-
const
|
|
49451
|
-
const
|
|
49452
|
-
const
|
|
49453
|
-
|
|
49454
|
-
|
|
49455
|
-
|
|
49456
|
-
|
|
49457
|
-
|
|
49458
|
-
|
|
49459
|
-
|
|
49628
|
+
if (!this.toolPolicies) {
|
|
49629
|
+
throw new MissingToolPoliciesExtensionError;
|
|
49630
|
+
}
|
|
49631
|
+
const toolArgsJson = toolCall.args ? JSON.stringify(toolCall.args) : null;
|
|
49632
|
+
const agentStateJson = agentState ? JSON.stringify(agentState) : null;
|
|
49633
|
+
const redactedArgs = toolCall.args ? redactObject(toolCall.args, this.redaction.redactToolArgs) : { value: {}, redactedPaths: [] };
|
|
49634
|
+
const toolArgsRedactedJson = toolCall.args ? JSON.stringify(redactedArgs.value) : null;
|
|
49635
|
+
const toolArgsRedactedPathsJson = JSON.stringify(redactedArgs.redactedPaths);
|
|
49636
|
+
const redactedState = agentState ? redactObject(agentState, this.redaction.redactAgentState) : { value: {}, redactedPaths: [] };
|
|
49637
|
+
const agentStateRedactedJson = agentState ? JSON.stringify(redactedState.value) : null;
|
|
49638
|
+
const agentStateRedactedPathsJson = JSON.stringify(redactedState.redactedPaths);
|
|
49639
|
+
return this.toolPolicies.decideToolCall({
|
|
49640
|
+
toolCall,
|
|
49641
|
+
toolArgsJson,
|
|
49642
|
+
toolArgsRedactedJson,
|
|
49643
|
+
toolArgsRedactedPathsJson,
|
|
49644
|
+
agentStateJson,
|
|
49645
|
+
agentStateRedactedJson,
|
|
49646
|
+
agentStateRedactedPathsJson,
|
|
49647
|
+
traceContextCarrier
|
|
49648
|
+
});
|
|
49460
49649
|
}
|
|
49461
49650
|
async getOrCreateToolApprovalRequest({
|
|
49462
49651
|
toolCallId,
|
|
@@ -49504,29 +49693,33 @@ class Frisk {
|
|
|
49504
49693
|
if (this.tracingManager) {
|
|
49505
49694
|
await this.tracingManager.shutdown();
|
|
49506
49695
|
}
|
|
49507
|
-
this.
|
|
49696
|
+
for (const ext of this.extensions) {
|
|
49697
|
+
ext.shutdown();
|
|
49698
|
+
}
|
|
49508
49699
|
}
|
|
49509
49700
|
}
|
|
49510
49701
|
export {
|
|
49511
49702
|
requireEnv,
|
|
49512
|
-
redactDictionarySimple,
|
|
49513
|
-
redactDictionary,
|
|
49514
49703
|
getEnv,
|
|
49515
49704
|
combineRedactOptions,
|
|
49516
49705
|
UnexpectedFriskServerResponseError,
|
|
49517
|
-
|
|
49706
|
+
ToolCallObservationSpan,
|
|
49707
|
+
ToolCallDecisionSpan,
|
|
49518
49708
|
ToolApprovalStatus,
|
|
49709
|
+
SessionSpan,
|
|
49519
49710
|
SessionRegistry,
|
|
49520
49711
|
SessionNotFoundError,
|
|
49712
|
+
OperationSpan,
|
|
49521
49713
|
MissingOtlpEndpointError,
|
|
49522
49714
|
MissingFriskSessionContextError,
|
|
49523
49715
|
MissingBaseURLError,
|
|
49524
49716
|
MissingAPIKeyError,
|
|
49717
|
+
LlmCallSpan,
|
|
49525
49718
|
InvalidFriskSessionError,
|
|
49526
49719
|
InvalidAccessTokenError,
|
|
49720
|
+
FriskSpan,
|
|
49527
49721
|
FriskSession,
|
|
49528
49722
|
FriskInvalidAPIKeyError,
|
|
49529
|
-
FriskHandle,
|
|
49530
49723
|
FriskError,
|
|
49531
49724
|
FriskBaseURLNotFoundError,
|
|
49532
49725
|
Frisk,
|
|
@@ -49540,5 +49733,5 @@ export {
|
|
|
49540
49733
|
AccessTokenProvider
|
|
49541
49734
|
};
|
|
49542
49735
|
|
|
49543
|
-
//# debugId=
|
|
49736
|
+
//# debugId=6FCEF90393747D4664756E2164756E21
|
|
49544
49737
|
//# sourceMappingURL=index.js.map
|