Skip to content

AIDK API Reference / aidk-kernel / Procedure

Interface: Procedure()<THandler> ​

Defined in: packages/kernel/src/procedure.ts:283

A callable function wrapper with middleware, validation, and execution control.

Procedures are the core execution primitive in AIDK. They wrap any async function and provide:

  • Middleware pipeline - Transform args, intercept results, handle errors
  • Schema validation - Zod-based input validation
  • Execution handles - Events and cancellation for long-running operations
  • Automatic tracking - Every call is tracked in the procedure graph
  • Composition - Chain procedures with .pipe()

Examples ​

typescript
const greet = createProcedure(async (name: string) => `Hello, ${name}!`);
const result = await greet('World'); // 'Hello, World!'
typescript
const proc = createProcedure(async (x: number) => x * 2)
  .use(loggingMiddleware)
  .use(timingMiddleware);
typescript
const { handle, result } = proc.withHandle()(input);
handle.events.on('stream:chunk', console.log);
const output = await result;

See ​

Type Parameters ​

Type ParameterDescription
THandler extends (...args: any[]) => anyThe function type being wrapped
ts
Procedure(...args: ExtractArgs<THandler>): Promise<ExtractReturn<THandler>>;

Defined in: packages/kernel/src/procedure.ts:288

Call the procedure directly. For streams, returns Promise&lt;AsyncIterable<ChunkType&gt;>.

Parameters ​

ParameterType
...argsExtractArgs<THandler>

Returns ​

Promise<ExtractReturn<THandler>>

Methods ​

call() ​

ts
call(...args: ExtractArgs<THandler>): Promise<ExtractReturn<THandler>>;

Defined in: packages/kernel/src/procedure.ts:294

Call the procedure (alias for direct call).

Parameters ​

ParameterType
...argsExtractArgs<THandler>

Returns ​

Promise<ExtractReturn<THandler>>

Deprecated ​

Use .run() or direct call instead.


pipe() ​

ts
pipe<TNext>(next: Procedure<TNext>): Procedure<(...args: ExtractArgs<THandler>) => Promise<ExtractReturn<TNext>>>;

Defined in: packages/kernel/src/procedure.ts:371

Pipe the output of this procedure to another procedure. Creates a new procedure that runs this procedure, then passes its result to the next.

Type Parameters ​

Type Parameter
TNext extends (arg: ExtractReturn<THandler>) => any

Parameters ​

ParameterType
nextProcedure<TNext>

Returns ​

Procedure<(...args: ExtractArgs<THandler>) => Promise<ExtractReturn<TNext>>>

Example ​

typescript
const parse = createProcedure(async (input: string) => JSON.parse(input));
const validate = createProcedure(async (data: object) => schema.parse(data));
const transform = createProcedure(async (valid: Valid) => transform(valid));

const pipeline = parse.pipe(validate).pipe(transform);
const result = await pipeline('{"name": "test"}');

run() ​

ts
run(...args: ExtractArgs<THandler>): Promise<ExtractReturn<THandler>>;

Defined in: packages/kernel/src/procedure.ts:300

Run the procedure with explicit arguments. Equivalent to direct call.

Parameters ​

ParameterType
...argsExtractArgs<THandler>

Returns ​

Promise<ExtractReturn<THandler>>


use() ​

ts
use(...middleware: (
  | MiddlewarePipeline
  | Middleware<ExtractArgs<THandler>>)[]): Procedure<THandler>;

Defined in: packages/kernel/src/procedure.ts:306

Add middleware to the procedure. Returns a new Procedure (immutable).

Parameters ​

ParameterTypeDescription
...middleware( | MiddlewarePipeline | Middleware<ExtractArgs<THandler>>)[]Middleware functions or pipelines to add

Returns ​

Procedure<THandler>


withContext() ​

ts
withContext(ctx: Partial<KernelContext>): Procedure<THandler>;

Defined in: packages/kernel/src/procedure.ts:320

Create a procedure variant with merged context. Returns a new Procedure.

Parameters ​

ParameterTypeDescription
ctxPartial<KernelContext>Partial context to merge with the current context

Returns ​

Procedure<THandler>


withHandle() ​

ts
withHandle(): ProcedureWithHandle<THandler>;

Defined in: packages/kernel/src/procedure.ts:314

Get a procedure variant that returns an execution handle. Useful for subscribing to events and tracking long-running operations.

Returns ​

ProcedureWithHandle<THandler>


withMetadata() ​

ts
withMetadata(metadata: Record<string, unknown>): Procedure<THandler>;

Defined in: packages/kernel/src/procedure.ts:355

Create a procedure variant with merged metadata. Returns a new Procedure. Metadata is passed to ExecutionTracker and included in procedure events. Useful for passing model IDs, tool names, or other execution-specific info.

Parameters ​

ParameterTypeDescription
metadataRecord<string, unknown>Metadata to merge with existing procedure metadata

Returns ​

Procedure<THandler>

Example ​

typescript
// Model adapter passes model info
const result = await model.generate
  .withMetadata({ modelId: 'gpt-4o', provider: 'openai' })
  .call(messages);

// Tool passes tool info
const result = await tool.run
  .withMetadata({ toolName: 'search', toolId: 'search-v2' })
  .call(input);

withMiddleware() ​

ts
withMiddleware(mw: 
  | MiddlewarePipeline
  | Middleware<ExtractArgs<THandler>>): Procedure<THandler>;

Defined in: packages/kernel/src/procedure.ts:326

Add a single middleware. Returns a new Procedure. Convenience method equivalent to .use(mw).

Parameters ​

ParameterType
mw| MiddlewarePipeline | Middleware<ExtractArgs<THandler>>

Returns ​

Procedure<THandler>


withTimeout() ​

ts
withTimeout(ms: number): Procedure<THandler>;

Defined in: packages/kernel/src/procedure.ts:333

Create a procedure variant with a timeout. Returns a new Procedure. Throws AbortError.timeout() if the timeout is exceeded.

Parameters ​

ParameterTypeDescription
msnumberTimeout in milliseconds

Returns ​

Procedure<THandler>

Released under the MIT License.