@friskai/frisk-js 0.2.8 → 0.2.10

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.
@@ -43867,9 +43867,11 @@ var ATTRIBUTE_NAME_DECISION_OUTCOME = "frisk.decision.outcome";
43867
43867
  var ATTRIBUTE_NAME_DECISION_REASON = "frisk.decision.reason";
43868
43868
  var ATTRIBUTE_NAME_ERROR_TYPE = "error.type";
43869
43869
  var ATTRIBUTE_NAME_ERROR_MESSAGE = "error.message";
43870
- var ATTRIBUTE_NAME_LATENCY_NS = "latency_ns";
43871
43870
  var ATTRIBUTE_NAME_TOOL_CALL_IS_SUCCESS = "frisk.tool_call.is_success";
43872
43871
  var ATTRIBUTE_NAME_TOOL_CALL_IS_ERROR = "frisk.tool_call.is_error";
43872
+ var ATTRIBUTE_NAME_TOOL_CALL_COUNT = "frisk.tool_calls.count";
43873
+ var ATTRIBUTE_NAME_TOOL_CALL_ERROR_COUNT = "frisk.tool_calls.error_count";
43874
+ var ATTRIBUTE_NAME_TOOL_CALL_SEQUENCE_NUMBER = "frisk.tool_call.sequence_number";
43873
43875
  // src/telemetry/tracing-manager.ts
43874
43876
  var import_grpc_js = __toESM(require_src3(), 1);
43875
43877
  var import_exporter_trace_otlp_grpc = __toESM(require_src12(), 1);
@@ -44162,6 +44164,9 @@ class AccessTokenProvider {
44162
44164
  }
44163
44165
  }
44164
44166
 
44167
+ // src/core/frisk-session.ts
44168
+ var import_api2 = __toESM(require_src4(), 1);
44169
+
44165
44170
  // ../../node_modules/zod/v4/core/core.js
44166
44171
  var NEVER = Object.freeze({
44167
44172
  status: "aborted"
@@ -48511,7 +48516,6 @@ class ToolCallSpan {
48511
48516
  tracer;
48512
48517
  redaction;
48513
48518
  _span = null;
48514
- _startTimeNs = null;
48515
48519
  _traceContextCarrier = null;
48516
48520
  sessionId;
48517
48521
  friskToolVersionId;
@@ -48592,7 +48596,6 @@ class ToolCallSpan {
48592
48596
  }
48593
48597
  enter() {
48594
48598
  const parentContext = this.parent ? import_api.trace.setSpan(import_api.context.active(), this.parent) : import_api.context.active();
48595
- this._startTimeNs = process.hrtime.bigint();
48596
48599
  const redactedToolArgsResult = this.adapter.serializeToolArgs(removeLlmReasoningArg(this.toolCall.args), { redact: this.redaction.redactToolArgs });
48597
48600
  const redactedAgentStateResult = this.adapter.serializeAgentState(this.agentState, { redact: this.redaction.redactAgentState });
48598
48601
  this._span = this.tracer.startSpan(SPAN_NAME_DECIDE_TOOL_CALL, {
@@ -48618,11 +48621,6 @@ class ToolCallSpan {
48618
48621
  if (!this.span) {
48619
48622
  return;
48620
48623
  }
48621
- if (this._startTimeNs !== null) {
48622
- const endTimeNs = process.hrtime.bigint();
48623
- const latencyNs = endTimeNs - this._startTimeNs;
48624
- this.setAttribute(ATTRIBUTE_NAME_LATENCY_NS, Number(latencyNs));
48625
- }
48626
48624
  this.span.end();
48627
48625
  }
48628
48626
  }
@@ -48646,6 +48644,9 @@ class FriskSession {
48646
48644
  logger;
48647
48645
  _rootRunId = null;
48648
48646
  _isTracing = false;
48647
+ toolCallSequenceNumber = 0;
48648
+ toolCallSequenceGenerator = this.createToolCallSequenceGenerator();
48649
+ toolCallErrorCount = 0;
48649
48650
  constructor({ frisk, redact, tracer, logging }) {
48650
48651
  const sessionId = this.constructor.generateSessionId();
48651
48652
  this.logger = deriveSdkLogger(logging, {
@@ -48668,6 +48669,63 @@ class FriskSession {
48668
48669
  get rootRunId() {
48669
48670
  return this._rootRunId;
48670
48671
  }
48672
+ async createToolCallSpan({
48673
+ name,
48674
+ args: toolArgsInput
48675
+ }) {
48676
+ const toolArgs = this.validateToolArgs(toolArgsInput);
48677
+ const redactedToolArgsResult = this.frisk.adapter?.serializeToolArgs(removeLlmReasoningArg(toolArgs), { redact: this.redaction.redactToolArgs }) ?? {
48678
+ value: "{}",
48679
+ redactedPaths: []
48680
+ };
48681
+ const sessionSpan = this.rootSpan;
48682
+ const parentContext = sessionSpan ? import_api2.trace.setSpan(import_api2.context.active(), sessionSpan) : import_api2.context.active();
48683
+ const spanAttributes = {
48684
+ [ATTRIBUTE_NAME_SESSION_ID]: this.id,
48685
+ [ATTRIBUTE_NAME_TOOL_NAME]: name,
48686
+ [ATTRIBUTE_NAME_TOOL_ARGS_JSON]: redactedToolArgsResult.value,
48687
+ [ATTRIBUTE_NAME_TOOL_ARGS_REDACTED_PATHS_JSON]: JSON.stringify(redactedToolArgsResult.redactedPaths),
48688
+ [ATTRIBUTE_NAME_TOOL_CALL_SEQUENCE_NUMBER]: this.toolCallSequenceGenerator.next().value
48689
+ };
48690
+ await this.frisk.toolRegistrationComplete;
48691
+ const registeredTool = this.frisk.getRegisteredTool(name);
48692
+ if (registeredTool) {
48693
+ spanAttributes[ATTRIBUTE_NAME_FRISK_TOOL_ID] = registeredTool.id;
48694
+ spanAttributes[ATTRIBUTE_NAME_FRISK_TOOL_VERSION_ID] = registeredTool.versionId;
48695
+ }
48696
+ const span = this.getTracer().startSpan(SPAN_NAME_OBSERVE_TOOL_CALL, {
48697
+ attributes: spanAttributes
48698
+ }, parentContext);
48699
+ return span;
48700
+ }
48701
+ closeToolCallSpan({
48702
+ toolCallId,
48703
+ span,
48704
+ err,
48705
+ status
48706
+ }) {
48707
+ if (toolCallId) {
48708
+ span.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_ID, toolCallId);
48709
+ }
48710
+ if (status === "error" /* Error */ || !!err) {
48711
+ this.incrementToolCallErrors();
48712
+ span.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_IS_ERROR, true);
48713
+ span.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_IS_SUCCESS, false);
48714
+ } else if (status === "success" /* Success */) {
48715
+ span.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_IS_SUCCESS, true);
48716
+ span.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_IS_ERROR, false);
48717
+ }
48718
+ if (err && err instanceof Error) {
48719
+ span.setAttribute(ATTRIBUTE_NAME_ERROR_MESSAGE, `${err}`);
48720
+ span.setAttribute(ATTRIBUTE_NAME_ERROR_TYPE, `${err.constructor.name}`);
48721
+ }
48722
+ span.end();
48723
+ }
48724
+ validateToolArgs(parsedToolArgs) {
48725
+ const isPlainObject2 = typeof parsedToolArgs === "object" && parsedToolArgs !== null && !Array.isArray(parsedToolArgs) && (Object.getPrototypeOf(parsedToolArgs) === Object.prototype || Object.getPrototypeOf(parsedToolArgs) === null);
48726
+ const toolArgs = isPlainObject2 ? parsedToolArgs : {};
48727
+ return toolArgs;
48728
+ }
48671
48729
  decideToolCall({
48672
48730
  toolCall,
48673
48731
  agentState
@@ -48724,6 +48782,20 @@ class FriskSession {
48724
48782
  }
48725
48783
  });
48726
48784
  }
48785
+ *createToolCallSequenceGenerator() {
48786
+ while (true) {
48787
+ yield this.toolCallSequenceNumber++;
48788
+ }
48789
+ }
48790
+ getToolCallCount() {
48791
+ return this.toolCallSequenceNumber;
48792
+ }
48793
+ incrementToolCallErrors() {
48794
+ this.toolCallErrorCount += 1;
48795
+ }
48796
+ getToolCallErrorCount() {
48797
+ return this.toolCallErrorCount;
48798
+ }
48727
48799
  initTracing({ runId, inputs }) {
48728
48800
  this._rootRunId = runId;
48729
48801
  this._isTracing = true;
@@ -48739,6 +48811,8 @@ class FriskSession {
48739
48811
  }
48740
48812
  endTracing() {
48741
48813
  if (this._rootSpan) {
48814
+ this._rootSpan.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_COUNT, this.getToolCallCount());
48815
+ this._rootSpan.setAttribute(ATTRIBUTE_NAME_TOOL_CALL_ERROR_COUNT, this.getToolCallErrorCount());
48742
48816
  this._rootSpan.end();
48743
48817
  }
48744
48818
  this._isTracing = false;
@@ -48793,7 +48867,7 @@ import { fileURLToPath } from "node:url";
48793
48867
 
48794
48868
  // src/generated/sdk-meta.ts
48795
48869
  var SDK_NAME = "@friskai/frisk-js";
48796
- var SDK_VERSION = "0.2.8";
48870
+ var SDK_VERSION = "0.2.10";
48797
48871
 
48798
48872
  // src/core/sdk-attributes/read-sdk-meta.ts
48799
48873
  function getSdkMeta() {
@@ -51153,7 +51227,7 @@ var require_code2 = __commonJS2((exports) => {
51153
51227
  return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p]));
51154
51228
  }
51155
51229
  exports.schemaProperties = schemaProperties;
51156
- function callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context2, passSchema) {
51230
+ function callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context3, passSchema) {
51157
51231
  const dataAndSchema = passSchema ? (0, codegen_1._)`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data;
51158
51232
  const valCxt = [
51159
51233
  [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)],
@@ -51164,7 +51238,7 @@ var require_code2 = __commonJS2((exports) => {
51164
51238
  if (it.opts.dynamicRef)
51165
51239
  valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]);
51166
51240
  const args = (0, codegen_1._)`${dataAndSchema}, ${gen.object(...valCxt)}`;
51167
- return context2 !== codegen_1.nil ? (0, codegen_1._)`${func}.call(${context2}, ${args})` : (0, codegen_1._)`${func}(${args})`;
51241
+ return context3 !== codegen_1.nil ? (0, codegen_1._)`${func}.call(${context3}, ${args})` : (0, codegen_1._)`${func}(${args})`;
51168
51242
  }
51169
51243
  exports.callValidateCode = callValidateCode;
51170
51244
  var newRegExp = (0, codegen_1._)`new RegExp`;
@@ -65654,5 +65728,5 @@ export {
65654
65728
  FriskClaude as Frisk
65655
65729
  };
65656
65730
 
65657
- //# debugId=62340F95406CA2D464756E2164756E21
65731
+ //# debugId=5119FBBBF820D1B564756E2164756E21
65658
65732
  //# sourceMappingURL=index.js.map