Skip to content

Pluggable Activity Types

A flow is a graph of nodes. Most nodes run a WASM component in-process, but some nodes hand work off to a separate runtime — SoRLa, OperaLa, and (in future) others — and wait for the result. These are activity types: native flow nodes whose job is to dispatch to an external runtime over the messaging bus.

Today the platform ships these dispatch activity types:

NodeDispatches toStatus
sorla.callthe SoRLa runtimeLive
operala.callthe OperaLa runtimeLive
telco-x.calla telco-x runtimeWired, inert until a runtime exists

A dispatch node does not run business logic itself. It packages the node’s input, publishes a request to the runtime over NATS, and either:

  • awaits the response (the flow pauses and resumes when the result arrives), or
  • fires and forgets (the flow continues immediately).

All dispatch nodes share one mechanism — the same request/response contract and the same correlation handling — so they behave consistently regardless of which runtime they target.

The Designer’s flow builder grounds its palette in a capability catalog. Each activity type appears in that catalog as a dispatchable capability, which means the AI flow builder can place a sorla.call or operala.call node when a user describes work that belongs to one of those runtimes — the same way it places any other node.

The design goal is that a brand-new activity type costs almost nothing to add:

  1. One catalog entry in the Designer’s baseline capability catalog, marked as a dispatch capability. This makes the node discoverable by the AI flow builder.
  2. One line in the runner that recognises the node as a native dispatch operation.

The runner already knows how to execute any dispatch node generically, so no new execution code is needed — the node simply targets a different runtime name. When that runtime is later deployed, the previously inert node becomes live with no further changes.