agentid-sdk 0.1.37 → 0.1.40
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 +303 -57
- package/dist/agentid-BWlN5KCq.d.mts +400 -0
- package/dist/agentid-BWlN5KCq.d.ts +400 -0
- package/dist/{chunk-HWES3LI2.mjs → chunk-25SZBEYX.mjs} +1596 -169
- package/dist/index.d.mts +19 -3
- package/dist/index.d.ts +19 -3
- package/dist/index.js +1655 -168
- package/dist/index.mjs +66 -1
- package/dist/langchain.d.mts +15 -1
- package/dist/langchain.d.ts +15 -1
- package/dist/langchain.js +988 -71
- package/dist/langchain.mjs +451 -16
- package/dist/transparency-badge.d.mts +1 -1
- package/dist/transparency-badge.d.ts +1 -1
- package/package.json +9 -5
- package/dist/agentid-JQx2Iy7B.d.mts +0 -240
- package/dist/agentid-JQx2Iy7B.d.ts +0 -240
package/dist/langchain.mjs
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
2
|
PIIManager,
|
|
3
|
-
SecurityBlockError
|
|
4
|
-
|
|
3
|
+
SecurityBlockError,
|
|
4
|
+
createAgentIdTelemetryContext
|
|
5
|
+
} from "./chunk-25SZBEYX.mjs";
|
|
5
6
|
|
|
6
7
|
// src/langchain.ts
|
|
7
8
|
import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
|
|
8
9
|
var piiManager = new PIIManager();
|
|
10
|
+
var LANGCHAIN_TELEMETRY_FIELD = "agentid_telemetry";
|
|
9
11
|
function safeString(val) {
|
|
10
12
|
return typeof val === "string" ? val : "";
|
|
11
13
|
}
|
|
14
|
+
function firstNonEmptyString(...values) {
|
|
15
|
+
for (const value of values) {
|
|
16
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
17
|
+
return value.trim();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return void 0;
|
|
21
|
+
}
|
|
12
22
|
function normalizeExpectedLanguages(value) {
|
|
13
23
|
if (!Array.isArray(value)) {
|
|
14
24
|
return void 0;
|
|
@@ -18,6 +28,121 @@ function normalizeExpectedLanguages(value) {
|
|
|
18
28
|
)];
|
|
19
29
|
return normalized.length > 0 ? normalized : void 0;
|
|
20
30
|
}
|
|
31
|
+
function isPlainRecord(value) {
|
|
32
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
33
|
+
}
|
|
34
|
+
function hasKnownTelemetryField(record) {
|
|
35
|
+
const knownKeys = [
|
|
36
|
+
"workflow_id",
|
|
37
|
+
"workflowId",
|
|
38
|
+
"workflow_run_id",
|
|
39
|
+
"workflowRunId",
|
|
40
|
+
"workflow_step_id",
|
|
41
|
+
"workflowStepId",
|
|
42
|
+
"workflow_name",
|
|
43
|
+
"workflowName",
|
|
44
|
+
"workflow_step_name",
|
|
45
|
+
"workflowStepName",
|
|
46
|
+
"workflow_step_index",
|
|
47
|
+
"workflowStepIndex",
|
|
48
|
+
"parent_event_id",
|
|
49
|
+
"parentEventId",
|
|
50
|
+
"tool_name",
|
|
51
|
+
"toolName",
|
|
52
|
+
"tool_target",
|
|
53
|
+
"toolTarget",
|
|
54
|
+
"tool_target_type",
|
|
55
|
+
"toolTargetType",
|
|
56
|
+
"event_title",
|
|
57
|
+
"eventTitle",
|
|
58
|
+
"event_status",
|
|
59
|
+
"eventStatus",
|
|
60
|
+
"event_category",
|
|
61
|
+
"eventCategory",
|
|
62
|
+
"event_subtype",
|
|
63
|
+
"eventSubtype"
|
|
64
|
+
];
|
|
65
|
+
return knownKeys.some((key) => Object.prototype.hasOwnProperty.call(record, key));
|
|
66
|
+
}
|
|
67
|
+
function asTelemetryContext(value) {
|
|
68
|
+
if (!isPlainRecord(value)) {
|
|
69
|
+
return void 0;
|
|
70
|
+
}
|
|
71
|
+
return createAgentIdTelemetryContext(value);
|
|
72
|
+
}
|
|
73
|
+
function mergeTelemetryContexts(...contexts) {
|
|
74
|
+
const merged = {};
|
|
75
|
+
let hasValues = false;
|
|
76
|
+
for (const context of contexts) {
|
|
77
|
+
const normalized = createAgentIdTelemetryContext(context);
|
|
78
|
+
if (!normalized) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
Object.assign(merged, normalized);
|
|
82
|
+
hasValues = true;
|
|
83
|
+
}
|
|
84
|
+
return hasValues ? createAgentIdTelemetryContext(merged) : void 0;
|
|
85
|
+
}
|
|
86
|
+
function extractTelemetryFromRecord(record) {
|
|
87
|
+
const candidates = [];
|
|
88
|
+
const add = (value) => {
|
|
89
|
+
const telemetry = asTelemetryContext(value);
|
|
90
|
+
if (telemetry) {
|
|
91
|
+
candidates.push(telemetry);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
add(record[LANGCHAIN_TELEMETRY_FIELD]);
|
|
95
|
+
add(record.agentidTelemetry);
|
|
96
|
+
const agentid = record.agentid;
|
|
97
|
+
if (isPlainRecord(agentid)) {
|
|
98
|
+
add(agentid.telemetry);
|
|
99
|
+
add(agentid.telemetryMetadata);
|
|
100
|
+
}
|
|
101
|
+
if (hasKnownTelemetryField(record)) {
|
|
102
|
+
add(record);
|
|
103
|
+
}
|
|
104
|
+
return mergeTelemetryContexts(...candidates);
|
|
105
|
+
}
|
|
106
|
+
function extractLangChainTelemetryContext(extraParams) {
|
|
107
|
+
if (!isPlainRecord(extraParams)) {
|
|
108
|
+
return void 0;
|
|
109
|
+
}
|
|
110
|
+
const contexts = [];
|
|
111
|
+
const addFromRecord = (record) => {
|
|
112
|
+
if (!isPlainRecord(record)) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const telemetry = extractTelemetryFromRecord(record);
|
|
116
|
+
if (telemetry) {
|
|
117
|
+
contexts.push(telemetry);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
addFromRecord(extraParams);
|
|
121
|
+
addFromRecord(extraParams.metadata);
|
|
122
|
+
addFromRecord(extraParams.options);
|
|
123
|
+
if (isPlainRecord(extraParams.options)) {
|
|
124
|
+
addFromRecord(extraParams.options.metadata);
|
|
125
|
+
}
|
|
126
|
+
addFromRecord(extraParams.invocation_params);
|
|
127
|
+
if (isPlainRecord(extraParams.invocation_params)) {
|
|
128
|
+
addFromRecord(extraParams.invocation_params.metadata);
|
|
129
|
+
}
|
|
130
|
+
addFromRecord(extraParams.kwargs);
|
|
131
|
+
if (isPlainRecord(extraParams.kwargs)) {
|
|
132
|
+
addFromRecord(extraParams.kwargs.metadata);
|
|
133
|
+
}
|
|
134
|
+
return mergeTelemetryContexts(...contexts);
|
|
135
|
+
}
|
|
136
|
+
function extractTelemetryFromValues(...values) {
|
|
137
|
+
const contexts = [];
|
|
138
|
+
for (const value of values) {
|
|
139
|
+
const telemetry = extractLangChainTelemetryContext(value);
|
|
140
|
+
if (telemetry) {
|
|
141
|
+
contexts.push(telemetry);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return mergeTelemetryContexts(...contexts);
|
|
145
|
+
}
|
|
21
146
|
function coerceTransparencyMetadata(value) {
|
|
22
147
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
23
148
|
return void 0;
|
|
@@ -188,6 +313,40 @@ function extractModel(serialized, kwargs) {
|
|
|
188
313
|
if (typeof name === "string" && name) return name;
|
|
189
314
|
return void 0;
|
|
190
315
|
}
|
|
316
|
+
function extractToolName(serialized, extras, telemetry) {
|
|
317
|
+
const serializedRecord = serialized && typeof serialized === "object" ? serialized : void 0;
|
|
318
|
+
const extraName = extras.find(
|
|
319
|
+
(value) => typeof value === "string" && value.trim().length > 0
|
|
320
|
+
);
|
|
321
|
+
return firstNonEmptyString(
|
|
322
|
+
telemetry?.tool_name,
|
|
323
|
+
telemetry?.toolName,
|
|
324
|
+
serializedRecord?.name,
|
|
325
|
+
serializedRecord?.id,
|
|
326
|
+
serializedRecord?.tool_name,
|
|
327
|
+
serializedRecord?.toolName,
|
|
328
|
+
extraName
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
function extractWorkflowName(serialized, extras, telemetry) {
|
|
332
|
+
const serializedRecord = serialized && typeof serialized === "object" ? serialized : void 0;
|
|
333
|
+
const extraName = extras.find(
|
|
334
|
+
(value) => typeof value === "string" && value.trim().length > 0
|
|
335
|
+
);
|
|
336
|
+
return firstNonEmptyString(
|
|
337
|
+
telemetry?.workflow_step_name,
|
|
338
|
+
telemetry?.workflowStepName,
|
|
339
|
+
telemetry?.workflow_name,
|
|
340
|
+
telemetry?.workflowName,
|
|
341
|
+
telemetry?.event_title,
|
|
342
|
+
telemetry?.eventTitle,
|
|
343
|
+
serializedRecord?.name,
|
|
344
|
+
serializedRecord?.id,
|
|
345
|
+
serializedRecord?.chain_name,
|
|
346
|
+
serializedRecord?.chainName,
|
|
347
|
+
extraName
|
|
348
|
+
);
|
|
349
|
+
}
|
|
191
350
|
function extractModelFromOutput(output) {
|
|
192
351
|
const llmOutput = output?.llmOutput ?? output?.llm_output;
|
|
193
352
|
const llmModel = llmOutput?.model ?? llmOutput?.model_name ?? llmOutput?.modelName;
|
|
@@ -338,22 +497,28 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
338
497
|
super();
|
|
339
498
|
this.name = "agentid_callback_handler";
|
|
340
499
|
this.runs = /* @__PURE__ */ new Map();
|
|
500
|
+
this.toolRuns = /* @__PURE__ */ new Map();
|
|
501
|
+
this.chainRuns = /* @__PURE__ */ new Map();
|
|
341
502
|
this.agent = agent;
|
|
342
503
|
this.systemId = options.system_id;
|
|
343
504
|
this.expectedLanguages = normalizeExpectedLanguages(
|
|
344
505
|
options.expected_languages ?? options.expectedLanguages
|
|
345
506
|
);
|
|
346
507
|
this.apiKeyOverride = options.apiKey?.trim() || options.api_key?.trim() || void 0;
|
|
508
|
+
this.telemetry = createAgentIdTelemetryContext(options.telemetry);
|
|
347
509
|
}
|
|
348
510
|
get requestOptions() {
|
|
349
511
|
return this.apiKeyOverride ? { apiKey: this.apiKeyOverride } : void 0;
|
|
350
512
|
}
|
|
351
|
-
getLangchainCapabilities(piiMaskingEnabled) {
|
|
513
|
+
getLangchainCapabilities(piiMaskingEnabled, secretMaskingEnabled) {
|
|
352
514
|
const resolvedPiiMaskingEnabled = typeof piiMaskingEnabled === "boolean" ? piiMaskingEnabled : this.agent.getEffectivePiiMasking(this.requestOptions);
|
|
515
|
+
const agentWithResolvedSecret = this.agent;
|
|
516
|
+
const resolvedSecretMaskingEnabled = typeof secretMaskingEnabled === "boolean" ? secretMaskingEnabled : typeof agentWithResolvedSecret.getEffectiveSecretMaskingForConfig === "function" ? agentWithResolvedSecret.getEffectiveSecretMaskingForConfig() : false;
|
|
353
517
|
return {
|
|
354
518
|
capabilities: {
|
|
355
519
|
has_feedback_handler: true,
|
|
356
520
|
pii_masking_enabled: resolvedPiiMaskingEnabled,
|
|
521
|
+
secret_masking_enabled: resolvedSecretMaskingEnabled,
|
|
357
522
|
framework: "langchain"
|
|
358
523
|
}
|
|
359
524
|
};
|
|
@@ -365,15 +530,76 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
365
530
|
}
|
|
366
531
|
return this.agent.getEffectivePiiMasking(this.requestOptions);
|
|
367
532
|
}
|
|
368
|
-
|
|
533
|
+
resolvePreparedSecretMaskingEnabled(prepared) {
|
|
534
|
+
const agentWithResolvedConfig = this.agent;
|
|
535
|
+
if (typeof agentWithResolvedConfig.getEffectiveSecretMaskingForConfig === "function") {
|
|
536
|
+
return agentWithResolvedConfig.getEffectiveSecretMaskingForConfig(
|
|
537
|
+
prepared.capabilityConfig
|
|
538
|
+
);
|
|
539
|
+
}
|
|
540
|
+
return false;
|
|
541
|
+
}
|
|
542
|
+
async preflight(input, stream, clientEventId, telemetryMetadata) {
|
|
369
543
|
const prepared = await this.agent.prepareInputForDispatch({
|
|
370
544
|
input,
|
|
371
545
|
systemId: this.systemId,
|
|
372
546
|
stream,
|
|
373
|
-
clientEventId
|
|
547
|
+
clientEventId,
|
|
548
|
+
telemetryMetadata
|
|
374
549
|
}, this.requestOptions);
|
|
375
550
|
return prepared;
|
|
376
551
|
}
|
|
552
|
+
resolveTelemetry(extraParams) {
|
|
553
|
+
return mergeTelemetryContexts(
|
|
554
|
+
this.telemetry,
|
|
555
|
+
extractLangChainTelemetryContext(extraParams)
|
|
556
|
+
);
|
|
557
|
+
}
|
|
558
|
+
resolveParentEventContext(parentRunId) {
|
|
559
|
+
const parentId = String(parentRunId ?? "");
|
|
560
|
+
const llmRun = this.runs.get(parentId);
|
|
561
|
+
if (llmRun) {
|
|
562
|
+
return {
|
|
563
|
+
parentEventId: llmRun.clientEventId,
|
|
564
|
+
piiMaskingEnabled: llmRun.piiMaskingEnabled,
|
|
565
|
+
secretMaskingEnabled: llmRun.secretMaskingEnabled
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
const toolRun = this.toolRuns.get(parentId);
|
|
569
|
+
if (toolRun) {
|
|
570
|
+
return {
|
|
571
|
+
parentEventId: toolRun.startEventId,
|
|
572
|
+
piiMaskingEnabled: toolRun.piiMaskingEnabled,
|
|
573
|
+
secretMaskingEnabled: toolRun.secretMaskingEnabled
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
const chainRun = this.chainRuns.get(parentId);
|
|
577
|
+
if (chainRun) {
|
|
578
|
+
return {
|
|
579
|
+
parentEventId: chainRun.startEventId,
|
|
580
|
+
piiMaskingEnabled: chainRun.piiMaskingEnabled,
|
|
581
|
+
secretMaskingEnabled: chainRun.secretMaskingEnabled
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
return {};
|
|
585
|
+
}
|
|
586
|
+
async logWorkflowOperation(params, capabilityHints) {
|
|
587
|
+
const payload = this.agent.buildOperationLogParams({
|
|
588
|
+
system_id: this.systemId,
|
|
589
|
+
telemetry: params.telemetry,
|
|
590
|
+
metadata: params.metadata,
|
|
591
|
+
event_type: params.event_type,
|
|
592
|
+
event_status: params.event_status,
|
|
593
|
+
severity: params.severity,
|
|
594
|
+
latency: params.latency,
|
|
595
|
+
client_capabilities: this.getLangchainCapabilities(
|
|
596
|
+
capabilityHints?.piiMaskingEnabled,
|
|
597
|
+
capabilityHints?.secretMaskingEnabled
|
|
598
|
+
)
|
|
599
|
+
});
|
|
600
|
+
await this.agent.log(payload, this.requestOptions);
|
|
601
|
+
return payload;
|
|
602
|
+
}
|
|
377
603
|
async handleLLMStart(serialized, prompts, runId, _parentRunId, extraParams) {
|
|
378
604
|
const input = extractPromptFromPrompts(prompts);
|
|
379
605
|
const id = String(runId ?? "");
|
|
@@ -383,9 +609,16 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
383
609
|
}
|
|
384
610
|
const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
|
|
385
611
|
const stream = extractStreamFlag(serialized, extraParams);
|
|
386
|
-
const
|
|
612
|
+
const telemetryMetadata = this.resolveTelemetry(extraParams);
|
|
613
|
+
const prepared = await this.preflight(
|
|
614
|
+
input,
|
|
615
|
+
stream,
|
|
616
|
+
requestedClientEventId,
|
|
617
|
+
telemetryMetadata
|
|
618
|
+
);
|
|
387
619
|
const sanitizedInput = prepared.sanitizedInput;
|
|
388
620
|
const piiMaskingEnabled = this.resolvePreparedPiiMaskingEnabled(prepared);
|
|
621
|
+
const secretMaskingEnabled = this.resolvePreparedSecretMaskingEnabled(prepared);
|
|
389
622
|
if (sanitizedInput !== input) {
|
|
390
623
|
const mutated = setPromptInPrompts(prompts, sanitizedInput);
|
|
391
624
|
if (!mutated) {
|
|
@@ -402,7 +635,11 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
402
635
|
model: modelName,
|
|
403
636
|
client_event_id: requestedClientEventId,
|
|
404
637
|
expected_languages: this.expectedLanguages,
|
|
405
|
-
|
|
638
|
+
metadata: telemetryMetadata,
|
|
639
|
+
client_capabilities: this.getLangchainCapabilities(
|
|
640
|
+
piiMaskingEnabled,
|
|
641
|
+
secretMaskingEnabled
|
|
642
|
+
)
|
|
406
643
|
}, this.requestOptions);
|
|
407
644
|
let transformedForRun = sanitizedInput;
|
|
408
645
|
let sdkLocalScanMs = prepared.sdkLocalScanMs;
|
|
@@ -417,7 +654,8 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
417
654
|
stream,
|
|
418
655
|
clientEventId: requestedClientEventId,
|
|
419
656
|
capabilityConfig: prepared.capabilityConfig,
|
|
420
|
-
sdkConfigFetchMs: prepared.sdkConfigFetchMs
|
|
657
|
+
sdkConfigFetchMs: prepared.sdkConfigFetchMs,
|
|
658
|
+
telemetryMetadata
|
|
421
659
|
}, this.requestOptions);
|
|
422
660
|
transformedForRun = fallback.sanitizedInput;
|
|
423
661
|
sdkLocalScanMs = fallback.sdkLocalScanMs;
|
|
@@ -456,12 +694,14 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
456
694
|
model: modelName,
|
|
457
695
|
clientEventId: canonicalClientEventId,
|
|
458
696
|
guardEventId,
|
|
697
|
+
telemetryMetadata,
|
|
459
698
|
transparency,
|
|
460
699
|
piiMapping: normalizePiiMapping(prepared.piiMapping),
|
|
461
700
|
shouldDeanonymize: prepared.shouldDeanonymize === true,
|
|
462
701
|
responseStreamed: stream,
|
|
463
702
|
sdkConfigVersion: prepared.capabilityConfig?.version ?? null,
|
|
464
|
-
piiMaskingEnabled
|
|
703
|
+
piiMaskingEnabled,
|
|
704
|
+
secretMaskingEnabled
|
|
465
705
|
});
|
|
466
706
|
logCallbackDebug("handleLLMStart state_set", {
|
|
467
707
|
runId: id,
|
|
@@ -478,9 +718,16 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
478
718
|
}
|
|
479
719
|
const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
|
|
480
720
|
const stream = extractStreamFlag(serialized, extraParams);
|
|
481
|
-
const
|
|
721
|
+
const telemetryMetadata = this.resolveTelemetry(extraParams);
|
|
722
|
+
const prepared = await this.preflight(
|
|
723
|
+
input,
|
|
724
|
+
stream,
|
|
725
|
+
requestedClientEventId,
|
|
726
|
+
telemetryMetadata
|
|
727
|
+
);
|
|
482
728
|
const sanitizedInput = prepared.sanitizedInput;
|
|
483
729
|
const piiMaskingEnabled = this.resolvePreparedPiiMaskingEnabled(prepared);
|
|
730
|
+
const secretMaskingEnabled = this.resolvePreparedSecretMaskingEnabled(prepared);
|
|
484
731
|
if (sanitizedInput !== input) {
|
|
485
732
|
const mutated = setPromptInMessages(messages, sanitizedInput);
|
|
486
733
|
if (!mutated) {
|
|
@@ -497,7 +744,11 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
497
744
|
model: modelName,
|
|
498
745
|
client_event_id: requestedClientEventId,
|
|
499
746
|
expected_languages: this.expectedLanguages,
|
|
500
|
-
|
|
747
|
+
metadata: telemetryMetadata,
|
|
748
|
+
client_capabilities: this.getLangchainCapabilities(
|
|
749
|
+
piiMaskingEnabled,
|
|
750
|
+
secretMaskingEnabled
|
|
751
|
+
)
|
|
501
752
|
}, this.requestOptions);
|
|
502
753
|
let transformedForRun = sanitizedInput;
|
|
503
754
|
let sdkLocalScanMs = prepared.sdkLocalScanMs;
|
|
@@ -512,7 +763,8 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
512
763
|
stream,
|
|
513
764
|
clientEventId: requestedClientEventId,
|
|
514
765
|
capabilityConfig: prepared.capabilityConfig,
|
|
515
|
-
sdkConfigFetchMs: prepared.sdkConfigFetchMs
|
|
766
|
+
sdkConfigFetchMs: prepared.sdkConfigFetchMs,
|
|
767
|
+
telemetryMetadata
|
|
516
768
|
}, this.requestOptions);
|
|
517
769
|
transformedForRun = fallback.sanitizedInput;
|
|
518
770
|
sdkLocalScanMs = fallback.sdkLocalScanMs;
|
|
@@ -551,12 +803,14 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
551
803
|
model: modelName,
|
|
552
804
|
clientEventId: canonicalClientEventId,
|
|
553
805
|
guardEventId,
|
|
806
|
+
telemetryMetadata,
|
|
554
807
|
transparency,
|
|
555
808
|
piiMapping: normalizePiiMapping(prepared.piiMapping),
|
|
556
809
|
shouldDeanonymize: prepared.shouldDeanonymize === true,
|
|
557
810
|
responseStreamed: stream,
|
|
558
811
|
sdkConfigVersion: prepared.capabilityConfig?.version ?? null,
|
|
559
|
-
piiMaskingEnabled
|
|
812
|
+
piiMaskingEnabled,
|
|
813
|
+
secretMaskingEnabled
|
|
560
814
|
});
|
|
561
815
|
logCallbackDebug("handleChatModelStart state_set", {
|
|
562
816
|
runId: id,
|
|
@@ -584,7 +838,9 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
584
838
|
}
|
|
585
839
|
const clientOutputText = extractOutputText(output);
|
|
586
840
|
const usage = extractTokenUsage(output);
|
|
587
|
-
const metadata = {
|
|
841
|
+
const metadata = {
|
|
842
|
+
...state.telemetryMetadata ?? {}
|
|
843
|
+
};
|
|
588
844
|
if (state.clientEventId) {
|
|
589
845
|
metadata.client_event_id = state.clientEventId;
|
|
590
846
|
}
|
|
@@ -620,7 +876,10 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
620
876
|
usage,
|
|
621
877
|
latency: modelLatencyMs,
|
|
622
878
|
metadata: Object.keys(metadata).length > 0 ? metadata : void 0,
|
|
623
|
-
client_capabilities: this.getLangchainCapabilities(
|
|
879
|
+
client_capabilities: this.getLangchainCapabilities(
|
|
880
|
+
state.piiMaskingEnabled,
|
|
881
|
+
state.secretMaskingEnabled
|
|
882
|
+
)
|
|
624
883
|
}, this.requestOptions);
|
|
625
884
|
logCallbackDebug("handleLLMEnd logged", {
|
|
626
885
|
runId: id,
|
|
@@ -634,6 +893,7 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
634
893
|
if (state) this.runs.delete(id);
|
|
635
894
|
const message = err && typeof err === "object" && "message" in err ? String(err.message) : String(err ?? "");
|
|
636
895
|
const metadata = {
|
|
896
|
+
...state?.telemetryMetadata ?? {},
|
|
637
897
|
error_message: message
|
|
638
898
|
};
|
|
639
899
|
if (state?.clientEventId) {
|
|
@@ -662,9 +922,184 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
662
922
|
event_type: "error",
|
|
663
923
|
severity: "error",
|
|
664
924
|
metadata,
|
|
665
|
-
client_capabilities: this.getLangchainCapabilities(
|
|
925
|
+
client_capabilities: this.getLangchainCapabilities(
|
|
926
|
+
state?.piiMaskingEnabled,
|
|
927
|
+
state?.secretMaskingEnabled
|
|
928
|
+
)
|
|
666
929
|
}, this.requestOptions);
|
|
667
930
|
}
|
|
931
|
+
async handleToolStart(serialized, _input, runId, parentRunId, ...rest) {
|
|
932
|
+
const id = String(runId ?? "");
|
|
933
|
+
const parentContext = this.resolveParentEventContext(parentRunId);
|
|
934
|
+
const baseTelemetry = extractTelemetryFromValues(...rest);
|
|
935
|
+
const toolName = extractToolName(serialized, rest, baseTelemetry);
|
|
936
|
+
const workflowStepId = firstNonEmptyString(baseTelemetry?.workflow_step_id, baseTelemetry?.workflowStepId) ?? createClientEventId();
|
|
937
|
+
const telemetry = mergeTelemetryContexts(
|
|
938
|
+
this.telemetry,
|
|
939
|
+
baseTelemetry,
|
|
940
|
+
createAgentIdTelemetryContext({
|
|
941
|
+
workflow_step_id: workflowStepId,
|
|
942
|
+
parent_event_id: parentContext.parentEventId,
|
|
943
|
+
tool_name: toolName
|
|
944
|
+
})
|
|
945
|
+
);
|
|
946
|
+
const startedAtMs = Date.now();
|
|
947
|
+
const payload = await this.logWorkflowOperation(
|
|
948
|
+
{
|
|
949
|
+
telemetry,
|
|
950
|
+
event_type: "start",
|
|
951
|
+
event_status: "started"
|
|
952
|
+
},
|
|
953
|
+
parentContext
|
|
954
|
+
);
|
|
955
|
+
this.toolRuns.set(id, {
|
|
956
|
+
startedAtMs,
|
|
957
|
+
workflowStepId,
|
|
958
|
+
startEventId: payload.event_id ?? createClientEventId(),
|
|
959
|
+
telemetryMetadata: telemetry,
|
|
960
|
+
piiMaskingEnabled: parentContext.piiMaskingEnabled,
|
|
961
|
+
secretMaskingEnabled: parentContext.secretMaskingEnabled
|
|
962
|
+
});
|
|
963
|
+
}
|
|
964
|
+
async handleToolEnd(_output, runId) {
|
|
965
|
+
const id = String(runId ?? "");
|
|
966
|
+
const state = this.toolRuns.get(id);
|
|
967
|
+
if (!state) {
|
|
968
|
+
return;
|
|
969
|
+
}
|
|
970
|
+
this.toolRuns.delete(id);
|
|
971
|
+
await this.logWorkflowOperation(
|
|
972
|
+
{
|
|
973
|
+
telemetry: mergeTelemetryContexts(
|
|
974
|
+
state.telemetryMetadata,
|
|
975
|
+
createAgentIdTelemetryContext({
|
|
976
|
+
workflow_step_id: state.workflowStepId,
|
|
977
|
+
parent_event_id: state.startEventId
|
|
978
|
+
})
|
|
979
|
+
),
|
|
980
|
+
event_type: "complete",
|
|
981
|
+
event_status: "completed",
|
|
982
|
+
latency: Math.max(0, Date.now() - state.startedAtMs)
|
|
983
|
+
},
|
|
984
|
+
state
|
|
985
|
+
);
|
|
986
|
+
}
|
|
987
|
+
async handleToolError(err, runId) {
|
|
988
|
+
const id = String(runId ?? "");
|
|
989
|
+
const state = this.toolRuns.get(id);
|
|
990
|
+
if (!state) {
|
|
991
|
+
return;
|
|
992
|
+
}
|
|
993
|
+
this.toolRuns.delete(id);
|
|
994
|
+
const errorMessage = err instanceof Error ? err.message : typeof err === "undefined" ? "" : String(err);
|
|
995
|
+
await this.logWorkflowOperation(
|
|
996
|
+
{
|
|
997
|
+
telemetry: mergeTelemetryContexts(
|
|
998
|
+
state?.telemetryMetadata,
|
|
999
|
+
createAgentIdTelemetryContext({
|
|
1000
|
+
workflow_step_id: state?.workflowStepId,
|
|
1001
|
+
parent_event_id: state?.startEventId
|
|
1002
|
+
})
|
|
1003
|
+
),
|
|
1004
|
+
metadata: errorMessage.trim().length > 0 ? {
|
|
1005
|
+
error_message: errorMessage.trim(),
|
|
1006
|
+
...err instanceof Error && err.name ? { error_name: err.name } : {}
|
|
1007
|
+
} : void 0,
|
|
1008
|
+
event_type: "error",
|
|
1009
|
+
event_status: "failed",
|
|
1010
|
+
severity: "error",
|
|
1011
|
+
latency: typeof state?.startedAtMs === "number" ? Math.max(0, Date.now() - state.startedAtMs) : void 0
|
|
1012
|
+
},
|
|
1013
|
+
state
|
|
1014
|
+
);
|
|
1015
|
+
}
|
|
1016
|
+
async handleChainStart(serialized, _inputs, runId, parentRunId, ...rest) {
|
|
1017
|
+
const id = String(runId ?? "");
|
|
1018
|
+
const parentContext = this.resolveParentEventContext(parentRunId);
|
|
1019
|
+
const baseTelemetry = extractTelemetryFromValues(...rest);
|
|
1020
|
+
const workflowName = extractWorkflowName(serialized, rest, baseTelemetry);
|
|
1021
|
+
const workflowStepId = firstNonEmptyString(baseTelemetry?.workflow_step_id, baseTelemetry?.workflowStepId) ?? createClientEventId();
|
|
1022
|
+
const resolvedCategory = firstNonEmptyString(baseTelemetry?.event_category, baseTelemetry?.eventCategory) ?? "workflow";
|
|
1023
|
+
const telemetry = mergeTelemetryContexts(
|
|
1024
|
+
this.telemetry,
|
|
1025
|
+
baseTelemetry,
|
|
1026
|
+
createAgentIdTelemetryContext({
|
|
1027
|
+
workflow_step_id: workflowStepId,
|
|
1028
|
+
workflow_step_name: workflowName,
|
|
1029
|
+
parent_event_id: parentContext.parentEventId,
|
|
1030
|
+
event_category: resolvedCategory
|
|
1031
|
+
})
|
|
1032
|
+
);
|
|
1033
|
+
const startedAtMs = Date.now();
|
|
1034
|
+
const payload = await this.logWorkflowOperation(
|
|
1035
|
+
{
|
|
1036
|
+
telemetry,
|
|
1037
|
+
event_type: "start",
|
|
1038
|
+
event_status: "started"
|
|
1039
|
+
},
|
|
1040
|
+
parentContext
|
|
1041
|
+
);
|
|
1042
|
+
this.chainRuns.set(id, {
|
|
1043
|
+
startedAtMs,
|
|
1044
|
+
workflowStepId,
|
|
1045
|
+
startEventId: payload.event_id ?? createClientEventId(),
|
|
1046
|
+
telemetryMetadata: telemetry,
|
|
1047
|
+
piiMaskingEnabled: parentContext.piiMaskingEnabled,
|
|
1048
|
+
secretMaskingEnabled: parentContext.secretMaskingEnabled
|
|
1049
|
+
});
|
|
1050
|
+
}
|
|
1051
|
+
async handleChainEnd(_outputs, runId) {
|
|
1052
|
+
const id = String(runId ?? "");
|
|
1053
|
+
const state = this.chainRuns.get(id);
|
|
1054
|
+
if (!state) {
|
|
1055
|
+
return;
|
|
1056
|
+
}
|
|
1057
|
+
this.chainRuns.delete(id);
|
|
1058
|
+
await this.logWorkflowOperation(
|
|
1059
|
+
{
|
|
1060
|
+
telemetry: mergeTelemetryContexts(
|
|
1061
|
+
state.telemetryMetadata,
|
|
1062
|
+
createAgentIdTelemetryContext({
|
|
1063
|
+
workflow_step_id: state.workflowStepId,
|
|
1064
|
+
parent_event_id: state.startEventId
|
|
1065
|
+
})
|
|
1066
|
+
),
|
|
1067
|
+
event_type: "complete",
|
|
1068
|
+
event_status: "completed",
|
|
1069
|
+
latency: Math.max(0, Date.now() - state.startedAtMs)
|
|
1070
|
+
},
|
|
1071
|
+
state
|
|
1072
|
+
);
|
|
1073
|
+
}
|
|
1074
|
+
async handleChainError(err, runId) {
|
|
1075
|
+
const id = String(runId ?? "");
|
|
1076
|
+
const state = this.chainRuns.get(id);
|
|
1077
|
+
if (!state) {
|
|
1078
|
+
return;
|
|
1079
|
+
}
|
|
1080
|
+
this.chainRuns.delete(id);
|
|
1081
|
+
const errorMessage = err instanceof Error ? err.message : typeof err === "undefined" ? "" : String(err);
|
|
1082
|
+
await this.logWorkflowOperation(
|
|
1083
|
+
{
|
|
1084
|
+
telemetry: mergeTelemetryContexts(
|
|
1085
|
+
state.telemetryMetadata,
|
|
1086
|
+
createAgentIdTelemetryContext({
|
|
1087
|
+
workflow_step_id: state.workflowStepId,
|
|
1088
|
+
parent_event_id: state.startEventId
|
|
1089
|
+
})
|
|
1090
|
+
),
|
|
1091
|
+
metadata: errorMessage.trim().length > 0 ? {
|
|
1092
|
+
error_message: errorMessage.trim(),
|
|
1093
|
+
...err instanceof Error && err.name ? { error_name: err.name } : {}
|
|
1094
|
+
} : void 0,
|
|
1095
|
+
event_type: "error",
|
|
1096
|
+
event_status: "failed",
|
|
1097
|
+
severity: "error",
|
|
1098
|
+
latency: Math.max(0, Date.now() - state.startedAtMs)
|
|
1099
|
+
},
|
|
1100
|
+
state
|
|
1101
|
+
);
|
|
1102
|
+
}
|
|
668
1103
|
};
|
|
669
1104
|
export {
|
|
670
1105
|
AgentIDCallbackHandler
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentid-sdk",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "AgentID JavaScript/TypeScript SDK for
|
|
3
|
+
"version": "0.1.40",
|
|
4
|
+
"description": "AgentID JavaScript/TypeScript SDK for guardrails, masking, workflow telemetry, and audit logging.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://agentid.ai",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
9
|
"url": "git+https://github.com/ondrejsukac-rgb/agentid.git",
|
|
10
|
-
"directory": "
|
|
10
|
+
"directory": "agentid-sdk"
|
|
11
11
|
},
|
|
12
12
|
"bugs": {
|
|
13
13
|
"url": "https://github.com/ondrejsukac-rgb/agentid/issues"
|
|
@@ -38,7 +38,9 @@
|
|
|
38
38
|
],
|
|
39
39
|
"scripts": {
|
|
40
40
|
"build": "tsup --config tsup.config.ts",
|
|
41
|
-
"
|
|
41
|
+
"typecheck": "tsc --noEmit",
|
|
42
|
+
"test": "vitest run ./src",
|
|
43
|
+
"release:check": "npm run typecheck && npm run test && npm run build && npm pack --dry-run",
|
|
42
44
|
"prepublishOnly": "npm run build"
|
|
43
45
|
},
|
|
44
46
|
"publishConfig": {
|
|
@@ -62,8 +64,10 @@
|
|
|
62
64
|
}
|
|
63
65
|
},
|
|
64
66
|
"devDependencies": {
|
|
67
|
+
"@langchain/core": "^1.1.42",
|
|
65
68
|
"@types/react": "^19.2.2",
|
|
66
69
|
"tsup": "^8.3.5",
|
|
67
|
-
"typescript": "^5.0.0"
|
|
70
|
+
"typescript": "^5.0.0",
|
|
71
|
+
"vitest": "^4.0.16"
|
|
68
72
|
}
|
|
69
73
|
}
|