v0.4.0 — extensible tasks: resolve, call, wrap
Extensible Tasks
New APIs
BaseTask.resolve(taskName, options?)— resolve another task by name from the registry, returns an unexecuted task instanceBaseTask.call(taskName, options?)— resolve and execute another task in a single call; shares the caller's contextTaskRegistry.wrap(name, factory)— wrap a registered task with a decorator class; the factory receives the original constructor and returns a new one (typically a subclass). Multiple wraps compose — each layer sees the previously wrapped version as its parent.
FlowRunner
The runner now injects the registry into the task context automatically. Custom tasks can resolve and call other tasks without any additional wiring.
TaskContext
TaskContext now includes an optional registry field, typed as TaskRegistry.
Full Changelog: v0.3.0...v0.4.0