veryfront 0.1.1031 → 0.1.1033
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/esm/deno.js +1 -1
- package/esm/extensions/ext-llm-anthropic/src/anthropic-stream.d.ts.map +1 -1
- package/esm/extensions/ext-llm-anthropic/src/anthropic-stream.js +0 -20
- package/esm/src/agent/runtime/chat-stream-handler.d.ts.map +1 -1
- package/esm/src/agent/runtime/chat-stream-handler.js +2 -0
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +95 -10
- package/esm/src/agent/runtime/trace-usage.d.ts +36 -0
- package/esm/src/agent/runtime/trace-usage.d.ts.map +1 -0
- package/esm/src/agent/runtime/trace-usage.js +47 -0
- package/esm/src/agent/service/node-telemetry.d.ts.map +1 -1
- package/esm/src/agent/service/node-telemetry.js +38 -3
- package/esm/src/extensions/observability/node-telemetry-provider.d.ts +7 -0
- package/esm/src/extensions/observability/node-telemetry-provider.d.ts.map +1 -1
- package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
- package/esm/src/internal-agents/run-stream.js +225 -142
- package/esm/src/modules/react-loader/ssr-module-loader/ssr-cache-manager.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/ssr-cache-manager.js +5 -5
- package/esm/src/modules/react-loader/ssr-module-loader/tmp-paths.d.ts +2 -2
- package/esm/src/modules/react-loader/ssr-module-loader/tmp-paths.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/tmp-paths.js +9 -5
- package/esm/src/observability/tracing/otlp-setup.d.ts +3 -1
- package/esm/src/observability/tracing/otlp-setup.d.ts.map +1 -1
- package/esm/src/observability/tracing/otlp-setup.js +8 -1
- package/esm/src/platform/adapters/base.d.ts +6 -1
- package/esm/src/platform/adapters/base.d.ts.map +1 -1
- package/esm/src/platform/adapters/runtime/deno/adapter.d.ts +2 -2
- package/esm/src/platform/adapters/runtime/deno/adapter.d.ts.map +1 -1
- package/esm/src/platform/adapters/runtime/deno/adapter.js +3 -2
- package/esm/src/rendering/renderer.d.ts +1 -0
- package/esm/src/rendering/renderer.d.ts.map +1 -1
- package/esm/src/rendering/renderer.js +71 -73
- package/esm/src/server/handlers/preview/hmr.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/preview/hmr.handler.js +2 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.js +20 -3
- package/esm/src/transforms/mdx/esm-module-loader/cache-format.js +2 -2
- package/esm/src/utils/cache-version.d.ts +6 -0
- package/esm/src/utils/cache-version.d.ts.map +1 -0
- package/esm/src/utils/cache-version.js +13 -0
- package/esm/src/utils/logger/logger.d.ts +7 -0
- package/esm/src/utils/logger/logger.d.ts.map +1 -1
- package/esm/src/utils/logger/logger.js +20 -0
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +4 -4
package/esm/deno.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-stream.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-anthropic/src/anthropic-stream.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAgB1E,KAAK,sBAAsB,GAAG;IAC5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;CAC5C,CAAC;AAmBF,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,OAAO,GACX,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgBlD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CA+DhF;
|
|
1
|
+
{"version":3,"file":"anthropic-stream.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-anthropic/src/anthropic-stream.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAgB1E,KAAK,sBAAsB,GAAG;IAC5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;CAC5C,CAAC;AAmBF,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,OAAO,GACX,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgBlD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CA+DhF;AAqDD,wBAAuB,8BAA8B,CACnD,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,OAAO,GAAE,sBAA2B,GACnC,aAAa,CAAC,OAAO,CAAC,CA4TxB"}
|
|
@@ -90,21 +90,6 @@ function isToolCallsFinishReason(finishReason) {
|
|
|
90
90
|
return finishReason === "tool-calls" ||
|
|
91
91
|
(typeof finishReason === "object" && finishReason?.unified === "tool-calls");
|
|
92
92
|
}
|
|
93
|
-
function hasGatewayUsageMetadata(usage) {
|
|
94
|
-
return usage?.billableInputTokens !== undefined ||
|
|
95
|
-
usage?.billableOutputTokens !== undefined ||
|
|
96
|
-
usage?.providerInputCostUsd !== undefined ||
|
|
97
|
-
usage?.providerOutputCostUsd !== undefined ||
|
|
98
|
-
usage?.providerCostUsd !== undefined ||
|
|
99
|
-
usage?.veryfrontInputChargeUsd !== undefined ||
|
|
100
|
-
usage?.veryfrontOutputChargeUsd !== undefined ||
|
|
101
|
-
usage?.veryfrontChargeUsd !== undefined ||
|
|
102
|
-
usage?.veryfrontBilledUsd !== undefined ||
|
|
103
|
-
usage?.costCredits !== undefined ||
|
|
104
|
-
usage?.costSource !== undefined ||
|
|
105
|
-
usage?.billingMode !== undefined ||
|
|
106
|
-
usage?.usageCaptureStatus !== undefined;
|
|
107
|
-
}
|
|
108
93
|
async function readStreamChunk(reader, timeoutMs) {
|
|
109
94
|
if (timeoutMs === undefined) {
|
|
110
95
|
const read = await reader.read();
|
|
@@ -393,11 +378,6 @@ export async function* streamAnthropicCompatibleParts(stream, options = {}) {
|
|
|
393
378
|
if (isToolCallsFinishReason(finishReason)) {
|
|
394
379
|
clientToolUseIdleDeadlineMs = null;
|
|
395
380
|
clientToolUseTerminalDeadlineMs ??= Date.now() + trailingUsageGraceMs;
|
|
396
|
-
if (hasGatewayUsageMetadata(usage)) {
|
|
397
|
-
await cancelStreamReader(reader, "Finished Anthropic tool-use turn after gateway usage metadata");
|
|
398
|
-
yield buildFinishPart();
|
|
399
|
-
return;
|
|
400
|
-
}
|
|
401
381
|
}
|
|
402
382
|
else {
|
|
403
383
|
clientToolUseIdleDeadlineMs ??= Date.now() + trailingUsageGraceMs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-stream-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/chat-stream-handler.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAqB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-stream-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/chat-stream-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ import { setActiveSpanAttributes, withSpan } from "../../observability/tracing/o
|
|
|
17
17
|
import { getHostEnv } from "../../platform/compat/process.js";
|
|
18
18
|
import { stringifyToolError, throwIfAborted } from "./error-utils.js";
|
|
19
19
|
import { redactSensitive, sanitizeSerializedError, sanitizeUrlCredentials, } from "../../utils/logger/redact.js";
|
|
20
|
+
import { buildRuntimeUsageTraceAttributes } from "./trace-usage.js";
|
|
20
21
|
const logger = serverLogger.component("agent");
|
|
21
22
|
const LOCAL_TOOL_COMMIT_GRACE_MS = 250;
|
|
22
23
|
const LOCAL_TOOL_INPUT_IDLE_MS = 15_000;
|
|
@@ -815,6 +816,7 @@ export function processStream(result, state, controller, encoder, textPartId, ca
|
|
|
815
816
|
: {}),
|
|
816
817
|
};
|
|
817
818
|
callbacks?.onUsage?.(state.usage);
|
|
819
|
+
setActiveSpanAttributes(buildRuntimeUsageTraceAttributes(state.usage));
|
|
818
820
|
}
|
|
819
821
|
break;
|
|
820
822
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,aAAa,EAGlB,KAAK,OAAO,EAIZ,KAAK,QAAQ,EAGd,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAqB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,7 @@ import { generateId } from "../../utils/id.js";
|
|
|
16
16
|
import { detectPlatform, getPlatformCapabilities } from "../../platform/core-platform.js";
|
|
17
17
|
import { createAgentMemory } from "../memory/index.js";
|
|
18
18
|
import { serverLogger } from "../../utils/index.js";
|
|
19
|
-
import { addSpanEvent, setSpanAttributes, withSpan, } from "../../observability/tracing/
|
|
20
|
-
import { setActiveSpanAttributes as setOtelActiveSpanAttributes, withSpan as withOtelSpan, } from "../../observability/tracing/otlp-setup.js";
|
|
19
|
+
import { addSpanEvent, setActiveSpanAttributes as setOtelActiveSpanAttributes, setSpanAttributes, withSpan, } from "../../observability/tracing/otlp-setup.js";
|
|
21
20
|
import { convertToTextGenerationRuntimeRequestMessages } from "./text-generation-runtime-message-converter.js";
|
|
22
21
|
import { convertToolsToRuntimeTools } from "./model-tool-converter.js";
|
|
23
22
|
import { getRuntimeRemoteToolSources } from "./mcp-server-tool-sources.js";
|
|
@@ -51,6 +50,7 @@ import { stringifyToolError, throwIfAborted } from "./error-utils.js";
|
|
|
51
50
|
import { resolveTemperatureParameter } from "./model-capabilities.js";
|
|
52
51
|
import { applySkillDelegationOverridesToToolInput, extractSkillDelegationOverrides, } from "./skill-delegation-overrides.js";
|
|
53
52
|
import { resolveAgentModelTransport } from "./model-transport.js";
|
|
53
|
+
import { buildRuntimeUsageTraceAttributes } from "./trace-usage.js";
|
|
54
54
|
const logger = serverLogger.component("agent");
|
|
55
55
|
function buildStreamFinishUsage(usage) {
|
|
56
56
|
if (!usage) {
|
|
@@ -132,6 +132,17 @@ function containsSubmittedFormInputExecutionResult(result, depth = 0) {
|
|
|
132
132
|
function isSubmittedFormInputExecutionResult(toolName, result) {
|
|
133
133
|
return toolName === FORM_INPUT_TOOL_ID && containsSubmittedFormInputExecutionResult(result);
|
|
134
134
|
}
|
|
135
|
+
function estimateSerializedSizeBytes(value) {
|
|
136
|
+
try {
|
|
137
|
+
const serialized = typeof value === "string" ? value : JSON.stringify(value);
|
|
138
|
+
if (serialized === undefined)
|
|
139
|
+
return undefined;
|
|
140
|
+
return new TextEncoder().encode(serialized).length;
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
135
146
|
function compactRuntimeTraceAttributes(attributes) {
|
|
136
147
|
return Object.fromEntries(Object.entries(attributes).filter(([, value]) => typeof value === "string" || typeof value === "number" || typeof value === "boolean"));
|
|
137
148
|
}
|
|
@@ -144,18 +155,27 @@ function buildRuntimeToolTraceAttributes(input) {
|
|
|
144
155
|
"tool.name": input.toolName,
|
|
145
156
|
"tool.call.id": input.toolCallId,
|
|
146
157
|
"tool.id": input.toolCallId,
|
|
158
|
+
"tool.status": input.status,
|
|
159
|
+
"tool.provider_executed": input.providerExecuted,
|
|
160
|
+
"tool.input.size_bytes": input.inputSizeBytes,
|
|
161
|
+
"tool.output.size_bytes": input.outputSizeBytes,
|
|
147
162
|
"agent.tool.execution_mode": input.mode,
|
|
148
163
|
"agent.tool.status": input.status,
|
|
149
164
|
"agent.tool.provider_executed": input.providerExecuted,
|
|
165
|
+
"agent.tool.input.size_bytes": input.inputSizeBytes,
|
|
166
|
+
"agent.tool.output.size_bytes": input.outputSizeBytes,
|
|
150
167
|
"gen_ai.operation.name": "execute_tool",
|
|
151
168
|
"gen_ai.agent.id": input.agentId,
|
|
152
169
|
"gen_ai.tool.name": input.toolName,
|
|
153
170
|
"gen_ai.tool.type": "function",
|
|
154
171
|
"gen_ai.tool.call.id": input.toolCallId,
|
|
172
|
+
"error.type": input.errorType,
|
|
173
|
+
"error.message": input.errorMessage,
|
|
155
174
|
});
|
|
156
175
|
}
|
|
157
176
|
async function traceConfiguredToolExecution(input) {
|
|
158
|
-
|
|
177
|
+
const inputSizeBytes = estimateSerializedSizeBytes(input.args);
|
|
178
|
+
return await withSpan("agent.tool_execute", async () => {
|
|
159
179
|
setOtelActiveSpanAttributes(buildRuntimeToolTraceAttributes({
|
|
160
180
|
mode: input.mode,
|
|
161
181
|
agentId: input.agentId,
|
|
@@ -164,6 +184,7 @@ async function traceConfiguredToolExecution(input) {
|
|
|
164
184
|
context: input.context,
|
|
165
185
|
status: "executing",
|
|
166
186
|
providerExecuted: false,
|
|
187
|
+
inputSizeBytes,
|
|
167
188
|
}));
|
|
168
189
|
try {
|
|
169
190
|
const result = await executeConfiguredTool(input.toolName, input.args, input.toolsConfig, input.context, input.allowedRemoteToolNames, input.remoteToolSources);
|
|
@@ -175,10 +196,13 @@ async function traceConfiguredToolExecution(input) {
|
|
|
175
196
|
context: input.context,
|
|
176
197
|
status: "completed",
|
|
177
198
|
providerExecuted: false,
|
|
199
|
+
inputSizeBytes,
|
|
200
|
+
outputSizeBytes: estimateSerializedSizeBytes(result),
|
|
178
201
|
}));
|
|
179
202
|
return result;
|
|
180
203
|
}
|
|
181
204
|
catch (error) {
|
|
205
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
182
206
|
setOtelActiveSpanAttributes({
|
|
183
207
|
...buildRuntimeToolTraceAttributes({
|
|
184
208
|
mode: input.mode,
|
|
@@ -188,8 +212,10 @@ async function traceConfiguredToolExecution(input) {
|
|
|
188
212
|
context: input.context,
|
|
189
213
|
status: "failed",
|
|
190
214
|
providerExecuted: false,
|
|
215
|
+
inputSizeBytes,
|
|
216
|
+
errorType: error instanceof Error ? error.name : "Error",
|
|
217
|
+
errorMessage,
|
|
191
218
|
}),
|
|
192
|
-
"error.message": error instanceof Error ? error.message : String(error),
|
|
193
219
|
});
|
|
194
220
|
throw error;
|
|
195
221
|
}
|
|
@@ -201,19 +227,30 @@ async function traceConfiguredToolExecution(input) {
|
|
|
201
227
|
context: input.context,
|
|
202
228
|
status: "executing",
|
|
203
229
|
providerExecuted: false,
|
|
230
|
+
inputSizeBytes,
|
|
204
231
|
}));
|
|
205
232
|
}
|
|
206
233
|
async function traceProviderExecutedTool(input) {
|
|
207
|
-
|
|
234
|
+
const status = input.isError === true ? "failed" : "completed";
|
|
235
|
+
const errorMessage = input.isError === true ? stringifyToolError(input.result) : undefined;
|
|
236
|
+
await withSpan("agent.tool_execute", async () => {
|
|
208
237
|
setOtelActiveSpanAttributes(buildRuntimeToolTraceAttributes({
|
|
209
238
|
...input,
|
|
210
|
-
status
|
|
239
|
+
status,
|
|
211
240
|
providerExecuted: true,
|
|
241
|
+
inputSizeBytes: estimateSerializedSizeBytes(input.args),
|
|
242
|
+
outputSizeBytes: estimateSerializedSizeBytes(input.result),
|
|
243
|
+
errorType: input.isError === true ? "ProviderExecutedToolError" : undefined,
|
|
244
|
+
errorMessage,
|
|
212
245
|
}));
|
|
213
246
|
}, buildRuntimeToolTraceAttributes({
|
|
214
247
|
...input,
|
|
215
|
-
status
|
|
248
|
+
status,
|
|
216
249
|
providerExecuted: true,
|
|
250
|
+
inputSizeBytes: estimateSerializedSizeBytes(input.args),
|
|
251
|
+
outputSizeBytes: estimateSerializedSizeBytes(input.result),
|
|
252
|
+
errorType: input.isError === true ? "ProviderExecutedToolError" : undefined,
|
|
253
|
+
errorMessage,
|
|
217
254
|
}));
|
|
218
255
|
}
|
|
219
256
|
function markSubmittedFormInputRuntimeContext(runtimeContext) {
|
|
@@ -516,7 +553,7 @@ export class AgentRuntime {
|
|
|
516
553
|
"model.id": effectiveModel,
|
|
517
554
|
"messages.count": currentMessages.length,
|
|
518
555
|
});
|
|
519
|
-
|
|
556
|
+
const result = await generateText({
|
|
520
557
|
model: languageModel,
|
|
521
558
|
system: currentSystemPrompt,
|
|
522
559
|
messages: convertToTextGenerationRuntimeRequestMessages(currentMessages),
|
|
@@ -531,6 +568,8 @@ export class AgentRuntime {
|
|
|
531
568
|
...(providerOptions ? { providerOptions } : {}),
|
|
532
569
|
...(reasoning ? { reasoning } : {}),
|
|
533
570
|
});
|
|
571
|
+
setSpanAttributes(span, buildRuntimeUsageTraceAttributes(result.usage));
|
|
572
|
+
return result;
|
|
534
573
|
});
|
|
535
574
|
// Accumulate usage
|
|
536
575
|
if (response.usage) {
|
|
@@ -560,6 +599,7 @@ export class AgentRuntime {
|
|
|
560
599
|
billingMode: response.usage.billingMode,
|
|
561
600
|
usageCaptureStatus: response.usage.usageCaptureStatus,
|
|
562
601
|
});
|
|
602
|
+
setSpanAttributes(loopSpan, buildRuntimeUsageTraceAttributes(totalUsage));
|
|
563
603
|
}
|
|
564
604
|
const assistantParts = [];
|
|
565
605
|
if (response.text)
|
|
@@ -594,6 +634,7 @@ export class AgentRuntime {
|
|
|
594
634
|
}
|
|
595
635
|
this.status = "completed";
|
|
596
636
|
addSpanEvent(loopSpan, "loop_complete");
|
|
637
|
+
setSpanAttributes(loopSpan, buildRuntimeUsageTraceAttributes(totalUsage));
|
|
597
638
|
return {
|
|
598
639
|
text: response.text,
|
|
599
640
|
messages: currentMessages,
|
|
@@ -616,7 +657,18 @@ export class AgentRuntime {
|
|
|
616
657
|
};
|
|
617
658
|
const generatedToolResult = generatedToolResults.get(tc.toolCallId);
|
|
618
659
|
await withSpan("agent.tool_execute", async (toolSpan) => {
|
|
619
|
-
|
|
660
|
+
const inputSizeBytes = estimateSerializedSizeBytes(tc.input);
|
|
661
|
+
setSpanAttributes(toolSpan, compactRuntimeTraceAttributes({
|
|
662
|
+
"tool.name": tc.toolName,
|
|
663
|
+
"tool.call.id": tc.toolCallId,
|
|
664
|
+
"tool.id": tc.toolCallId,
|
|
665
|
+
"tool.status": "executing",
|
|
666
|
+
"tool.input.size_bytes": inputSizeBytes,
|
|
667
|
+
"gen_ai.operation.name": "execute_tool",
|
|
668
|
+
"gen_ai.tool.name": tc.toolName,
|
|
669
|
+
"gen_ai.tool.type": "function",
|
|
670
|
+
"gen_ai.tool.call.id": tc.toolCallId,
|
|
671
|
+
}));
|
|
620
672
|
if (generatedToolResult) {
|
|
621
673
|
if (generatedToolResult.providerExecuted === true) {
|
|
622
674
|
await traceProviderExecutedTool({
|
|
@@ -629,6 +681,9 @@ export class AgentRuntime {
|
|
|
629
681
|
...toolContext,
|
|
630
682
|
agentId: this.id,
|
|
631
683
|
},
|
|
684
|
+
args: tc.input,
|
|
685
|
+
result: generatedToolResult.result,
|
|
686
|
+
isError: generatedToolResult.isError === true,
|
|
632
687
|
});
|
|
633
688
|
}
|
|
634
689
|
await persistGeneratedToolResult(generatedToolResult);
|
|
@@ -637,6 +692,18 @@ export class AgentRuntime {
|
|
|
637
692
|
toolCall.error = generatedToolResult.isError === true
|
|
638
693
|
? stringifyToolError(generatedToolResult.result)
|
|
639
694
|
: undefined;
|
|
695
|
+
setSpanAttributes(toolSpan, compactRuntimeTraceAttributes({
|
|
696
|
+
"tool.status": generatedToolResult.isError === true ? "failed" : "completed",
|
|
697
|
+
"tool.provider_executed": generatedToolResult.providerExecuted === true,
|
|
698
|
+
"tool.output.size_bytes": estimateSerializedSizeBytes(generatedToolResult.result),
|
|
699
|
+
...(toolCall.error
|
|
700
|
+
? {
|
|
701
|
+
error: true,
|
|
702
|
+
"error.type": "ProviderExecutedToolError",
|
|
703
|
+
"error.message": toolCall.error,
|
|
704
|
+
}
|
|
705
|
+
: {}),
|
|
706
|
+
}));
|
|
640
707
|
toolCalls.push(toolCall);
|
|
641
708
|
return;
|
|
642
709
|
}
|
|
@@ -647,6 +714,12 @@ export class AgentRuntime {
|
|
|
647
714
|
if (!policyCheck.allowed) {
|
|
648
715
|
toolCall.status = "error";
|
|
649
716
|
toolCall.error = policyCheck.error;
|
|
717
|
+
setSpanAttributes(toolSpan, {
|
|
718
|
+
"tool.status": "blocked",
|
|
719
|
+
error: true,
|
|
720
|
+
"error.type": "ToolPolicyBlocked",
|
|
721
|
+
"error.message": policyCheck.error,
|
|
722
|
+
});
|
|
650
723
|
const errorMessage = {
|
|
651
724
|
id: `tool_error_${tc.toolCallId}`,
|
|
652
725
|
role: "tool",
|
|
@@ -698,6 +771,11 @@ export class AgentRuntime {
|
|
|
698
771
|
toolCall.status = "completed";
|
|
699
772
|
toolCall.result = result;
|
|
700
773
|
toolCall.executionTime = Date.now() - startTime;
|
|
774
|
+
setSpanAttributes(toolSpan, compactRuntimeTraceAttributes({
|
|
775
|
+
"tool.status": "completed",
|
|
776
|
+
"tool.provider_executed": false,
|
|
777
|
+
"tool.output.size_bytes": estimateSerializedSizeBytes(result),
|
|
778
|
+
}));
|
|
701
779
|
// Track skill policy from load_skill results
|
|
702
780
|
if (tc.toolName === LOAD_SKILL_TOOL_ID) {
|
|
703
781
|
activeSkillId = extractSkillId(result);
|
|
@@ -719,7 +797,12 @@ export class AgentRuntime {
|
|
|
719
797
|
catch (error) {
|
|
720
798
|
toolCall.status = "error";
|
|
721
799
|
toolCall.error = error instanceof Error ? error.message : String(error);
|
|
722
|
-
setSpanAttributes(toolSpan, {
|
|
800
|
+
setSpanAttributes(toolSpan, {
|
|
801
|
+
"tool.status": "failed",
|
|
802
|
+
error: true,
|
|
803
|
+
"error.type": error instanceof Error ? error.name : "Error",
|
|
804
|
+
"error.message": toolCall.error,
|
|
805
|
+
});
|
|
723
806
|
const errorMessage = createToolErrorMessage(tc.toolCallId, tc.toolName, toolCall.error);
|
|
724
807
|
currentMessages.push(errorMessage);
|
|
725
808
|
await this.memory.add(errorMessage);
|
|
@@ -730,6 +813,7 @@ export class AgentRuntime {
|
|
|
730
813
|
}
|
|
731
814
|
this.status = "completed";
|
|
732
815
|
addSpanEvent(loopSpan, "max_steps_reached", { maxSteps });
|
|
816
|
+
setSpanAttributes(loopSpan, buildRuntimeUsageTraceAttributes(totalUsage));
|
|
733
817
|
const lastMsg = currentMessages[currentMessages.length - 1];
|
|
734
818
|
return {
|
|
735
819
|
text: lastMsg ? getTextFromParts(lastMsg.parts) : "",
|
|
@@ -1024,6 +1108,7 @@ export class AgentRuntime {
|
|
|
1024
1108
|
...toolContext,
|
|
1025
1109
|
agentId: this.id,
|
|
1026
1110
|
},
|
|
1111
|
+
args: toolCall.args,
|
|
1027
1112
|
});
|
|
1028
1113
|
toolCall.status = "completed";
|
|
1029
1114
|
toolCalls.push(toolCall);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
type RuntimeTraceAttributeValue = string | number | boolean;
|
|
2
|
+
export type RuntimeUsageTraceInput = {
|
|
3
|
+
inputTokens?: number;
|
|
4
|
+
outputTokens?: number;
|
|
5
|
+
promptTokens?: number;
|
|
6
|
+
completionTokens?: number;
|
|
7
|
+
totalTokens?: number;
|
|
8
|
+
cacheCreationInputTokens?: number;
|
|
9
|
+
cacheReadInputTokens?: number;
|
|
10
|
+
cachedInputTokens?: number;
|
|
11
|
+
reasoningTokens?: number;
|
|
12
|
+
billableInputTokens?: number;
|
|
13
|
+
billableOutputTokens?: number;
|
|
14
|
+
costUsd?: number;
|
|
15
|
+
providerInputCostUsd?: number;
|
|
16
|
+
providerOutputCostUsd?: number;
|
|
17
|
+
providerCostUsd?: number;
|
|
18
|
+
veryfrontInputChargeUsd?: number;
|
|
19
|
+
veryfrontOutputChargeUsd?: number;
|
|
20
|
+
veryfrontChargeUsd?: number;
|
|
21
|
+
veryfrontBilledUsd?: number;
|
|
22
|
+
costCredits?: number;
|
|
23
|
+
costSource?: "gateway" | "missing" | "partial" | string;
|
|
24
|
+
billingMode?: "direct" | "deferred" | string;
|
|
25
|
+
usageCaptureStatus?: "complete" | "partial" | "missing" | string;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Builds OTel/Datadog-safe token and billing attributes for runtime spans.
|
|
29
|
+
*
|
|
30
|
+
* Token counts use OpenTelemetry GenAI semantic names. Veryfront billing and
|
|
31
|
+
* cost fields stay under an agent-owned namespace because they are platform
|
|
32
|
+
* metadata, not model-provider usage semantics.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildRuntimeUsageTraceAttributes(usage: RuntimeUsageTraceInput | null | undefined): Record<string, RuntimeTraceAttributeValue>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=trace-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-usage.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/trace-usage.ts"],"names":[],"mappings":"AAAA,KAAK,0BAA0B,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACxD,WAAW,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IAC7C,kBAAkB,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;CAClE,CAAC;AAcF;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,GAC/C,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAmC5C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
function isTraceAttributeValue(value) {
|
|
2
|
+
return typeof value === "string" || typeof value === "number" || typeof value === "boolean";
|
|
3
|
+
}
|
|
4
|
+
function usageNumber(value) {
|
|
5
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
6
|
+
}
|
|
7
|
+
function usageString(value) {
|
|
8
|
+
return typeof value === "string" && value.trim().length > 0 ? value : undefined;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Builds OTel/Datadog-safe token and billing attributes for runtime spans.
|
|
12
|
+
*
|
|
13
|
+
* Token counts use OpenTelemetry GenAI semantic names. Veryfront billing and
|
|
14
|
+
* cost fields stay under an agent-owned namespace because they are platform
|
|
15
|
+
* metadata, not model-provider usage semantics.
|
|
16
|
+
*/
|
|
17
|
+
export function buildRuntimeUsageTraceAttributes(usage) {
|
|
18
|
+
const inputTokens = usageNumber(usage?.inputTokens ?? usage?.promptTokens);
|
|
19
|
+
const outputTokens = usageNumber(usage?.outputTokens ?? usage?.completionTokens);
|
|
20
|
+
const totalTokens = usageNumber(usage?.totalTokens) ??
|
|
21
|
+
(inputTokens !== undefined && outputTokens !== undefined
|
|
22
|
+
? inputTokens + outputTokens
|
|
23
|
+
: undefined);
|
|
24
|
+
const cacheReadInputTokens = usageNumber(usage?.cacheReadInputTokens ?? usage?.cachedInputTokens);
|
|
25
|
+
return Object.fromEntries(Object.entries({
|
|
26
|
+
"gen_ai.usage.input_tokens": inputTokens,
|
|
27
|
+
"gen_ai.usage.output_tokens": outputTokens,
|
|
28
|
+
"gen_ai.usage.total_tokens": totalTokens,
|
|
29
|
+
"gen_ai.usage.cache_creation.input_tokens": usageNumber(usage?.cacheCreationInputTokens),
|
|
30
|
+
"gen_ai.usage.cache_read.input_tokens": cacheReadInputTokens,
|
|
31
|
+
"gen_ai.usage.reasoning.output_tokens": usageNumber(usage?.reasoningTokens),
|
|
32
|
+
"agent.usage.billable_input_tokens": usageNumber(usage?.billableInputTokens),
|
|
33
|
+
"agent.usage.billable_output_tokens": usageNumber(usage?.billableOutputTokens),
|
|
34
|
+
"agent.usage.cost_usd": usageNumber(usage?.costUsd),
|
|
35
|
+
"agent.usage.provider_input_cost_usd": usageNumber(usage?.providerInputCostUsd),
|
|
36
|
+
"agent.usage.provider_output_cost_usd": usageNumber(usage?.providerOutputCostUsd),
|
|
37
|
+
"agent.usage.provider_cost_usd": usageNumber(usage?.providerCostUsd),
|
|
38
|
+
"agent.usage.veryfront_input_charge_usd": usageNumber(usage?.veryfrontInputChargeUsd),
|
|
39
|
+
"agent.usage.veryfront_output_charge_usd": usageNumber(usage?.veryfrontOutputChargeUsd),
|
|
40
|
+
"agent.usage.veryfront_charge_usd": usageNumber(usage?.veryfrontChargeUsd),
|
|
41
|
+
"agent.usage.veryfront_billed_usd": usageNumber(usage?.veryfrontBilledUsd),
|
|
42
|
+
"agent.usage.cost_credits": usageNumber(usage?.costCredits),
|
|
43
|
+
"agent.usage.cost_source": usageString(usage?.costSource),
|
|
44
|
+
"agent.usage.billing_mode": usageString(usage?.billingMode),
|
|
45
|
+
"agent.usage.capture_status": usageString(usage?.usageCaptureStatus),
|
|
46
|
+
}).filter(([, value]) => isTraceAttributeValue(value)));
|
|
47
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-telemetry.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/service/node-telemetry.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAE3B,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"node-telemetry.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/service/node-telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { tryResolve } from "../../extensions/contracts.js";
|
|
2
2
|
import { NodeTelemetryProviderName, } from "../../extensions/observability/index.js";
|
|
3
|
+
import { VERSION } from "../../utils/version.js";
|
|
3
4
|
function resolveEnabled(env, defaultEnabled) {
|
|
4
5
|
const envValue = env.OTEL_ENABLED;
|
|
5
6
|
if (envValue !== undefined) {
|
|
@@ -46,8 +47,42 @@ function resolveSamplingRatio(env) {
|
|
|
46
47
|
return 1.0;
|
|
47
48
|
return Math.min(Math.max(ratio, 0), 1);
|
|
48
49
|
}
|
|
50
|
+
function parseResourceAttributes(value) {
|
|
51
|
+
if (!value)
|
|
52
|
+
return {};
|
|
53
|
+
const attributes = {};
|
|
54
|
+
for (const part of value.split(",")) {
|
|
55
|
+
const [rawKey, ...rawValueParts] = part.split("=");
|
|
56
|
+
const key = rawKey?.trim();
|
|
57
|
+
if (!key || rawValueParts.length === 0)
|
|
58
|
+
continue;
|
|
59
|
+
const rawValue = rawValueParts.join("=").trim();
|
|
60
|
+
attributes[key] = rawValue;
|
|
61
|
+
}
|
|
62
|
+
return attributes;
|
|
63
|
+
}
|
|
64
|
+
function resolveServiceName(env, defaultServiceName) {
|
|
65
|
+
const resourceAttributes = parseResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES);
|
|
66
|
+
return env.OTEL_SERVICE_NAME ?? resourceAttributes["service.name"] ?? env.DD_SERVICE ??
|
|
67
|
+
defaultServiceName;
|
|
68
|
+
}
|
|
69
|
+
function resolveServiceVersion(env, defaultServiceVersion) {
|
|
70
|
+
const resourceAttributes = parseResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES);
|
|
71
|
+
return resourceAttributes["service.version"] ??
|
|
72
|
+
env.OTEL_SERVICE_VERSION ??
|
|
73
|
+
env.DD_VERSION ??
|
|
74
|
+
env.VERYFRONT_VERSION ??
|
|
75
|
+
env.RELEASE_VERSION ??
|
|
76
|
+
env.npm_package_version ??
|
|
77
|
+
defaultServiceVersion ??
|
|
78
|
+
VERSION;
|
|
79
|
+
}
|
|
49
80
|
function resolveDeploymentEnvironment(env) {
|
|
50
|
-
|
|
81
|
+
const resourceAttributes = parseResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES);
|
|
82
|
+
return resourceAttributes["deployment.environment.name"] ??
|
|
83
|
+
resourceAttributes["deployment.environment"] ??
|
|
84
|
+
env.OTEL_DEPLOYMENT_ENVIRONMENT ??
|
|
85
|
+
env.DD_ENV ??
|
|
51
86
|
env.APP_ENVIRONMENT ??
|
|
52
87
|
env.VERYFRONT_ENVIRONMENT ??
|
|
53
88
|
env.NODE_ENV ??
|
|
@@ -112,8 +147,8 @@ export function resolveNodeHostedAgentServiceTelemetryConfig(options) {
|
|
|
112
147
|
const exporterHeaders = parseExporterHeaders(options.env.OTEL_EXPORTER_OTLP_HEADERS);
|
|
113
148
|
return {
|
|
114
149
|
enabled: tracesEnabled || metricsEnabled || logsEnabled,
|
|
115
|
-
serviceName: options.env
|
|
116
|
-
serviceVersion: options.env
|
|
150
|
+
serviceName: resolveServiceName(options.env, options.defaultServiceName),
|
|
151
|
+
serviceVersion: resolveServiceVersion(options.env, options.defaultServiceVersion),
|
|
117
152
|
deploymentEnvironment: resolveDeploymentEnvironment(options.env),
|
|
118
153
|
samplingRatio: resolveSamplingRatio(options.env),
|
|
119
154
|
exporterHeaders,
|
|
@@ -32,6 +32,13 @@ export type NodeTelemetryLogRecord = {
|
|
|
32
32
|
error?: unknown;
|
|
33
33
|
trace_id?: string;
|
|
34
34
|
span_id?: string;
|
|
35
|
+
run_id?: string;
|
|
36
|
+
agent_id?: string;
|
|
37
|
+
thread_id?: string;
|
|
38
|
+
schedule_id?: string;
|
|
39
|
+
schedule_name?: string;
|
|
40
|
+
tool_name?: string;
|
|
41
|
+
tool_call_id?: string;
|
|
35
42
|
};
|
|
36
43
|
/** Emits a structured logger record into the active telemetry pipeline. */
|
|
37
44
|
export type NodeTelemetryLogRecordEmitter = (record: NodeTelemetryLogRecord) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-telemetry-provider.d.ts","sourceRoot":"","sources":["../../../../src/src/extensions/observability/node-telemetry-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AAEjE,4DAA4D;AAC5D,MAAM,MAAM,kCAAkC,GAAG;IAC/C,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;CACb,CAAC;AAEF,qDAAqD;AACrD,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAClE,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;CACrE,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"node-telemetry-provider.d.ts","sourceRoot":"","sources":["../../../../src/src/extensions/observability/node-telemetry-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/run-stream.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,YAAY,IAAI,OAAO,EAC5B,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-stream.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/run-stream.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,YAAY,IAAI,OAAO,EAC5B,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAC;AAY3B,OAAO,KAAK,EACV,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,qBAAqB,CAAC;AAU7B,OAAO,EAEL,KAAK,IAAI,EAGV,MAAM,kBAAkB,CAAC;AAe1B,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAsCxD,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,sBAAsB,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;IAC5C,mBAAmB,CAAC,EAAE;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,cAAc,CAAC,EAAE,+BAA+B,CAAC,gBAAgB,CAAC,CAAC;IACnE,8BAA8B,CAAC,EAAE,CAC/B,KAAK,EAAE,+BAA+B,KACnC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAClC;QACH,MAAM,EAAE,CACN,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,SAAS,CAAC,EAAE;YACV,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;SAC9C,EACD,aAAa,CAAC,EAAE,MAAM,EACtB,uBAAuB,CAAC,EAAE,MAAM,EAChC,WAAW,CAAC,EAAE,WAAW,KACtB,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;KAC1C,CAAC;CACH;AAoCD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,oBAAoB,EAC3B,cAAc,EAAE,sBAAsB,EACtC,2BAA2B,CAAC,EAAE,MAAM,EAAE,EACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;;cAsFrD;AAkVD,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,+BAA+B,GACpC,OAAO,CAAC,QAAQ,CAAC,CA0anB"}
|