UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 2.63 kB
import{createLogger,formatError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{deserializeContext,serializeContext}from"#context/serialize.js";import{getInstrumentationRuntime}from"#instrumentation/runtime.js";import{truncateTelemetryText}from"#tracing/telemetry-budget.js";import{AGENT_TRACE_CONTEXT_KEY,deserializeAgentTraceContextState,serializeAgentTraceContextState}from"#tracing/agent-trace-context-codec.js";import{boundedTraceError}from"#tracing/bounded-error.js";const log=createLogger(`tracing.agent-invocation-terminal`);function recordNestedAgentInvocationTerminal(e){let t=e.serializedContext[AGENT_TRACE_CONTEXT_KEY];if(t===void 0)return e.serializedContext;let n=deserializeAgentTraceContextState(t),r=Object.entries(n.invocations).find(([,t])=>t.sessionId===e.sessionId&&(e.turnId===void 0||t.turnId===e.turnId)&&t.callId===e.callId);if(r===void 0)return e.serializedContext;let[i,a]=r;return a.terminal===void 0?{...e.serializedContext,[AGENT_TRACE_CONTEXT_KEY]:serializeAgentTraceContextState({...n,invocations:{...n.invocations,[i]:{...a,terminal:{...e.terminal,error:a.recordOutputs===!0&&e.terminal.error!==void 0?invocationError(e.terminal.error):void 0}}}})}:e.serializedContext}function settleAgentInvocationTrace(e){let t=e.result.outcome.result,n=e.result.usage??e.result.outcome.usageDelta;return recordNestedAgentInvocationTerminal({callId:e.result.callId,serializedContext:e.serializedContext,sessionId:e.sessionId,terminal:{acceptedAtMs:e.acceptedAtMs,error:t.kind===`failed`?invocationError(t.error):void 0,outcome:t.kind===`succeeded`?`completed`:t.kind===`cancelled`?`cancelled`:`failed`,usage:{inputTokenDetails:{cacheReadTokens:n.cacheReadTokens,cacheWriteTokens:n.cacheWriteTokens},inputTokens:n.inputTokens,outputTokens:n.outputTokens}}})}async function flushAgentInvocationTraces(e){if(e[AGENT_TRACE_CONTEXT_KEY]===void 0)return e;let t=getInstrumentationRuntime();if(t?.flushSettledInvocations===void 0)return e;try{let n=await deserializeContext(e);return await contextStorage.run(n,t.flushSettledInvocations),{...e,[AGENT_TRACE_CONTEXT_KEY]:serializeContext(n)[AGENT_TRACE_CONTEXT_KEY]}}catch(t){return log.warn(`could not materialize settled invocation traces`,{error:formatError(t)}),e}}function invocationError(e){return e instanceof Error?boundedTraceError(e):typeof e==`object`&&e&&`message`in e?Error(truncateTelemetryText(String(e.message),4096)):Error(typeof e==`string`?truncateTelemetryText(e,4096):`Agent invocation failed.`)}export{flushAgentInvocationTraces,invocationError,recordNestedAgentInvocationTerminal,settleAgentInvocationTrace};