napi-rs surface for @ruvector/typesafe. Decisions run synchronously via
decideJson and asynchronously as an AsyncTask via decide (ADR-002 §4);
the JSON contract is ruvector_typesafe_core::types.
Error discipline (spec + ADR-005): request-level failures never throw across
the boundary — they are returned as {"error":{"kind":"limit"|"invalid"| "embedder","message":"..."}}. Only programmer errors (malformed options
JSON, unsupported embedder, an onnx model that fails to load) throw a JS
Error.