Plugin sources and live progress
Run dotnet run --project examples/sources -c Release from the repository root.
The example starts a trusted local C# plugin, collects a 200 MiB generated source
into an atomic request-owned result, delivers it to a bounded sink, and prints
three progress items as they arrive. No Docker service is used.
Authors register Source<TInput> and return a readable Stream; the SDK owns
its disposal. Consumers call Composition.CollectAsync with a tenant-bound
client and a ResultScope. Collection enforces the scope's byte/object quotas
and removes partial files on failure or cancellation. Use CopyToAsync to send
the committed result to an HTTP response or another caller-owned stream.
The same consumer calls work with RemotePluginClient through an authenticated
gateway binding. Sources require exclusive bindings; shared workers support
unary calls only.
JSON streams retain the 64 MiB total limit. Large binary sources use bounded
blocks and the result scope's independent quotas. PluginStreamOptions controls
one exchange timeout and the total operation lifetime, including consumer pauses.