mirror of
https://github.com/vercel/workflow.git
synced 2026-09-14 19:59:43 +08:00
bf6383d558
Switch the payload compression codec to zstd, which benchmarks 3–7× faster than gzip at an equal-or-better ratio on representative workloads (compression runs at every step boundary, so the write CPU is a per-step tax). zstd uses node:zlib (>= 22.15); gzip via the portable CompressionStream remains the fallback when zstd is unavailable, and WORKFLOW_COMPRESSION_CODEC=gzip forces it. Reads dispatch on the format prefix, so 'zstd' and 'gzip' payloads are both always decodable. zstd is Node-only (Web CompressionStream has no zstd), so the browser o11y read path registers a WASM-backed decoder (@tootallnate/zstd-wasm) via a new registerZstdDecoder hook; node:zlib handles Node-side reads (runtime replay, CLI, server o11y). A new workflow.serialization.codec span attribute reports which codec applied. gzip and zstd read support co-ship, so the existing specVersion-5 capability gate is unchanged. Verified end-to-end: spec-5 runs store zstd-prefixed payloads on disk and replay/complete correctly; the WASM decoder round-trips node:zlib zstd output. Benchmarks updated to compare zstd vs gzip. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
330 B
330 B
@workflow/web-shared
| @workflow/web-shared |
|---|
| minor |
Decode zstd-compressed workflow payloads in the observability UI. Since the Web DecompressionStream has no zstd support, the web o11y registers a WASM-backed zstd decoder (@tootallnate/zstd-wasm) with @workflow/core before hydrating payloads; the WASM is compiled lazily on first use.