eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
108 lines (107 loc) • 6.66 kB
TypeScript
import type { TelemetryOptions } from "ai";
import type { InstrumentationEvents } from "#public/instrumentation/index.js";
import type { InstrumentationAttemptScope, InstrumentationContextRunner, InstrumentationHooks, InstrumentationSessionStartedEvent, InstrumentationTraceContext, InstrumentationTraceSeed, InstrumentationTurnStartedEvent } from "#instrumentation/lifecycle.js";
import { type BuildTelemetryRuntimeContextInput } from "#instrumentation/runtime-context.js";
import { type CreateInstrumentationHandleEventInput } from "#instrumentation/native-events.js";
import { type BackgroundTaskInstrumentation } from "#instrumentation/background-task-runtime.js";
import type { ResolvedInputBatch } from "#harness/input-requests.js";
import type { HandleEventFn } from "#harness/types.js";
import { type ChannelDeliveryStartInstrumentation, type ChannelDeliveryTerminalInstrumentation } from "#instrumentation/channel-delivery.js";
import { type PrepareTurnTraceContextInput } from "#instrumentation/prepare-trace-context.js";
import type { RuntimeTraceContext } from "#protocol/message.js";
import { AgentSpanIdGenerator } from "#tracing/agent-span-id-generator.js";
import type { OtelHarnessSettings, RuntimeContextResolver } from "#tracing/otel-declaration.js";
import { type ContextContainer } from "#context/container.js";
import { type MemoryInstrumentation } from "#instrumentation/memory.js";
import type { AgentSamplingOperation } from "#tracing/agent-span-contract.js";
interface InstrumentedStepSession {
readonly sessionId: string;
readonly state?: Readonly<Record<string, unknown>>;
}
export interface InstrumentationStepScope<TSession> {
readonly createHandleEvent: (input: Omit<CreateInstrumentationHandleEventInput, "agentName" | "channelAudience" | "channelKind" | "hooks" | "parentLineage" | "parentTraceContext" | "rootSessionId" | "sessionId">) => HandleEventFn | undefined;
readonly prepareAttempt: (input: {
readonly attemptIndex: number;
readonly runtimeContext?: Readonly<Record<string, unknown>>;
readonly stepIndex: number;
readonly turnId: string;
}) => PreparedInstrumentationAttempt;
readonly preparePreamble: (input: Omit<PrepareTurnTraceContextInput, "instrumentation" | "principals" | "session">) => Promise<RuntimeTraceContext | undefined>;
readonly publishInputResolutions: (input: {
readonly batch: ResolvedInputBatch;
readonly sessionId: string;
}) => Promise<void>;
readonly recordError: (error: unknown) => void;
readonly resolveRuntimeContext: (input: Omit<BuildTelemetryRuntimeContextInput, "capturesContent" | "context" | "providerResolvers" | "stepStartedResolver">) => Record<string, unknown> | undefined;
readonly session: TSession;
readonly setTurnId: (turnId: string) => void;
readonly telemetry: () => TelemetryOptions | undefined;
readonly traceContext?: InstrumentationTraceContext;
}
export interface PreparedInstrumentationAttempt {
readonly complete: () => Promise<void>;
readonly fail: (error: unknown) => Promise<void>;
readonly scope: InstrumentationAttemptScope;
readonly telemetry: TelemetryOptions | undefined;
}
export type InstrumentationAttempt = InstrumentationAttemptScope;
export interface BoundInstrumentationSession {
readonly agentName: string;
readonly rootSessionId: string;
readonly sessionId: string;
}
/** Process-wide runtime consumed by every harness execution surface. */
export interface InstrumentationRuntime {
/** Materializes settled invocation spans without draining the exporter pipeline. */
readonly flushSettledInvocations?: () => Promise<void>;
readonly forceFlush: () => Promise<void>;
readonly hooks: InstrumentationHooks;
readonly idGenerator?: AgentSpanIdGenerator;
readonly instrumentationProviders?: boolean;
readonly memoryOperations?: boolean;
readonly ownsAgentSpans?: boolean;
readonly prepareSessionTrace?: (event: InstrumentationSessionStartedEvent) => Promise<InstrumentationTraceSeed>;
readonly prepareTurnTrace?: (event: InstrumentationTurnStartedEvent) => Promise<InstrumentationTraceSeed>;
otelSettings: OtelHarnessSettings | undefined;
readonly runtimeContextResolvers?: readonly RuntimeContextResolver[];
readonly runInContext: InstrumentationContextRunner;
/** Whether the installed OTel sampler would record a trace with this id. */
readonly samplesTrace?: (traceId: string, operation?: AgentSamplingOperation) => boolean;
readonly shutdown: () => Promise<void>;
stepStartedRuntimeContextResolver?: InstrumentationEvents["step.started"];
}
/** Worker-bound instrumentation operations consumed by one session execution. */
export interface SessionInstrumentation {
readonly runStep: <TSession extends InstrumentedStepSession, TResult>(input: {
readonly environment: string;
readonly eveVersion: string;
readonly hasInput: boolean;
readonly session: TSession;
}, execute: (scope: InstrumentationStepScope<TSession>) => Promise<TResult>) => Promise<TResult>;
}
export interface ExecutionInstrumentation extends BackgroundTaskInstrumentation {
readonly createHandleEvent: (input: {
readonly handleEvent?: HandleEventFn;
readonly turnId?: string;
}) => HandleEventFn | undefined;
readonly flush: () => Promise<void>;
readonly instrumentChannelDelivery: (input: Omit<ChannelDeliveryStartInstrumentation, "hooks" | "policyAgentName"> | Omit<ChannelDeliveryTerminalInstrumentation, "hooks">) => Promise<void>;
readonly memory?: MemoryInstrumentation;
readonly prepareExecution: () => SessionInstrumentation;
readonly preparePreamble: InstrumentationStepScope<never>["preparePreamble"];
}
export declare function bindInstrumentationRuntime(runtime: InstrumentationRuntime | undefined, ctx: ContextContainer, boundSession: BoundInstrumentationSession): ExecutionInstrumentation | undefined;
export declare function bindSessionInstrumentation(input: {
readonly agentName: string;
readonly ctx: ContextContainer;
readonly rootSessionId: string;
readonly sessionId: string;
}): ExecutionInstrumentation | undefined;
export declare function initializeSessionInstrumentation(input: {
readonly agentName: string;
readonly ctx: ContextContainer;
}): void;
/** Registers the process instrumentation runtime before agent execution begins. */
export declare function registerInstrumentationRuntime(runtime: InstrumentationRuntime): InstrumentationRuntime;
export declare function getInstrumentationRuntime(): InstrumentationRuntime | undefined;
export {};