import type { ComposedWorkflowInterceptor } from '../interceptor.ts'; import type { HumanReviewOptions, HumanReviewResult } from '../review/index.ts'; import type { ActivityCallable, ActivityCallOptions, AwaitChildWorkflowOptions, ChildWorkflowHandle, ChildWorkflowTarget, DetachedChildWorkflowOptions, Duration, QueryDefinition, RunAllResult, SearchAttributeHandle, SearchAttributeValue, SignalDefinition, UpdateDefinition, WorkflowContext, WorkflowKeyedRaceResult, WorkflowLogger, WorkflowMapOptions, WorkflowOperation, WorkflowOperationTupleResult, WorkflowPipeStageDefinition, WorkflowReduceInput, WorkflowReduceOptions, WorkflowRunAllBranch, WorkflowStateNamespace } from '../types.ts'; import type { ContextOperationRequest } from './operation-request.ts'; import type { ContextOptions, ErasedSagaStep, OffloadReference, StreamReference, StreamSink } from './types.ts'; import * as contextUpdates from './updates.ts'; export type { ContextOperationRequest } from './operation-request.ts'; export type { ContextOptions, OffloadReference, SagaStep, StoredStreamChunk, StreamReference, StreamSink, } from './types.ts'; export declare function setContextWorkflowInterceptor(context: Context, workflowInterceptor: ComposedWorkflowInterceptor | null): void; /** * Concrete workflow execution context injected as the first argument of every * registered workflow generator. Implements durable operations such as `run`, * `sleep`, `waitForSignal`, `review`, `offload`, `stream`, and `saga`. * * @example * ```ts * import { Context } from '@lostgradient/weft'; * * const ctx = new Context({ workflowId: 'wf-demo', workflowType: 'demo', startedAt: Date.now(), abortController: new AbortController() }); * void ctx; * ``` */ export declare class Context implements WorkflowContext { #private; readonly workflowId: string; readonly workflowExecutionToken: string | undefined; readonly workflowType: string; readonly startedAt: number; readonly signal: AbortSignal; constructor(options: ContextOptions); get executionTimeRemaining(): number; get services(): unknown; get log(): WorkflowLogger; get stepIndex(): number; get nestingDepth(): number; get accumulatedResults(): Map; get checkpointLocals(): Record; get pendingAttributeChanges(): Record; get exposedAccessors(): Map unknown>; get updateHandlers(): Map unknown>; get updateValidators(): Map unknown>; get queryHandlers(): Map unknown>; get explainEnabled(): boolean; get checkpointAccumulatedResults(): Array<[number, unknown]>; get checkpointPendingAttributeChanges(): Record | undefined; createSpeculativeChild(): Context; commitSpeculativeChild(child: Context): void; get state(): WorkflowStateNamespace; run(name: TName, input?: unknown, options?: ActivityCallOptions): Generator; run(fn: ActivityCallable, options?: ActivityCallOptions): Generator; run(fn: (() => Promise | TResult) & { execute?: never; }, options?: ActivityCallOptions): Generator; run(fn: ActivityCallable, input: TInput, options?: ActivityCallOptions): Generator; run(fn: ((input: TInput) => Promise | TResult) & { execute?: never; }, input: TInput, options?: ActivityCallOptions): Generator; /** * Durably sleep for `duration` before continuing. Unlike a wall-clock * `setTimeout`, this is a checkpointed operation: the engine persists the timer * and resumes the workflow when it fires, so a sleep survives process restarts * and spans of days. On replay an already-elapsed sleep is a no-op — a * recovered workflow does not wait again. `duration` is milliseconds * (`number`) or a duration string (`'30s'`, `'1h'`, `'2d'` — see * {@link Duration}); drive it with `yield*` from a workflow body. */ sleep(duration: Duration): Generator; suspendUntil(resumeToken: string): Generator; waitForSignal(definition: SignalDefinition): Generator; waitForSignal(name: string): Generator; waitForUpdate(definition: UpdateDefinition): Generator void; }, unknown>; waitForUpdate(name: string): Generator void; }, unknown>; waitUntil(predicate: () => boolean): Generator; waitUntil(p: () => boolean, t: Duration): Generator; getVersion(changeId: string, minSupported: number, maxSupported: number): Generator; review(options: HumanReviewOptions): Generator; all[]>(operations: TOperations): Generator, unknown>; race[]>(operations: TOperations): Generator[number], unknown>; raceKeyed>>>(operations: TOperations): Generator, unknown>; memo(key: string, fn: () => T | Promise): Generator; offload(key: string, fn: () => Promise): Generator; stream(key: string, fn: (sink: StreamSink) => AsyncGenerator): Generator; load(reference: OffloadReference): Generator; archive(key: string, data: unknown): Generator; runAll>(branches: TBranches): Generator, unknown>; saga(steps: ErasedSagaStep[]): Generator; startChild(workflowType: string, input: unknown, options: DetachedChildWorkflowOptions): Generator, unknown>; startChild(workflowType: string, input: unknown, options?: AwaitChildWorkflowOptions): Generator; pipe(stages: [WorkflowPipeStageDefinition], input: TInput): Generator; pipe(stages: [ WorkflowPipeStageDefinition, WorkflowPipeStageDefinition ], input: TInput): Generator; pipe(stages: [ WorkflowPipeStageDefinition, WorkflowPipeStageDefinition, WorkflowPipeStageDefinition ], input: TInput): Generator; pipe(stages: [ WorkflowPipeStageDefinition, WorkflowPipeStageDefinition, WorkflowPipeStageDefinition, WorkflowPipeStageDefinition ], input: TInput): Generator; map(items: readonly TItem[], workflowType: ChildWorkflowTarget, options?: WorkflowMapOptions): Generator; reduce(items: readonly TItem[], workflowType: ChildWorkflowTarget, TAccumulator>, initialValue: TAccumulator, options?: WorkflowReduceOptions): Generator; explain(enabled?: boolean): void; speculate(execute: (context: Context) => Generator | AsyncGenerator): Generator; setAttribute(key: SearchAttributeHandle, value: TValue): void; setAttribute(key: string, value: SearchAttributeValue): void; setAttributes(attributes: Record): void; getAttribute(key: SearchAttributeHandle): T | undefined; getAttribute(key: string): T | undefined; getAttributes(): Readonly>; onUpdate(definition: UpdateDefinition, handler: (payload: TInput) => TOutput | Promise, options?: contextUpdates.UpdateHandlerOptions): void; onUpdate(name: string, handler: (payload: unknown) => unknown, options?: contextUpdates.UpdateHandlerOptions): void; onQuery(definition: QueryDefinition, handler: (input: TInput) => TOutput | Promise): void; onQuery(definition: QueryDefinition, handler: () => TOutput | Promise): void; onQuery(name: string, handler: (input: unknown) => unknown): void; expose(accessors: Record unknown>): void; onCancel(handler: () => Promise | void): void; setFinalizerState(value: unknown): void; streamUrl(reference: StreamReference): string; }