UNPKG

eve

Version:

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

108 lines (107 loc) 6.07 kB
import type { Approval } from "#approval/definition.js"; import type { JsonObject, JsonPrimitive } from "#shared/json.js"; export type DurableDynamicCallbackPhase = "labelComplete" | "labelDelta" | "labelStart" | "approvalKey" | "approvalRequest" | "approvalResponse" | "execute" | "toModelOutput"; export type DurableDynamicCallbackFn = (closure: JsonObject, ...args: never[]) => unknown; /** * Persisted binding for one callback phase. Identity is * session, lifecycle scope, resolver, entry, tool name, and phase — carried * by the surrounding context and metadata — so only the * snapshotted closure values persist. */ export interface DurableDynamicCallbackReference { readonly closure: JsonObject; readonly stepId?: never; } export interface DurableDynamicToolCallbacks { readonly execute: DurableDynamicCallbackReference; readonly label?: { readonly complete?: DurableDynamicCallbackReference; readonly delta?: DurableDynamicCallbackReference; readonly start?: DurableDynamicCallbackReference; }; readonly approvalKey?: DurableDynamicCallbackReference; readonly approvalRequest?: DurableDynamicCallbackReference; readonly approvalResponse?: DurableDynamicCallbackReference; readonly toModelOutput?: DurableDynamicCallbackReference; } /** Live descriptor stamped on authored callbacks; `callback` never persists. */ export interface StampedDurableDynamicCallback { readonly callback: DurableDynamicCallbackFn; readonly closure: JsonObject; } export type LiveDurableDynamicToolCallbacks = Partial<{ execute: StampedDurableDynamicCallback; label: { readonly complete?: StampedDurableDynamicCallback; readonly delta?: StampedDurableDynamicCallback; readonly start?: StampedDurableDynamicCallback; }; approvalKey: StampedDurableDynamicCallback; approvalRequest: StampedDurableDynamicCallback; approvalResponse: StampedDurableDynamicCallback; toModelOutput: StampedDurableDynamicCallback; }>; export declare const DURABLE_DYNAMIC_TOOL_CALLBACKS: unique symbol; export type DynamicToolCallbackScope = "session" | "turn" | "step"; export interface DynamicToolCallbackOwner { readonly sessionId: string; readonly scope: DynamicToolCallbackScope; readonly resolverSlug: string; readonly entryKey: string; readonly name: string; } /** Re-resolution updates only the same session's resolver and lifecycle scope. */ export declare function registerDurableDynamicCallback(input: { readonly callback: DurableDynamicCallbackFn; readonly phase: DurableDynamicCallbackPhase; readonly owner: DynamicToolCallbackOwner; }): void; export declare function lookupDurableDynamicCallback(owner: DynamicToolCallbackOwner, phase: DurableDynamicCallbackPhase): DurableDynamicCallbackFn | undefined; /** Discards completed sessions or a resolver's previous result before replacement. */ export declare function clearDurableDynamicCallbacks(sessionId: string, resolver?: { readonly scope: DynamicToolCallbackScope; readonly resolverSlug: string; }): void; /** Invokes a registered callback with its snapshotted closure and live arguments. */ export declare function callDurableDynamicCallback(callback: DurableDynamicCallbackFn, closure: JsonObject, ...args: unknown[]): unknown; /** True when any persisted callback of these tools has no registered binding. */ export declare function hasUnregisteredDurableDynamicCallbacks(metadata: readonly { callbacks: DurableDynamicToolCallbacks; name: string; resolverSlug: string; entryKey: string; }[], scope: Pick<DynamicToolCallbackOwner, "sessionId" | "scope">): boolean; type DurableCallbackJsonValue<T> = T extends (...args: never[]) => unknown ? never : T extends JsonPrimitive ? T : T extends readonly (infer TItem)[] ? readonly DurableCallbackJsonValue<TItem>[] : T extends object ? DurableCallbackJsonObject<T> : never; type DurableCallbackJsonObject<T extends object> = Extract<keyof T, symbol> extends never ? { readonly [TKey in keyof T]: DurableCallbackJsonValue<Exclude<T[TKey], undefined>> | Extract<T[TKey], undefined>; } : never; /** * Defines a replayable callback for tools created outside eve's authored-source * transform, such as tools returned by a provider package. * * Put every per-tool value in `closure`. eve snapshots that JSON-serializable * object when the dynamic tool resolves and passes it as the first argument to * the current callback implementation during both live execution and replay. */ export declare function defineDurableCallback<TClosure extends object, TArgs extends unknown[], TResult>(input: { readonly callback: (closure: TClosure, ...args: TArgs) => TResult; readonly closure: TClosure & DurableCallbackJsonObject<TClosure>; }): (...args: TArgs) => TResult; /** Marks a live callback with the descriptor needed to register it at resolve time. */ export declare function stampDurableDynamicCallback<TCallback extends (...args: never[]) => unknown>(callback: TCallback, descriptor: StampedDurableDynamicCallback): TCallback; export declare function readDurableDynamicCallback(callback: unknown): StampedDurableDynamicCallback | undefined; /** Copies phase-specific callback descriptors onto a branded tool definition. */ export declare function stampDurableDynamicToolCallbacks(definition: object, callbacks: LiveDurableDynamicToolCallbacks): void; export declare function collectDurableDynamicToolCallbacks(input: { readonly label?: { readonly complete?: (...args: never[]) => unknown; readonly delta?: (...args: never[]) => unknown; readonly start?: (...args: never[]) => unknown; }; readonly approval?: Approval<never>; readonly approvalKey?: (...args: never[]) => unknown; readonly execute: (...args: never[]) => unknown; readonly toModelOutput?: (...args: never[]) => unknown; }): LiveDurableDynamicToolCallbacks; export declare function readDurableDynamicToolCallbacks(definition: object): LiveDurableDynamicToolCallbacks | undefined; export {};