Sign in

    temporal.mbt

    Experimental MoonBit bindings for Temporal Core through sdk-core-c-bridge.

    temporal
    sdk
    ffi
    Download zip
    Version
    0.0.1
    License
    MIT
    Last updated
    5 hours ago
    Downloads
    6

    No dependencies

    #temporal.mbt

    temporal.mbt is an experimental, low-level MoonBit native binding for Temporal Core. It calls the Temporal Rust SDK sdk-core-c-bridge through a small C stub and exposes Core handles plus protobuf payloads as MoonBit values. Application code is expected to encode request protobufs and decode response protobufs outside this package.

    #Status

    • Target: MoonBit native builds on Linux.
    • API level: low-level Core handles and raw protobuf Bytes.
    • Stability: experimental. Names and option shapes may change while the binding tracks the Temporal SDK Core bridge.
    • Build model: Cargo builds the vendored Rust bridge as a static library during MoonBit native builds.

    #What Is Included

    • Runtime for owning the Temporal Core runtime.
    • Connection for connecting to Temporal services and making raw RPC calls.
    • Worker for polling and completing Core worker tasks with protobuf bytes.
    • CancellationToken for cancelling in-flight RPC calls.
    • Random for deterministic Core-compatible random values.
    • EphemeralServer helpers for starting Temporal test/dev servers through Core.
    • Structured MoonBit option types for runtime, connection, RPC, worker, and ephemeral server configuration.

    #Build Requirements

    Normal package builds require:

    • MoonBit toolchain with native target support.
    • Rust/Cargo toolchain.
    • A C compiler and linker for MoonBit native stubs.
    • Protocol Buffers compiler (protoc), available on PATH or selected by PROTOC.

    Normal builds do not require Node.js or a checked-out Temporal SDK submodule. The committed vendor snapshot includes the generated Temporal protobuf descriptor set, but the transitive prost-wkt-types dependency still invokes protoc for its well-known types. On Debian or Ubuntu, install it with sudo apt-get install protobuf-compiler.

    The package pre-build hook in moon.pkg runs Cargo when the static library is missing or older than the vendor stamp:

    cargo build --manifest-path vendor/temporal-sdk-core/Cargo.toml \ -p temporalio-sdk-core-c-bridge --release

    The generated Cargo output is local build state and is ignored by git:

    vendor/temporal-sdk-core/target/

    #Quick Check

    Use the native target. The first run may take several minutes because it builds the vendored Rust bridge.

    moon check --target native moon test --target native

    The vendor snapshot can be checked against the pinned temporal-sdk submodule commit:

    node scripts/vendor_temporal_core.mjs --check

    Refreshing the vendor snapshot is a maintainer operation:

    node scripts/vendor_temporal_core.mjs

    That command copies the required Temporal SDK Core files into vendor/temporal-sdk-core, writes Cargo.lock, writes crates/common/generated/descriptors.bin, and updates VENDOR.json plus VENDOR.stamp.

    #Ownership And Lifetimes

    The handle types are opaque external objects:

    • Runtime
    • Connection
    • Worker
    • CancellationToken
    • Random
    • EphemeralServer

    They wrap Rust Core bridge pointers managed by the C shim. MoonBit finalizers release the underlying Core objects when the MoonBit handles become unreachable. Code should still shut down long-running Core resources explicitly when the API offers a shutdown method, for example Worker::initiate_shutdown, Worker::finalize_shutdown_blocking, or EphemeralServer::shutdown_blocking.

    #Protobuf Bytes

    RPC and worker APIs use Bytes for protobuf payloads:

    • RpcCallOptions::request is an encoded Temporal request message.
    • Connection::rpc_call_blocking returns the encoded response message.
    • Worker poll methods return encoded activation/task messages.
    • Worker completion and heartbeat methods accept encoded completion/heartbeat messages.

    This package does not validate the protobuf schema at the MoonBit layer. If the bytes do not match the RPC or worker method you call, Temporal Core will return an error or the server will reject the request.

    #Metadata Encoding

    ConnectionOptions, RpcCallOptions, and update methods expose metadata and binary_metadata as Bytes to keep the public API small. The C shim interprets the bytes as newline-separated key/value pairs:

    key1 value1 key2 value2

    Keys and values should not contain newline bytes. Use metadata for textual metadata and binary_metadata for binary gRPC metadata.

    #Creating A Runtime

    let runtime = match Runtime::new() { Ok(runtime) => runtime Err(err) => abort(err.message) }

    RuntimeOptions::default() lets Core choose the default worker heartbeat interval. Set worker_heartbeat_interval_millis when tests or embedding code need tighter control.

    #Connecting To Temporal

    let options = ConnectionOptions::new( "http://127.0.0.1:7233", client_name="temporal.mbt-example", client_version="0.1.0", identity="example-worker", ) let connection = match Connection::connect_blocking(runtime, options) { Ok(connection) => connection Err(err) => abort(err.message) }

    Connection::connect currently calls the blocking implementation and invokes the callback before returning. It is provided as a callback-shaped convenience, not as a scheduler-backed async primitive.

    API keys and metadata can be updated after connecting:

    connection.update_api_key("new-api-key") connection.update_metadata(b"authorization\nBearer token")

    #Raw RPC Calls

    Use RpcCallOptions when you have encoded protobuf request bytes and know the Temporal service plus RPC name.

    let call = RpcCallOptions::new( Workflow, "GetSystemInfo", request=b"", timeout_millis=5000U, ) match connection.rpc_call_blocking(call) { Ok(response_bytes) => { // Decode temporal.api.workflowservice.v1.GetSystemInfoResponse here. ignore(response_bytes) } Err(failure) => { abort(failure.message) } }

    RpcFailure::status_code is the gRPC status code from Core. details contains encoded failure details when Core provides them.

    Use CancellationToken for calls that may need external cancellation:

    let token = CancellationToken::new() let call = RpcCallOptions::new( Workflow, "GetSystemInfo", cancellation_token=token, ) token.cancel() ignore(connection.rpc_call_blocking(call))

    #Workers

    Workers are created from an existing Connection and WorkerOptions:

    let worker_options = WorkerOptions::new( "default", "moonbit-task-queue", build_id="temporal.mbt-example", ) let worker = match Worker::new(connection, worker_options) { Ok(worker) => worker Err(err) => abort(err.message) }

    Poll methods return Ok(None) after worker shutdown and Ok(Some(bytes)) when a task was received:

    match worker.poll_workflow_activation_blocking() { Ok(Some(activation)) => { // Decode the activation protobuf and eventually complete it. ignore(activation) } Ok(None) => () Err(err) => abort(err.message) }

    Completion methods accept the corresponding encoded Core completion protobuf:

    let completion : Bytes = b"...encoded completion..." match worker.complete_workflow_activation_blocking(completion) { Ok(()) => () Err(err) => abort(err.message) }

    Shutdown is explicit:

    worker.initiate_shutdown() ignore(worker.finalize_shutdown_blocking())

    #Ephemeral Servers

    Core can start Temporal test and dev servers for integration tests. These APIs may download Temporal server binaries unless existing_path is provided.

    let options = DevServerOptions::default() let (server, target) = match EphemeralServer::start_dev_server_blocking(runtime, options) { Ok(pair) => pair Err(err) => abort(err.message) } let connection = Connection::connect_blocking( runtime, ConnectionOptions::new(target), ) ignore(connection) ignore(server.shutdown_blocking())

    #Deterministic Random

    Random wraps Core's deterministic random source:

    test "deterministic random" { let random = Random::new(123UL) let value = random.int32_range(1, 10) assert_true(value >= 1 && value < 10) let bytes = random.fill_bytes(8) assert_eq(bytes.length(), 8) }

    max_inclusive=false means the upper bound is exclusive. Pass max_inclusive=true when the upper bound should be included.

    #Error Handling

    Setup and worker lifecycle APIs return Result[..., TemporalError]. TemporalError::message is a UTF-8 lossy string converted from Core's error message bytes.

    RPC APIs return Result[Bytes, RpcFailure] because Core provides structured gRPC failure data for RPC calls.

    #Maintaining The Vendor Snapshot

    temporal-sdk is kept as the refresh source. vendor/temporal-sdk-core is the build input used by normal package users.

    After updating the submodule, refresh and verify:

    node scripts/vendor_temporal_core.mjs node scripts/vendor_temporal_core.mjs --check moon test --target native

    The refresh script writes VENDOR.stamp. moon.pkg uses that stamp as the pre-build input and the Rust static library as the pre-build output, so Cargo is rerun when the vendor snapshot changes while vendor/temporal-sdk-core/target remains untracked.

    CancellationToken

    pub type CancellationToken

    Opaque cancellation token used by raw RPC calls.

    CancellationToken::cancel

    fn CancellationToken::cancel(self : CancellationToken) -> Unit

    Requests cancellation for operations using this token.

    CancellationToken::new

    Creates a cancellation token that can be attached to RpcCallOptions.

    Connection

    pub type Connection

    Opaque handle for a Temporal client connection.

    Create one with Connection::connect_blocking or Connection::connect.

    Connection::connect

    fn Connection::connect(runtime : Runtime, options : ConnectionOptions, callback : (Result[Connection, TemporalError]) -> Unit) -> Unit

    Callback-shaped connection helper.

    This currently invokes connect_blocking and calls callback before returning.

    Connection::connect_blocking

    fn Connection::connect_blocking(runtime : Runtime, options : ConnectionOptions) -> Result[Connection, TemporalError]

    Connects to a Temporal endpoint and waits for Core to finish connection setup.

    Connection::rpc_call

    fn Connection::rpc_call(self : Connection, options : RpcCallOptions, callback : (Result[Bytes, RpcFailure]) -> Unit) -> Unit

    Callback-shaped raw RPC helper.

    This currently invokes rpc_call_blocking and calls callback before returning.

    Connection::rpc_call_blocking

    fn Connection::rpc_call_blocking(self : Connection, options : RpcCallOptions) -> Result[Bytes, RpcFailure]

    Performs a raw Temporal RPC call and waits for the encoded protobuf response.

    Connection::update_api_key

    fn Connection::update_api_key(self : Connection, api_key : String) -> Unit

    Replaces the API key used by this connection for later calls.

    Connection::update_binary_metadata

    fn Connection::update_binary_metadata(self : Connection, metadata : Bytes) -> Unit

    Replaces binary gRPC metadata for later calls.

    The byte format is newline-separated key/value pairs.

    Connection::update_metadata

    fn Connection::update_metadata(self : Connection, metadata : Bytes) -> Unit

    Replaces textual gRPC metadata for later calls.

    The byte format is newline-separated key/value pairs.

    ConnectionOptions

    pub(all) struct ConnectionOptions {
    target_url : String
    client_name : String
    client_version : String
    identity : String
    api_key : String
    metadata : Bytes
    binary_metadata : Bytes
    } derive(Eq,
    Debug
    )

    Connection options for a Temporal service endpoint.

    Metadata fields are encoded as newline-separated key/value pairs: key\nvalue\nkey\nvalue. Keys and values should not contain newline bytes.

    ConnectionOptions::new

    fn ConnectionOptions::new(target_url : String, client_name? : String, client_version? : String, identity? : String, api_key? : String, metadata? : Bytes, binary_metadata? : Bytes) -> ConnectionOptions

    Creates connection options with defaults for optional client identity fields.

    target_url is the Temporal frontend address, for example http://127.0.0.1:7233.

    DevServerOptions

    pub(all) struct DevServerOptions {
    test_server : TestServerOptions
    namespace_name : String
    ip : String
    database_filename : String
    ui : Bool
    ui_port : Int
    log_format : String
    log_level : String
    }

    Options for starting Temporal Core's ephemeral development server.

    The embedded test_server options control binary discovery or download.

    DevServerOptions::default

    Returns default development server options for a local default namespace.

    EphemeralServer

    pub type EphemeralServer

    Opaque handle for an ephemeral Temporal test or development server.

    EphemeralServer::shutdown

    fn EphemeralServer::shutdown(self : EphemeralServer, callback : (Result[Unit, TemporalError]) -> Unit) -> Unit

    Callback-shaped ephemeral server shutdown helper.

    This currently invokes shutdown_blocking and calls callback before returning.

    EphemeralServer::shutdown_blocking

    fn EphemeralServer::shutdown_blocking(self : EphemeralServer) -> Result[Unit, TemporalError]

    Shuts down an ephemeral server and waits for it to finish.

    EphemeralServer::start_dev_server

    fn EphemeralServer::start_dev_server(runtime : Runtime, options : DevServerOptions, callback : (Result[(EphemeralServer, String), TemporalError]) -> Unit) -> Unit

    Callback-shaped development server startup helper.

    This currently invokes start_dev_server_blocking and calls callback before returning.

    EphemeralServer::start_dev_server_blocking

    fn EphemeralServer::start_dev_server_blocking(runtime : Runtime, options? : DevServerOptions) -> Result[(EphemeralServer, String), TemporalError]

    Starts an ephemeral Temporal development server and returns its target address.

    EphemeralServer::start_test_server

    fn EphemeralServer::start_test_server(runtime : Runtime, options : TestServerOptions, callback : (Result[(EphemeralServer, String), TemporalError]) -> Unit) -> Unit

    Callback-shaped test server startup helper.

    This currently invokes start_test_server_blocking and calls callback before returning.

    EphemeralServer::start_test_server_blocking

    fn EphemeralServer::start_test_server_blocking(runtime : Runtime, options? : TestServerOptions) -> Result[(EphemeralServer, String), TemporalError]

    Starts an ephemeral Temporal test server and returns its target address.

    PollerBehavior

    pub(all) struct PollerBehavior {
    simple_maximum : Int
    } derive(Eq,
    Debug
    )

    Poller concurrency behavior.

    The current binding exposes the simple maximum-concurrency strategy used by the underlying Core bridge.

    PollerBehavior::simple_maximum

    fn PollerBehavior::simple_maximum(maximum : Int) -> PollerBehavior

    Creates a simple poller behavior with at most maximum concurrent polls.

    Random

    pub type Random

    Opaque deterministic random source backed by Temporal Core.

    Random::double_range

    fn Random::double_range(self : Random, min : Double, max : Double, max_inclusive? : Bool) -> Double

    Returns a deterministic floating-point value in the configured range.

    With the default max_inclusive = false, the range is [min, max).

    Random::fill_bytes

    fn Random::fill_bytes(self : Random, len : Int) -> Bytes

    Returns len deterministic random bytes.

    Random::int32_range

    fn Random::int32_range(self : Random, min : Int, max : Int, max_inclusive? : Bool) -> Int

    Returns a deterministic integer in the configured range.

    With the default max_inclusive = false, the range is [min, max).

    Random::new

    fn Random::new(seed : UInt64) -> Random

    Creates a deterministic random source using seed.

    RpcCallOptions

    pub(all) struct RpcCallOptions {
    service : RpcService
    rpc : String
    request : Bytes
    retry : Bool
    metadata : Bytes
    binary_metadata : Bytes
    timeout_millis : UInt
    cancellation_token : CancellationToken?
    }

    Raw RPC call options.

    request is the encoded protobuf request body and the response is returned as encoded protobuf bytes. timeout_millis = 0 leaves timeout selection to Temporal Core.

    RpcCallOptions::new

    fn RpcCallOptions::new(service : RpcService, rpc : String, request? : Bytes, retry? : Bool, metadata? : Bytes, binary_metadata? : Bytes, timeout_millis? : UInt, cancellation_token? : CancellationToken) -> RpcCallOptions

    Creates raw RPC call options with retry enabled and an empty protobuf request by default.

    RpcFailure

    pub(all) struct RpcFailure {
    status_code : Int
    message : String
    details : Bytes
    } derive(Eq,
    Debug
    )

    Failure returned by a raw Temporal RPC call.

    status_code is the gRPC status code reported by Core, message is a lossy UTF-8 error string, and details contains any encoded failure details provided by the bridge.

    RpcService

    pub enum RpcService {
    Workflow
    Operator
    Cloud
    Test
    Health
    } derive(Eq,
    Debug
    )

    Temporal service namespace for a raw RPC call.

    The rpc field in RpcCallOptions names the method within this service, for example GetSystemInfo on Workflow.

    Runtime

    pub type Runtime

    Opaque handle for the Temporal Core runtime.

    Create one with Runtime::new and pass it to connection and ephemeral server constructors.

    Runtime::new

    Creates a Temporal Core runtime.

    The runtime owns Core background resources used by connections, workers, and ephemeral servers. Keep it alive for as long as those handles are in use.

    RuntimeOptions

    pub(all) struct RuntimeOptions {
    worker_heartbeat_interval_millis : UInt64
    } derive(Eq,
    Debug
    )

    Runtime construction options.

    worker_heartbeat_interval_millis = 0 lets Temporal Core use its default worker heartbeat interval.

    RuntimeOptions::default

    Returns runtime options suitable for normal clients and workers.

    TemporalError

    pub(all) struct TemporalError {
    message : String
    } derive(Eq,
    Debug
    )

    Error returned by runtime, connection, worker, and ephemeral server setup operations.

    The message is decoded from the Temporal Core bridge error bytes with lossy UTF-8 conversion.

    TestServerOptions

    pub(all) struct TestServerOptions {
    existing_path : String
    sdk_name : String
    sdk_version : String
    download_version : String
    download_dest_dir : String
    port : Int
    extra_args : String
    download_ttl_seconds : UInt64
    }

    Options for starting Temporal Core's ephemeral test server.

    If existing_path is empty, Core may download a server binary according to download_version, download_dest_dir, and download_ttl_seconds.

    TestServerOptions::default

    Returns default test server options.

    Worker

    pub type Worker

    Opaque handle for a Temporal Core worker.

    Workers poll protobuf tasks from Core and complete them with protobuf completion bytes.

    Worker::complete_activity_task

    fn Worker::complete_activity_task(self : Worker, completion : Bytes, callback : (Result[Unit, TemporalError]) -> Unit) -> Unit

    Callback-shaped activity task completion helper.

    This currently invokes complete_activity_task_blocking and calls callback before returning.

    Worker::complete_activity_task_blocking

    fn Worker::complete_activity_task_blocking(self : Worker, completion : Bytes) -> Result[Unit, TemporalError]

    Completes an activity task with an encoded Core completion protobuf.

    Worker::complete_nexus_task

    fn Worker::complete_nexus_task(self : Worker, completion : Bytes, callback : (Result[Unit, TemporalError]) -> Unit) -> Unit

    Callback-shaped Nexus task completion helper.

    This currently invokes complete_nexus_task_blocking and calls callback before returning.

    Worker::complete_nexus_task_blocking

    fn Worker::complete_nexus_task_blocking(self : Worker, completion : Bytes) -> Result[Unit, TemporalError]

    Completes a Nexus task with an encoded Core completion protobuf.

    Worker::complete_workflow_activation

    fn Worker::complete_workflow_activation(self : Worker, completion : Bytes, callback : (Result[Unit, TemporalError]) -> Unit) -> Unit

    Callback-shaped workflow activation completion helper.

    This currently invokes complete_workflow_activation_blocking and calls callback before returning.

    Worker::complete_workflow_activation_blocking

    fn Worker::complete_workflow_activation_blocking(self : Worker, completion : Bytes) -> Result[Unit, TemporalError]

    Completes a workflow activation with an encoded Core completion protobuf.

    Worker::finalize_shutdown

    fn Worker::finalize_shutdown(self : Worker, callback : (Result[Unit, TemporalError]) -> Unit) -> Unit

    Callback-shaped shutdown finalization helper.

    This currently invokes finalize_shutdown_blocking and calls callback before returning.

    Worker::finalize_shutdown_blocking

    fn Worker::finalize_shutdown_blocking(self : Worker) -> Result[Unit, TemporalError]

    Waits for worker shutdown to finish.

    Worker::initiate_shutdown

    fn Worker::initiate_shutdown(self : Worker) -> Unit

    Starts graceful worker shutdown.

    Worker::new

    fn Worker::new(connection : Connection, options : WorkerOptions) -> Result[Worker, TemporalError]

    Creates a Core worker bound to connection.

    Worker::poll_activity_task

    fn Worker::poll_activity_task(self : Worker, callback : (Result[Bytes?, TemporalError]) -> Unit) -> Unit

    Callback-shaped activity task poll helper.

    This currently invokes poll_activity_task_blocking and calls callback before returning.

    Worker::poll_activity_task_blocking

    fn Worker::poll_activity_task_blocking(self : Worker) -> Result[Bytes?, TemporalError]

    Polls for the next activity task.

    Returns Ok(None) when the worker has shut down. Otherwise the returned bytes are an encoded Core activity task protobuf.

    Worker::poll_nexus_task

    fn Worker::poll_nexus_task(self : Worker, callback : (Result[Bytes?, TemporalError]) -> Unit) -> Unit

    Callback-shaped Nexus task poll helper.

    This currently invokes poll_nexus_task_blocking and calls callback before returning.

    Worker::poll_nexus_task_blocking

    fn Worker::poll_nexus_task_blocking(self : Worker) -> Result[Bytes?, TemporalError]

    Polls for the next Nexus task.

    Returns Ok(None) when the worker has shut down. Otherwise the returned bytes are an encoded Core Nexus task protobuf.

    Worker::poll_workflow_activation

    fn Worker::poll_workflow_activation(self : Worker, callback : (Result[Bytes?, TemporalError]) -> Unit) -> Unit

    Callback-shaped workflow activation poll helper.

    This currently invokes poll_workflow_activation_blocking and calls callback before returning.

    Worker::poll_workflow_activation_blocking

    fn Worker::poll_workflow_activation_blocking(self : Worker) -> Result[Bytes?, TemporalError]

    Polls for the next workflow activation.

    Returns Ok(None) when the worker has shut down. Otherwise the returned bytes are an encoded Core workflow activation protobuf.

    Worker::record_activity_heartbeat

    fn Worker::record_activity_heartbeat(self : Worker, heartbeat : Bytes) -> Result[Unit, TemporalError]

    Records an activity heartbeat using an encoded Core heartbeat protobuf.

    Worker::replace_client

    fn Worker::replace_client(self : Worker, connection : Connection) -> Result[Unit, TemporalError]

    Replaces the client connection used by this worker.

    Worker::request_workflow_eviction

    fn Worker::request_workflow_eviction(self : Worker, run_id : String) -> Unit

    Requests eviction for a workflow run id from the worker cache.

    Worker::validate

    fn Worker::validate(self : Worker, callback : (Result[Unit, TemporalError]) -> Unit) -> Unit

    Callback-shaped worker validation helper.

    This currently invokes validate_blocking and calls callback before returning.

    Worker::validate_blocking

    fn Worker::validate_blocking(self : Worker) -> Result[Unit, TemporalError]

    Validates the worker configuration with Temporal Core.

    WorkerOptions

    pub(all) struct WorkerOptions {
    namespace_name : String
    task_queue : String
    build_id : String
    identity_override : String
    max_cached_workflows : UInt
    workflow_slots : Int
    activity_slots : Int
    local_activity_slots : Int
    nexus_slots : Int
    task_types : WorkerTaskTypes
    sticky_queue_schedule_to_start_timeout_millis : UInt64
    max_heartbeat_throttle_interval_millis : UInt64
    default_heartbeat_throttle_interval_millis : UInt64
    max_activities_per_second : Double
    max_task_queue_activities_per_second : Double
    graceful_shutdown_period_millis : UInt64
    workflow_task_poller_behavior : PollerBehavior
    nonsticky_to_sticky_poll_ratio : Double
    activity_task_poller_behavior : PollerBehavior
    nexus_task_poller_behavior : PollerBehavior
    nondeterminism_as_workflow_fail : Bool
    }

    Worker configuration passed to Temporal Core.

    The task queue and namespace identify where the worker polls. Slot counts and poller behavior limit concurrency for each task type. Durations are in milliseconds.

    WorkerOptions::new

    fn WorkerOptions::new(namespace_name : String, task_queue : String, build_id? : String, identity_override? : String, max_cached_workflows? : UInt, workflow_slots? : Int, activity_slots? : Int, local_activity_slots? : Int, nexus_slots? : Int, task_types? : WorkerTaskTypes, sticky_queue_schedule_to_start_timeout_millis? : UInt64, max_heartbeat_throttle_interval_millis? : UInt64, default_heartbeat_throttle_interval_millis? : UInt64, max_activities_per_second? : Double, max_task_queue_activities_per_second? : Double, graceful_shutdown_period_millis? : UInt64, workflow_task_poller_behavior? : PollerBehavior, nonsticky_to_sticky_poll_ratio? : Double, activity_task_poller_behavior? : PollerBehavior, nexus_task_poller_behavior? : PollerBehavior, nondeterminism_as_workflow_fail? : Bool) -> WorkerOptions

    Creates worker options with conservative Core defaults.

    WorkerTaskTypes

    pub(all) struct WorkerTaskTypes {
    enable_workflows : Bool
    enable_local_activities : Bool
    enable_remote_activities : Bool
    enable_nexus : Bool
    } derive(Eq,
    Debug
    )

    Selects which task kinds a worker is allowed to poll and complete.

    WorkerTaskTypes::default

    Enables all worker task kinds.

    Powered by MoonBit

    Site sourceReport issuePackagesBuild queueSkillsStatistics

    © 2026 mooncakes.io