Runtime
Generated from crates/node/index.d.ts.
Import from nemo-relay-node.
Main runtime lifecycle, scope, middleware, subscriber, and exporter APIs.
Interfaces
AtofExporterConfig
Mutable configuration object for AtofExporter.
AtofEndpointConfig
Mutable configuration object for one ATOF streaming endpoint.
OpenTelemetryConfig
Mutable configuration object for OpenTelemetrySubscriber.
OpenInferenceConfig
Mutable configuration object for OpenInferenceSubscriber.
Classes
AtifExporter
An Agent Trajectory Interchange Format (ATIF) exporter that collects lifecycle events and exports them as a structured trajectory.
Create an instance with session and agent metadata, then register it as an event subscriber. When ready, call exportJson() to serialize the collected trajectory.
AtofExporter
Filesystem-backed Agent Trajectory Observability Format (ATOF) JSONL event exporter.
OpenTelemetrySubscriber
OpenTelemetry-backed event subscriber.
OpenInferenceSubscriber
OpenInference-backed event subscriber.
LlmStream
An async iterator over chunks from a streaming LLM response.
Obtained from llmStreamCallExecute(). Call next() repeatedly to consume response chunks. Returns null when the stream is fully consumed.
ScopeStack
Handle to an isolated scope stack for per-request/per-task isolation.
ScopeHandle
A handle to an execution scope in the agent runtime.
Scopes form a hierarchical stack representing the current execution context (e.g., agent -> function -> tool). Use this handle to reference a specific scope when pushing child scopes, emitting events, or making tool/LLM calls.
ToolHandle
A handle representing an in-progress tool call.
Returned by toolCall() and used to signal completion via toolCallEnd().
LlmHandle
A handle representing an in-progress LLM call.
Returned by llmCall() and used to signal completion via llmCallEnd().
LlmRequest
An LLM request, encapsulating headers and content.
Construct via new LlmRequest(headers, content).
OpenAIChatCodec
Built-in codec for the OpenAI Chat Completions API.
Implements both request codec (decode/encode) and response codec (decodeResponse). Construct with new OpenAIChatCodec().
OpenAIResponsesCodec
Built-in codec for the OpenAI Responses API.
Implements both request codec (decode/encode) and response codec (decodeResponse). Construct with new OpenAIResponsesCodec().
AnthropicMessagesCodec
Built-in codec for the Anthropic Messages API.
Implements both request codec (decode/encode) and response codec (decodeResponse). Construct with new AnthropicMessagesCodec().
Enums
ScopeType
The type of an execution scope in the agent runtime hierarchy.
Functions
pushStreamChunk
Push a chunk into the stream identified by streamId. Called from JavaScript during async generator iteration.
endStream
Signal that a stream is complete. Drops the sender so the Rust receiver sees the channel as closed.
createScopeStack
Creates a new isolated scope stack.
currentScopeStack
Returns the current execution context’s scope stack handle.
setThreadScopeStack
Binds a scope stack to the current thread.
scopeStackActive
Returns whether the current execution context has an explicitly-initialized scope stack.
Returns true if setThreadScopeStack has been called on the current thread, or the caller is inside a task-local scope. Returns false when only the auto-created default is present.
getLastCallbackError
Returns the most recent callback error that could not be surfaced through a direct exception.
This is primarily used for sanitize/intercept/finalizer callback paths whose core callback signatures cannot return Result.
clearLastCallbackError
Clears the most recent callback error recorded by the Node binding.
getHandle
Get the handle for the current top-of-stack execution scope.
Returns the ScopeHandle for the innermost active scope on the current task’s scope stack. Throws if the scope stack is empty.
pushScope
Push a new execution scope onto the scope stack.
Creates a child scope with the given name and scopeType. If handle is provided, the new scope is parented to that scope; otherwise it is parented to the current top scope. Optional attributes is a bitfield of scope attribute flags. Optional data is a JSON application payload stored on the scope handle. Optional metadata is a JSON metadata payload recorded on the scope start event. Optional input is a semantic JSON payload exported on the scope start event. Optional timestamp is a Unix timestamp in microseconds recorded as the handle start time and start event timestamp. It must be a safe integer number; omit it to use the current runtime time. Returns the handle for the newly created scope.
popScope
Pop an execution scope from the scope stack.
Removes the scope identified by handle from the stack and emits an end event. Optional output is a semantic JSON payload exported on the scope end event. Optional timestamp is a Unix timestamp in microseconds recorded on the end event. It must be a safe integer number; omit it to use the runtime default end timestamp. Optional metadata is a JSON metadata payload recorded on the scope end event. Throws if the handle does not match the current top scope.
withScope
Push a scope, run a callback, then pop the scope automatically.
Creates a child scope with the given name and scopeType, invokes the callback with the new scope handle, and guarantees that the scope is popped when the callback completes (whether it returns normally, throws, or returns a rejected Promise). Supports both synchronous and async (Promise-returning) callbacks.
Optional handle sets the parent scope; attributes is a bitfield of scope attribute flags; data is stored on the scope handle; metadata is recorded on the start event; and input is exported as the semantic start-event payload.
Returns a Promise that resolves with the callback’s return value.
event
Emit a custom mark event on the current scope.
Emits a named event with optional data and metadata payloads. If handle is provided, the event is associated with that scope; otherwise it uses the current top scope. Optional timestamp is a Unix timestamp in microseconds recorded on the mark event. It must be a safe integer number; omit it to use the current runtime time.
toolCall
Begin a manual tool call lifecycle span.
Registers a tool invocation with the given name and args. Sanitize-request guardrails are applied to the emitted start-event payload; request and execution intercepts run only through toolCallExecute. Returns a ToolHandle that must be passed to toolCallEnd() when the tool finishes. Optional handle specifies the parent scope; attributes is a bitfield; data is stored on the handle; metadata is recorded on the start event; and toolCallId is recorded in the tool event category profile. Optional timestamp is a Unix timestamp in microseconds recorded as the handle start time and start event timestamp. It must be a safe integer number; omit it to use the current runtime time.
toolCallEnd
End a manual tool call lifecycle span.
Signals that the tool call identified by handle has completed with the given result. Sanitize-response guardrails are applied to the emitted end-event payload; response intercepts run only through toolCallExecute. Optional data is used when the sanitized result is JSON null, and optional metadata is recorded on the end event. Optional timestamp is a Unix timestamp in microseconds recorded on the end event. It must be a safe integer number; omit it to use the runtime default end timestamp.
toolCallExecute
Execute a tool call end-to-end with full lifecycle management.
Runs conditional-execution guardrails (on raw args) -> request intercepts -> sanitize-request guardrails for the emitted Start event payload -> execution intercepts -> func -> sanitize-response guardrails for the emitted End event payload. On rejection, only a standalone Mark event is emitted (no Start/End pair) and GuardrailRejected is returned. Returns the final execution result; sanitize guardrails do not rewrite the caller-visible value.
toolCallExecuteAsync
Execute a tool call end-to-end, supporting both sync and async (Promise-returning) callbacks.
Same lifecycle as toolCallExecute (guardrails -> intercepts -> func -> response processing), but transparently handles JS callbacks that return Promises. Uses napi_is_promise to detect Promise return values and resolves them before continuing the pipeline.
Accepts a raw JsFunction instead of ThreadsafeFunction so it can create a promise-aware wrapper with access to Env.
llmCall
Begin a manual LLM call lifecycle span.
Registers an LLM invocation with the given provider name and request payload. The request should be a JSON object with headers and content fields matching the LlmRequest schema. Returns an LlmHandle that must be passed to llmCallEnd() when the response is received. Sanitize-request guardrails are applied to the emitted start-event payload; request and execution intercepts run only through llmCallExecute. Optional handle specifies the parent scope; attributes is a bitfield; data is stored on the handle; metadata is recorded on the start event; and modelName is recorded in the LLM event category profile. Optional timestamp is a Unix timestamp in microseconds recorded as the handle start time and start event timestamp. It must be a safe integer number; omit it to use the current runtime time.
llmCallEnd
End a manual LLM call lifecycle span.
Signals that the LLM call identified by handle has completed with the given response. Sanitize-response guardrails are applied to the emitted end-event payload; response intercepts run only through llmCallExecute. Optional data is used when the sanitized response is JSON null, and optional metadata is recorded on the end event. Optional timestamp is a Unix timestamp in microseconds recorded on the end event. It must be a safe integer number; omit it to use the runtime default end timestamp.
llmCallExecute
Execute an LLM call end-to-end with full lifecycle management.
Runs conditional-execution guardrails (on raw request) -> request intercepts -> sanitize-request guardrails for the emitted Start event payload -> execution intercepts -> func -> sanitize-response guardrails for the emitted End event payload. On rejection, only a standalone Mark event is emitted (no Start/End pair) and GuardrailRejected is returned. The request should be a JSON object with headers and content fields matching the LlmRequest schema. Returns the final execution response; sanitize guardrails do not rewrite the caller-visible value.
llmCallExecuteAsync
Execute an LLM call end-to-end, supporting both sync and async (Promise-returning) callbacks.
Same lifecycle as llmCallExecute (guardrails -> intercepts -> func -> response processing), but transparently handles JS callbacks that return Promises.
llmStreamCallExecute
Execute a streaming LLM call end-to-end with full lifecycle management.
Like llmCallExecute, conditional-execution guardrails run first on the raw request. Sanitize-request guardrails only affect the emitted Start event payload, and sanitize-response guardrails only affect the aggregated End event payload. Returns an LlmStream whose next() method yields response chunks incrementally. The func callback receives the intercepted request as JSON and its response is streamed back. Stream-level intercepts are applied to each chunk. The request should be a JSON object with headers and content fields matching the LlmRequest schema.
The optional collector callback is invoked with each intercepted chunk as JSON, allowing the caller to accumulate chunks for aggregation. The optional finalizer callback is invoked once when the stream is exhausted and must return a JSON value representing the aggregated response.
registerToolSanitizeRequestGuardrail
Register a guardrail that sanitizes tool request arguments before execution.
The guardrail callback receives (toolName, args) and must return sanitized args. Higher priority values run first. Throws if a guardrail with the same name already exists.
deregisterToolSanitizeRequestGuardrail
Deregister a tool request sanitization guardrail by name.
Returns true if a guardrail with that name was found and removed.
registerToolSanitizeResponseGuardrail
Register a guardrail that sanitizes tool response data after execution.
The guardrail callback receives (toolName, result) and must return sanitized result. Higher priority values run first. Throws if a guardrail with the same name already exists.
deregisterToolSanitizeResponseGuardrail
Deregister a tool response sanitization guardrail by name.
Returns true if a guardrail with that name was found and removed.
registerToolConditionalExecutionGuardrail
Register a guardrail that conditionally gates tool execution.
The guardrail callback receives (toolName, args) and must return null to allow execution or a rejection reason string to block it. Higher priority values run first.
deregisterToolConditionalExecutionGuardrail
Deregister a tool conditional execution guardrail by name.
Returns true if a guardrail with that name was found and removed.
registerToolRequestIntercept
Register an intercept that transforms tool request arguments.
The callable receives (toolName, args) and returns transformed args. If breakChain is true, no lower-priority intercepts run after this one. Higher priority values run first.
deregisterToolRequestIntercept
Deregister a tool request intercept by name.
Returns true if an intercept with that name was found and removed.
registerToolExecutionIntercept
Register a tool execution intercept following the middleware chain pattern.
The callable receives the args and a next function. Call next(args) to invoke the next intercept or original implementation; skip calling next to short-circuit the chain.
deregisterToolExecutionIntercept
Deregister a tool execution intercept by name.
Returns true if an intercept with that name was found and removed.
registerLlmSanitizeRequestGuardrail
Register a guardrail that sanitizes LLM request data before execution.
The guardrail callback receives the LLM request as JSON and must return the sanitized request. Higher priority values run first. Throws if a guardrail with the same name already exists.
deregisterLlmSanitizeRequestGuardrail
Deregister an LLM request sanitization guardrail by name.
Returns true if a guardrail with that name was found and removed.
registerLlmSanitizeResponseGuardrail
Register a guardrail that sanitizes LLM response data after execution.
The guardrail callback receives the LLM response as a JSON value and must return the sanitized response as JSON. Higher priority values run first. Throws if a guardrail with the same name already exists.
deregisterLlmSanitizeResponseGuardrail
Deregister an LLM response sanitization guardrail by name.
Returns true if a guardrail with that name was found and removed.
registerLlmConditionalExecutionGuardrail
Register a guardrail that conditionally gates LLM execution.
The guardrail callback receives the LLM request as JSON and must return null to allow execution or a rejection reason string to block it. Higher priority values run first.
deregisterLlmConditionalExecutionGuardrail
Deregister an LLM conditional execution guardrail by name.
Returns true if a guardrail with that name was found and removed.
registerLlmRequestIntercept
Register an intercept that transforms LLM request data.
The callable receives the LlmRequest (as JSON) and returns a transformed request. If breakChain is true, no lower-priority intercepts run after this one. Higher priority values run first.
deregisterLlmRequestIntercept
Deregister an LLM request intercept by name.
Returns true if an intercept with that name was found and removed.
registerLlmExecutionIntercept
Register an LLM execution intercept following the middleware chain pattern.
The callable receives the request and a next function. Call next(request) to invoke the next intercept or original implementation; skip calling next to short-circuit the chain.
deregisterLlmExecutionIntercept
Deregister an LLM execution intercept by name.
Returns true if an intercept with that name was found and removed.
registerLlmStreamExecutionIntercept
Register a streaming LLM execution intercept following the middleware chain pattern.
The callable receives the request and a next function. Call next(request) to invoke the next intercept or original streaming implementation; in Node the returned promise resolves to an array of downstream JSON chunks. Skip calling next to short-circuit the chain.
deregisterLlmStreamExecutionIntercept
Deregister an LLM stream execution intercept by name.
Returns true if an intercept with that name was found and removed.
registerSubscriber
Register a named event subscriber that receives all lifecycle events.
The callback receives each event as the canonical JSON event object. Events are delivered asynchronously and non-blocking. Throws if a subscriber with the same name already exists.
deregisterSubscriber
Deregister an event subscriber by name.
Future emissions stop seeing the subscriber. Already queued event snapshots may still run. Returns true if a subscriber with that name was found and removed.
flushSubscribers
Wait for native subscriber callbacks queued before this call to finish.
JavaScript subscribers are queued through Node’s ThreadsafeFunction; callers that need JS callback side effects should await an event-loop tick after this returns.
scopeRegisterToolSanitizeRequestGuardrail
Register a scope-local guardrail that sanitizes tool request arguments before execution.
The guardrail callback receives (toolName, args) and must return sanitized args. Higher priority values run first. Throws if a guardrail with the same name already exists on the specified scope.
scopeDeregisterToolSanitizeRequestGuardrail
Deregister a scope-local tool request sanitization guardrail by name.
Returns true if a guardrail with that name was found and removed from the specified scope.
scopeRegisterToolSanitizeResponseGuardrail
Register a scope-local guardrail that sanitizes tool response data after execution.
The guardrail callback receives (toolName, result) and must return sanitized result. Higher priority values run first. Throws if a guardrail with the same name already exists on the specified scope.
scopeDeregisterToolSanitizeResponseGuardrail
Deregister a scope-local tool response sanitization guardrail by name.
Returns true if a guardrail with that name was found and removed from the specified scope.
scopeRegisterToolConditionalExecutionGuardrail
Register a scope-local guardrail that conditionally gates tool execution.
The guardrail callback receives (toolName, args) and must return null to allow execution or a rejection reason string to block it. Higher priority values run first.
scopeDeregisterToolConditionalExecutionGuardrail
Deregister a scope-local tool conditional execution guardrail by name.
Returns true if a guardrail with that name was found and removed from the specified scope.
scopeRegisterToolRequestIntercept
Register a scope-local intercept that transforms tool request arguments.
The callable receives (toolName, args) and returns transformed args. If breakChain is true, no lower-priority intercepts run after this one. Higher priority values run first.
scopeDeregisterToolRequestIntercept
Deregister a scope-local tool request intercept by name.
Returns true if an intercept with that name was found and removed from the specified scope.
scopeRegisterToolExecutionIntercept
Register a scope-local tool execution intercept following the middleware chain pattern.
The callable receives the args and a next function. Call next(args) to invoke the next intercept or original implementation; skip calling next to short-circuit the chain.
scopeDeregisterToolExecutionIntercept
Deregister a scope-local tool execution intercept by name.
Returns true if an intercept with that name was found and removed from the specified scope.
scopeRegisterLlmSanitizeRequestGuardrail
Register a scope-local guardrail that sanitizes LLM request data before execution.
The guardrail callback receives the LLM request as JSON and must return the sanitized request. Higher priority values run first. Throws if a guardrail with the same name already exists on the specified scope.
scopeDeregisterLlmSanitizeRequestGuardrail
Deregister a scope-local LLM request sanitization guardrail by name.
Returns true if a guardrail with that name was found and removed from the specified scope.
scopeRegisterLlmSanitizeResponseGuardrail
Register a scope-local guardrail that sanitizes LLM response data after execution.
The guardrail callback receives the LLM response as a JSON value and must return the sanitized response as JSON. Higher priority values run first. Throws if a guardrail with the same name already exists on the specified scope.
scopeDeregisterLlmSanitizeResponseGuardrail
Deregister a scope-local LLM response sanitization guardrail by name.
Returns true if a guardrail with that name was found and removed from the specified scope.
scopeRegisterLlmConditionalExecutionGuardrail
Register a scope-local guardrail that conditionally gates LLM execution.
The guardrail callback receives the LLM request as JSON and must return null to allow execution or a rejection reason string to block it. Higher priority values run first.
scopeDeregisterLlmConditionalExecutionGuardrail
Deregister a scope-local LLM conditional execution guardrail by name.
Returns true if a guardrail with that name was found and removed from the specified scope.
scopeRegisterLlmRequestIntercept
Register a scope-local intercept that transforms LLM request data.
The callable receives the LlmRequest (as JSON) and returns a transformed request. If breakChain is true, no lower-priority intercepts run after this one. Higher priority values run first.
scopeDeregisterLlmRequestIntercept
Deregister a scope-local LLM request intercept by name.
Returns true if an intercept with that name was found and removed from the specified scope.
scopeRegisterLlmExecutionIntercept
Register a scope-local LLM execution intercept following the middleware chain pattern.
The callable receives the request and a next function. Call next(request) to invoke the next intercept or original implementation; skip calling next to short-circuit the chain.
scopeDeregisterLlmExecutionIntercept
Deregister a scope-local LLM execution intercept by name.
Returns true if an intercept with that name was found and removed from the specified scope.
scopeRegisterLlmStreamExecutionIntercept
Register a scope-local streaming LLM execution intercept following the middleware chain pattern.
The callable receives the request and a next function. Call next(request) to invoke the next intercept or original streaming implementation; in Node the returned promise resolves to an array of downstream JSON chunks. Skip calling next to short-circuit the chain.
scopeDeregisterLlmStreamExecutionIntercept
Deregister a scope-local LLM stream execution intercept by name.
Returns true if an intercept with that name was found and removed from the specified scope.
scopeRegisterSubscriber
Register a scope-local named event subscriber that receives lifecycle events for the specified scope.
The callback receives each event as the canonical JSON event object. Events are delivered asynchronously and non-blocking. Throws if a subscriber with the same name already exists on the specified scope.
scopeDeregisterSubscriber
Deregister a scope-local event subscriber by name.
Returns true if a subscriber with that name was found and removed from the specified scope.
toolRequestIntercepts
Run the registered tool request intercept chain on the given arguments. Returns the transformed arguments.
toolConditionalExecution
Run the registered tool conditional execution guardrail chain. Throws if any guardrail rejects.
llmRequestIntercepts
Run the registered LLM request intercept chain on the given request. The request should be a JSON object with headers and content fields matching the LlmRequest schema. Returns the transformed request as JSON.
llmConditionalExecution
Run the registered LLM conditional execution guardrail chain. Throws if any guardrail rejects. The request should be a JSON object with headers and content fields matching the LlmRequest schema.
validatePluginConfig
Validate a plugin config document and return a structured diagnostics report.
registerPlugin
Register a plugin backed by JavaScript callbacks.
validate receives (pluginConfig) and should return a diagnostics array. register receives (pluginConfig, context) and should use the context methods to attach subscribers or intercepts. Both callbacks must be synchronous.
deregisterPlugin
Deregister a plugin by kind.
initializePlugins
Initialize the active global plugin components.
clearPluginConfiguration
Clear the active global plugin configuration.
activePluginReport
Return the last successfully configured plugin report.
listPluginKinds
List registered plugin kinds.