agentid-sdk 0.1.25 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/langchain.js CHANGED
@@ -27,7 +27,7 @@ var import_base = require("@langchain/core/callbacks/base");
27
27
 
28
28
  // src/sdk-version.ts
29
29
  var FALLBACK_SDK_VERSION = "js-0.0.0-dev";
30
- var AGENTID_SDK_VERSION_HEADER = "js-0.1.25".trim().length > 0 ? "js-0.1.25" : FALLBACK_SDK_VERSION;
30
+ var AGENTID_SDK_VERSION_HEADER = "js-0.1.26".trim().length > 0 ? "js-0.1.26" : FALLBACK_SDK_VERSION;
31
31
 
32
32
  // src/pii-national-identifiers.ts
33
33
  var REGION_ANCHORS = {
@@ -254,6 +254,14 @@ function logCallbackDebug(message, details) {
254
254
  }
255
255
  console.log(`[AgentID][LC] ${message}`);
256
256
  }
257
+ function setFiniteDurationMetadata(metadata, key, value) {
258
+ if (typeof value === "number" && Number.isFinite(value)) {
259
+ metadata[key] = Math.max(0, Math.trunc(value));
260
+ }
261
+ }
262
+ function isGuardFailureEligibleForLocalFallback(reason) {
263
+ return reason === "network_error_strict_mode" || reason === "server_error" || reason === "system_failure" || reason === "system_failure_db_unavailable" || reason === "logging_failed" || reason === "guard_unreachable" || reason === "api_key_pepper_missing" || reason === "encryption_key_missing";
264
+ }
257
265
  function extractTextFromContent(content) {
258
266
  if (typeof content === "string") {
259
267
  return content;
@@ -479,15 +487,14 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
479
487
  }
480
488
  };
481
489
  }
482
- async preflight(input, stream) {
483
- await this.agent.scanPromptInjection(input, this.requestOptions);
490
+ async preflight(input, stream, clientEventId) {
484
491
  const prepared = await this.agent.prepareInputForDispatch({
485
492
  input,
486
493
  systemId: this.systemId,
487
494
  stream,
488
- skipInjectionScan: true
495
+ clientEventId
489
496
  }, this.requestOptions);
490
- return prepared.sanitizedInput;
497
+ return prepared;
491
498
  }
492
499
  async handleLLMStart(serialized, prompts, runId, _parentRunId, extraParams) {
493
500
  const input = extractPromptFromPrompts(prompts);
@@ -496,8 +503,10 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
496
503
  if (!input) {
497
504
  return;
498
505
  }
506
+ const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
499
507
  const stream = extractStreamFlag(serialized, extraParams);
500
- const sanitizedInput = await this.preflight(input, stream);
508
+ const prepared = await this.preflight(input, stream, requestedClientEventId);
509
+ const sanitizedInput = prepared.sanitizedInput;
501
510
  if (sanitizedInput !== input) {
502
511
  const mutated = setPromptInPrompts(prompts, sanitizedInput);
503
512
  if (!mutated) {
@@ -506,7 +515,6 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
506
515
  );
507
516
  }
508
517
  }
509
- const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
510
518
  const modelName = extractModel(serialized, extraParams);
511
519
  const pipelineStartedAtMs = Date.now();
512
520
  const verdict = await this.agent.guard({
@@ -517,18 +525,44 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
517
525
  expected_languages: this.expectedLanguages,
518
526
  client_capabilities: this.getLangchainCapabilities()
519
527
  }, this.requestOptions);
528
+ let transformedForRun = sanitizedInput;
529
+ let sdkLocalScanMs = prepared.sdkLocalScanMs;
530
+ let localFallbackApplied = false;
531
+ let localFallbackReason = null;
520
532
  if (!verdict.allowed) {
521
- throw new SecurityBlockError(verdict.reason ?? "guard_denied");
533
+ const fallbackEligible = isGuardFailureEligibleForLocalFallback(verdict.reason) && verdict.reason !== "guard_denied";
534
+ if (fallbackEligible) {
535
+ const fallback = await this.agent.applyLocalFallbackForGuardFailure({
536
+ input: sanitizedInput,
537
+ systemId: this.systemId,
538
+ stream,
539
+ clientEventId: requestedClientEventId,
540
+ capabilityConfig: prepared.capabilityConfig,
541
+ sdkConfigFetchMs: prepared.sdkConfigFetchMs
542
+ }, this.requestOptions);
543
+ transformedForRun = fallback.sanitizedInput;
544
+ sdkLocalScanMs = fallback.sdkLocalScanMs;
545
+ localFallbackApplied = true;
546
+ localFallbackReason = verdict.reason ?? "guard_unreachable";
547
+ } else {
548
+ throw new SecurityBlockError(verdict.reason ?? "guard_denied");
549
+ }
550
+ }
551
+ if (transformedForRun !== sanitizedInput) {
552
+ const mutated = setPromptInPrompts(prompts, transformedForRun);
553
+ if (!mutated) {
554
+ transformedForRun = sanitizedInput;
555
+ }
522
556
  }
523
557
  const canonicalClientEventId = isUuidLike(verdict.client_event_id) ? verdict.client_event_id.trim() : requestedClientEventId;
524
558
  const guardEventId = typeof verdict.guard_event_id === "string" && verdict.guard_event_id.length > 0 ? verdict.guard_event_id : void 0;
525
559
  const guardLatencyMs = typeof verdict.guard_latency_ms === "number" && Number.isFinite(verdict.guard_latency_ms) ? Math.max(0, Math.trunc(verdict.guard_latency_ms)) : Math.max(0, Date.now() - pipelineStartedAtMs);
526
560
  const transparency = coerceTransparencyMetadata(verdict.transparency);
527
- let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : sanitizedInput;
528
- if (transformedInput !== sanitizedInput) {
561
+ let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : transformedForRun;
562
+ if (transformedInput !== transformedForRun) {
529
563
  const mutated = setPromptInPrompts(prompts, transformedInput);
530
564
  if (!mutated) {
531
- transformedInput = sanitizedInput;
565
+ transformedInput = transformedForRun;
532
566
  }
533
567
  }
534
568
  this.runs.set(id, {
@@ -536,6 +570,10 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
536
570
  startedAtMs: Date.now(),
537
571
  pipelineStartedAtMs,
538
572
  guardLatencyMs,
573
+ sdkConfigFetchMs: prepared.sdkConfigFetchMs,
574
+ sdkLocalScanMs,
575
+ localFallbackApplied,
576
+ localFallbackReason,
539
577
  model: modelName,
540
578
  clientEventId: canonicalClientEventId,
541
579
  guardEventId,
@@ -554,8 +592,10 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
554
592
  if (!input) {
555
593
  return;
556
594
  }
595
+ const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
557
596
  const stream = extractStreamFlag(serialized, extraParams);
558
- const sanitizedInput = await this.preflight(input, stream);
597
+ const prepared = await this.preflight(input, stream, requestedClientEventId);
598
+ const sanitizedInput = prepared.sanitizedInput;
559
599
  if (sanitizedInput !== input) {
560
600
  const mutated = setPromptInMessages(messages, sanitizedInput);
561
601
  if (!mutated) {
@@ -564,7 +604,6 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
564
604
  );
565
605
  }
566
606
  }
567
- const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
568
607
  const modelName = extractModel(serialized, extraParams);
569
608
  const pipelineStartedAtMs = Date.now();
570
609
  const verdict = await this.agent.guard({
@@ -575,18 +614,44 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
575
614
  expected_languages: this.expectedLanguages,
576
615
  client_capabilities: this.getLangchainCapabilities()
577
616
  }, this.requestOptions);
617
+ let transformedForRun = sanitizedInput;
618
+ let sdkLocalScanMs = prepared.sdkLocalScanMs;
619
+ let localFallbackApplied = false;
620
+ let localFallbackReason = null;
578
621
  if (!verdict.allowed) {
579
- throw new SecurityBlockError(verdict.reason ?? "guard_denied");
622
+ const fallbackEligible = isGuardFailureEligibleForLocalFallback(verdict.reason) && verdict.reason !== "guard_denied";
623
+ if (fallbackEligible) {
624
+ const fallback = await this.agent.applyLocalFallbackForGuardFailure({
625
+ input: sanitizedInput,
626
+ systemId: this.systemId,
627
+ stream,
628
+ clientEventId: requestedClientEventId,
629
+ capabilityConfig: prepared.capabilityConfig,
630
+ sdkConfigFetchMs: prepared.sdkConfigFetchMs
631
+ }, this.requestOptions);
632
+ transformedForRun = fallback.sanitizedInput;
633
+ sdkLocalScanMs = fallback.sdkLocalScanMs;
634
+ localFallbackApplied = true;
635
+ localFallbackReason = verdict.reason ?? "guard_unreachable";
636
+ } else {
637
+ throw new SecurityBlockError(verdict.reason ?? "guard_denied");
638
+ }
639
+ }
640
+ if (transformedForRun !== sanitizedInput) {
641
+ const mutated = setPromptInMessages(messages, transformedForRun);
642
+ if (!mutated) {
643
+ transformedForRun = sanitizedInput;
644
+ }
580
645
  }
581
646
  const canonicalClientEventId = isUuidLike(verdict.client_event_id) ? verdict.client_event_id.trim() : requestedClientEventId;
582
647
  const guardEventId = typeof verdict.guard_event_id === "string" && verdict.guard_event_id.length > 0 ? verdict.guard_event_id : void 0;
583
648
  const guardLatencyMs = typeof verdict.guard_latency_ms === "number" && Number.isFinite(verdict.guard_latency_ms) ? Math.max(0, Math.trunc(verdict.guard_latency_ms)) : Math.max(0, Date.now() - pipelineStartedAtMs);
584
649
  const transparency = coerceTransparencyMetadata(verdict.transparency);
585
- let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : sanitizedInput;
586
- if (transformedInput !== sanitizedInput) {
650
+ let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : transformedForRun;
651
+ if (transformedInput !== transformedForRun) {
587
652
  const mutated = setPromptInMessages(messages, transformedInput);
588
653
  if (!mutated) {
589
- transformedInput = sanitizedInput;
654
+ transformedInput = transformedForRun;
590
655
  }
591
656
  }
592
657
  this.runs.set(id, {
@@ -594,6 +659,10 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
594
659
  startedAtMs: Date.now(),
595
660
  pipelineStartedAtMs,
596
661
  guardLatencyMs,
662
+ sdkConfigFetchMs: prepared.sdkConfigFetchMs,
663
+ sdkLocalScanMs,
664
+ localFallbackApplied,
665
+ localFallbackReason,
597
666
  model: modelName,
598
667
  clientEventId: canonicalClientEventId,
599
668
  guardEventId,
@@ -630,7 +699,12 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
630
699
  }
631
700
  if (typeof state.guardLatencyMs === "number" && Number.isFinite(state.guardLatencyMs)) {
632
701
  metadata.guard_latency_ms = state.guardLatencyMs;
702
+ metadata.sdk_guard_ms = state.guardLatencyMs;
633
703
  }
704
+ setFiniteDurationMetadata(metadata, "sdk_config_fetch_ms", state.sdkConfigFetchMs);
705
+ setFiniteDurationMetadata(metadata, "sdk_local_scan_ms", state.sdkLocalScanMs);
706
+ metadata.sdk_local_fallback_applied = state.localFallbackApplied === true;
707
+ metadata.sdk_local_fallback_reason = state.localFallbackReason ?? null;
634
708
  if (state.transparency) {
635
709
  metadata.transparency = state.transparency;
636
710
  }
@@ -670,7 +744,12 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
670
744
  }
671
745
  if (typeof state?.guardLatencyMs === "number" && Number.isFinite(state.guardLatencyMs)) {
672
746
  metadata.guard_latency_ms = state.guardLatencyMs;
747
+ metadata.sdk_guard_ms = state.guardLatencyMs;
673
748
  }
749
+ setFiniteDurationMetadata(metadata, "sdk_config_fetch_ms", state?.sdkConfigFetchMs);
750
+ setFiniteDurationMetadata(metadata, "sdk_local_scan_ms", state?.sdkLocalScanMs);
751
+ metadata.sdk_local_fallback_applied = state?.localFallbackApplied === true;
752
+ metadata.sdk_local_fallback_reason = state?.localFallbackReason ?? null;
674
753
  if (state?.transparency) {
675
754
  metadata.transparency = state.transparency;
676
755
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SecurityBlockError
3
- } from "./chunk-3PLUMWYC.mjs";
3
+ } from "./chunk-JIQGHFHI.mjs";
4
4
 
5
5
  // src/langchain.ts
6
6
  import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
@@ -46,6 +46,14 @@ function logCallbackDebug(message, details) {
46
46
  }
47
47
  console.log(`[AgentID][LC] ${message}`);
48
48
  }
49
+ function setFiniteDurationMetadata(metadata, key, value) {
50
+ if (typeof value === "number" && Number.isFinite(value)) {
51
+ metadata[key] = Math.max(0, Math.trunc(value));
52
+ }
53
+ }
54
+ function isGuardFailureEligibleForLocalFallback(reason) {
55
+ return reason === "network_error_strict_mode" || reason === "server_error" || reason === "system_failure" || reason === "system_failure_db_unavailable" || reason === "logging_failed" || reason === "guard_unreachable" || reason === "api_key_pepper_missing" || reason === "encryption_key_missing";
56
+ }
49
57
  function extractTextFromContent(content) {
50
58
  if (typeof content === "string") {
51
59
  return content;
@@ -271,15 +279,14 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
271
279
  }
272
280
  };
273
281
  }
274
- async preflight(input, stream) {
275
- await this.agent.scanPromptInjection(input, this.requestOptions);
282
+ async preflight(input, stream, clientEventId) {
276
283
  const prepared = await this.agent.prepareInputForDispatch({
277
284
  input,
278
285
  systemId: this.systemId,
279
286
  stream,
280
- skipInjectionScan: true
287
+ clientEventId
281
288
  }, this.requestOptions);
282
- return prepared.sanitizedInput;
289
+ return prepared;
283
290
  }
284
291
  async handleLLMStart(serialized, prompts, runId, _parentRunId, extraParams) {
285
292
  const input = extractPromptFromPrompts(prompts);
@@ -288,8 +295,10 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
288
295
  if (!input) {
289
296
  return;
290
297
  }
298
+ const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
291
299
  const stream = extractStreamFlag(serialized, extraParams);
292
- const sanitizedInput = await this.preflight(input, stream);
300
+ const prepared = await this.preflight(input, stream, requestedClientEventId);
301
+ const sanitizedInput = prepared.sanitizedInput;
293
302
  if (sanitizedInput !== input) {
294
303
  const mutated = setPromptInPrompts(prompts, sanitizedInput);
295
304
  if (!mutated) {
@@ -298,7 +307,6 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
298
307
  );
299
308
  }
300
309
  }
301
- const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
302
310
  const modelName = extractModel(serialized, extraParams);
303
311
  const pipelineStartedAtMs = Date.now();
304
312
  const verdict = await this.agent.guard({
@@ -309,18 +317,44 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
309
317
  expected_languages: this.expectedLanguages,
310
318
  client_capabilities: this.getLangchainCapabilities()
311
319
  }, this.requestOptions);
320
+ let transformedForRun = sanitizedInput;
321
+ let sdkLocalScanMs = prepared.sdkLocalScanMs;
322
+ let localFallbackApplied = false;
323
+ let localFallbackReason = null;
312
324
  if (!verdict.allowed) {
313
- throw new SecurityBlockError(verdict.reason ?? "guard_denied");
325
+ const fallbackEligible = isGuardFailureEligibleForLocalFallback(verdict.reason) && verdict.reason !== "guard_denied";
326
+ if (fallbackEligible) {
327
+ const fallback = await this.agent.applyLocalFallbackForGuardFailure({
328
+ input: sanitizedInput,
329
+ systemId: this.systemId,
330
+ stream,
331
+ clientEventId: requestedClientEventId,
332
+ capabilityConfig: prepared.capabilityConfig,
333
+ sdkConfigFetchMs: prepared.sdkConfigFetchMs
334
+ }, this.requestOptions);
335
+ transformedForRun = fallback.sanitizedInput;
336
+ sdkLocalScanMs = fallback.sdkLocalScanMs;
337
+ localFallbackApplied = true;
338
+ localFallbackReason = verdict.reason ?? "guard_unreachable";
339
+ } else {
340
+ throw new SecurityBlockError(verdict.reason ?? "guard_denied");
341
+ }
342
+ }
343
+ if (transformedForRun !== sanitizedInput) {
344
+ const mutated = setPromptInPrompts(prompts, transformedForRun);
345
+ if (!mutated) {
346
+ transformedForRun = sanitizedInput;
347
+ }
314
348
  }
315
349
  const canonicalClientEventId = isUuidLike(verdict.client_event_id) ? verdict.client_event_id.trim() : requestedClientEventId;
316
350
  const guardEventId = typeof verdict.guard_event_id === "string" && verdict.guard_event_id.length > 0 ? verdict.guard_event_id : void 0;
317
351
  const guardLatencyMs = typeof verdict.guard_latency_ms === "number" && Number.isFinite(verdict.guard_latency_ms) ? Math.max(0, Math.trunc(verdict.guard_latency_ms)) : Math.max(0, Date.now() - pipelineStartedAtMs);
318
352
  const transparency = coerceTransparencyMetadata(verdict.transparency);
319
- let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : sanitizedInput;
320
- if (transformedInput !== sanitizedInput) {
353
+ let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : transformedForRun;
354
+ if (transformedInput !== transformedForRun) {
321
355
  const mutated = setPromptInPrompts(prompts, transformedInput);
322
356
  if (!mutated) {
323
- transformedInput = sanitizedInput;
357
+ transformedInput = transformedForRun;
324
358
  }
325
359
  }
326
360
  this.runs.set(id, {
@@ -328,6 +362,10 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
328
362
  startedAtMs: Date.now(),
329
363
  pipelineStartedAtMs,
330
364
  guardLatencyMs,
365
+ sdkConfigFetchMs: prepared.sdkConfigFetchMs,
366
+ sdkLocalScanMs,
367
+ localFallbackApplied,
368
+ localFallbackReason,
331
369
  model: modelName,
332
370
  clientEventId: canonicalClientEventId,
333
371
  guardEventId,
@@ -346,8 +384,10 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
346
384
  if (!input) {
347
385
  return;
348
386
  }
387
+ const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
349
388
  const stream = extractStreamFlag(serialized, extraParams);
350
- const sanitizedInput = await this.preflight(input, stream);
389
+ const prepared = await this.preflight(input, stream, requestedClientEventId);
390
+ const sanitizedInput = prepared.sanitizedInput;
351
391
  if (sanitizedInput !== input) {
352
392
  const mutated = setPromptInMessages(messages, sanitizedInput);
353
393
  if (!mutated) {
@@ -356,7 +396,6 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
356
396
  );
357
397
  }
358
398
  }
359
- const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
360
399
  const modelName = extractModel(serialized, extraParams);
361
400
  const pipelineStartedAtMs = Date.now();
362
401
  const verdict = await this.agent.guard({
@@ -367,18 +406,44 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
367
406
  expected_languages: this.expectedLanguages,
368
407
  client_capabilities: this.getLangchainCapabilities()
369
408
  }, this.requestOptions);
409
+ let transformedForRun = sanitizedInput;
410
+ let sdkLocalScanMs = prepared.sdkLocalScanMs;
411
+ let localFallbackApplied = false;
412
+ let localFallbackReason = null;
370
413
  if (!verdict.allowed) {
371
- throw new SecurityBlockError(verdict.reason ?? "guard_denied");
414
+ const fallbackEligible = isGuardFailureEligibleForLocalFallback(verdict.reason) && verdict.reason !== "guard_denied";
415
+ if (fallbackEligible) {
416
+ const fallback = await this.agent.applyLocalFallbackForGuardFailure({
417
+ input: sanitizedInput,
418
+ systemId: this.systemId,
419
+ stream,
420
+ clientEventId: requestedClientEventId,
421
+ capabilityConfig: prepared.capabilityConfig,
422
+ sdkConfigFetchMs: prepared.sdkConfigFetchMs
423
+ }, this.requestOptions);
424
+ transformedForRun = fallback.sanitizedInput;
425
+ sdkLocalScanMs = fallback.sdkLocalScanMs;
426
+ localFallbackApplied = true;
427
+ localFallbackReason = verdict.reason ?? "guard_unreachable";
428
+ } else {
429
+ throw new SecurityBlockError(verdict.reason ?? "guard_denied");
430
+ }
431
+ }
432
+ if (transformedForRun !== sanitizedInput) {
433
+ const mutated = setPromptInMessages(messages, transformedForRun);
434
+ if (!mutated) {
435
+ transformedForRun = sanitizedInput;
436
+ }
372
437
  }
373
438
  const canonicalClientEventId = isUuidLike(verdict.client_event_id) ? verdict.client_event_id.trim() : requestedClientEventId;
374
439
  const guardEventId = typeof verdict.guard_event_id === "string" && verdict.guard_event_id.length > 0 ? verdict.guard_event_id : void 0;
375
440
  const guardLatencyMs = typeof verdict.guard_latency_ms === "number" && Number.isFinite(verdict.guard_latency_ms) ? Math.max(0, Math.trunc(verdict.guard_latency_ms)) : Math.max(0, Date.now() - pipelineStartedAtMs);
376
441
  const transparency = coerceTransparencyMetadata(verdict.transparency);
377
- let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : sanitizedInput;
378
- if (transformedInput !== sanitizedInput) {
442
+ let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : transformedForRun;
443
+ if (transformedInput !== transformedForRun) {
379
444
  const mutated = setPromptInMessages(messages, transformedInput);
380
445
  if (!mutated) {
381
- transformedInput = sanitizedInput;
446
+ transformedInput = transformedForRun;
382
447
  }
383
448
  }
384
449
  this.runs.set(id, {
@@ -386,6 +451,10 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
386
451
  startedAtMs: Date.now(),
387
452
  pipelineStartedAtMs,
388
453
  guardLatencyMs,
454
+ sdkConfigFetchMs: prepared.sdkConfigFetchMs,
455
+ sdkLocalScanMs,
456
+ localFallbackApplied,
457
+ localFallbackReason,
389
458
  model: modelName,
390
459
  clientEventId: canonicalClientEventId,
391
460
  guardEventId,
@@ -422,7 +491,12 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
422
491
  }
423
492
  if (typeof state.guardLatencyMs === "number" && Number.isFinite(state.guardLatencyMs)) {
424
493
  metadata.guard_latency_ms = state.guardLatencyMs;
494
+ metadata.sdk_guard_ms = state.guardLatencyMs;
425
495
  }
496
+ setFiniteDurationMetadata(metadata, "sdk_config_fetch_ms", state.sdkConfigFetchMs);
497
+ setFiniteDurationMetadata(metadata, "sdk_local_scan_ms", state.sdkLocalScanMs);
498
+ metadata.sdk_local_fallback_applied = state.localFallbackApplied === true;
499
+ metadata.sdk_local_fallback_reason = state.localFallbackReason ?? null;
426
500
  if (state.transparency) {
427
501
  metadata.transparency = state.transparency;
428
502
  }
@@ -462,7 +536,12 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
462
536
  }
463
537
  if (typeof state?.guardLatencyMs === "number" && Number.isFinite(state.guardLatencyMs)) {
464
538
  metadata.guard_latency_ms = state.guardLatencyMs;
539
+ metadata.sdk_guard_ms = state.guardLatencyMs;
465
540
  }
541
+ setFiniteDurationMetadata(metadata, "sdk_config_fetch_ms", state?.sdkConfigFetchMs);
542
+ setFiniteDurationMetadata(metadata, "sdk_local_scan_ms", state?.sdkLocalScanMs);
543
+ metadata.sdk_local_fallback_applied = state?.localFallbackApplied === true;
544
+ metadata.sdk_local_fallback_reason = state?.localFallbackReason ?? null;
466
545
  if (state?.transparency) {
467
546
  metadata.transparency = state.transparency;
468
547
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentid-sdk",
3
- "version": "0.1.25",
3
+ "version": "0.1.26",
4
4
  "description": "AgentID JavaScript/TypeScript SDK for guard, ingest, tracing, and analytics.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://agentid.ai",