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/README.md +26 -5
- package/dist/{agentid-B5Y1g2Ko.d.mts → agentid-DviYzyAM.d.mts} +17 -0
- package/dist/{agentid-B5Y1g2Ko.d.ts → agentid-DviYzyAM.d.ts} +17 -0
- package/dist/{chunk-3PLUMWYC.mjs → chunk-JIQGHFHI.mjs} +311 -35
- package/dist/index.d.mts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +311 -35
- package/dist/index.mjs +1 -1
- package/dist/langchain.d.mts +1 -1
- package/dist/langchain.d.ts +1 -1
- package/dist/langchain.js +96 -17
- package/dist/langchain.mjs +96 -17
- package/package.json +1 -1
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.
|
|
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
|
-
|
|
495
|
+
clientEventId
|
|
489
496
|
}, this.requestOptions);
|
|
490
|
-
return prepared
|
|
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
|
|
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
|
-
|
|
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 :
|
|
528
|
-
if (transformedInput !==
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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 :
|
|
586
|
-
if (transformedInput !==
|
|
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 =
|
|
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
|
}
|
package/dist/langchain.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SecurityBlockError
|
|
3
|
-
} from "./chunk-
|
|
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
|
-
|
|
287
|
+
clientEventId
|
|
281
288
|
}, this.requestOptions);
|
|
282
|
-
return prepared
|
|
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
|
|
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
|
-
|
|
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 :
|
|
320
|
-
if (transformedInput !==
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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 :
|
|
378
|
-
if (transformedInput !==
|
|
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 =
|
|
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
|
}
|