What changed
The user-facing types that the three SDKs share with the engine move out of the root SDK into a new package,@iii-dev/helpers (npm), iii-helpers (crate and PyPI, import iii_helpers). The package is organized into four submodules. This is a breaking change: the moved symbols are removed from the root SDK and are importable only from the helpers package.
Moved symbols
What stays in the root SDK
Types that reference core-only types stay in the root SDK in all three languages, because moving them would create a dependency cycle from the helpers package back into the core SDK:IStream, the streaming StreamRequest and StreamResponse, MiddlewareFunctionInput, and TriggerActionEnqueue. The root SDK depends on iii-helpers and imports the moved types from the submodules internally where its own code needs them.
EnqueueResult is the exception in the queue submodule: its canonical home is iii_helpers::queue, but it is also re-exported from the root SDK as the return companion to TriggerAction.Enqueue, so it remains importable from iii-sdk / iii / iii_sdk without a migration.
Migration
Import the moved types from the helpers package. Node:Why
These types are part of the shared contract between the SDKs and the engine. Housing them in one separately versioned package gives a single source of truth, lets consumers depend on only the surface they need, and keeps the root SDK focused on the worker and runtime API. It follows the@iii-dev/observability precedent. The helpers package has no dependency on the root SDK, so the dependency direction stays one way.