Skip to content

workflow@4.6.0

Latest

Choose a tag to compare

@github-actions github-actions released this 06 Jul 19:26
Immutable release. Only release title and notes can be modified.
822197c

@workflow/core@4.6.0

  • #1853 f2ad726 @TooTallNate - Add wire-level framing for byte streams (type: 'bytes') so consumers can identify chunk boundaries — a prerequisite for transparent auto-reconnect.
  • #2397 20a6d73 @pranaygp - start({ deploymentId: 'latest' }) is now a no-op in Worlds that don't support atomic deployments (local dev, Postgres) instead of throwing — it logs a warning and targets the current deployment, so workflows that use 'latest' on Vercel still run locally.
  • #2473 015452a @pranaygp - Drain consecutively consumable replay events in a single synchronous pass instead of one process.nextTick per event, removing O(N) macrotask hops from replay.
  • #2768 d0e4191 @VaguelySerious - Correct the byte-stream framing capability cutoff so framed byte streams are never written to deployments that cannot decode them
  • #2522 5a4c6cf @VaguelySerious - Cache the local dev server port per process so workflow replays no longer re-run OS port discovery (which spawns lsof on macOS, ~60ms) on every replay.
  • #2511 db8a2c4 @VaguelySerious - Emit workflowName on per-step events (step_created, step_completed) so Worlds can access it without additional queries
  • #2471 170ea96 @pranaygp - Cache the compiled workflow-bundle vm.Script per process so replays reuse the compiled bundle instead of re-parsing it on every iteration.
  • #2472 0a5e2aa @pranaygp - Memoize hydrated step return values across inline replay iterations, turning the per-invocation step-result decrypt+parse cost from O(N²) to O(N) for sequential workflows. Only primitive results are cached, so deterministic replay is preserved.
  • #2565 a4dd59b @ijjk - Collapse default workflow build output to a single completion summary and move detailed progress logs behind DEBUG=workflow:build.
  • #2445 67fcf1a @pranaygp - Treat transient world-vercel transport failures as retryable, surfacing them as a TRANSPORT type WorkflowWorldError, to be retried by the queue instead of failing the run.

@workflow/cli@4.3.0

  • #2467 3bb5de1 @pranaygp - Add a --url flag to inspect/web that prints the run's dashboard deep link to stdout and exits (no browser, no server), and fix the Vercel dashboard URL to use the current …/workflows/runs/<id>?environment=<env> route (respecting --env).

@workflow/world@4.2.1

  • #2295 f9119d4 @TooTallNate - Fix world-local and world-postgres turning duplicate processing of the same hook_created (same runId, hookId, and token) into a self-conflict; both worlds now treat same-entity duplicates as idempotent (matching step_created), and recover crash-orphaned token claims (world-local) and hook rows (world-postgres) by completing the partial write instead of incorrectly suppressing it.
  • #2511 db8a2c4 @VaguelySerious - Emit workflowName on per-step events (step_created, step_completed) so Worlds can access it without additional queries
  • #2580 9fba14e @karthikscale3 - Send optional client-side event occurrence timestamps through world event creation.
  • #2414 2a688f0 @github-actions - New internal API format: separately encode event metadata from user payloads. Eliminates the need for calling separate endpoints for ref resolution, which improves performance especially on longer runs.
  • #2747 6dbe2de @NathanColosimo - Keep local hooks reachable after a crash or restart by rebuilding lost hook cache files from committed hook creation events, preventing active hook tokens from being reused.
  • #2622 87d213c @karthikscale3 - Declare Zod as a runtime dependency so exported schemas are built with the package's own Zod version instead of the consuming application's peer.

@workflow/world-local@4.2.1

  • #2534 ab24408 @NathanColosimo - Update undici to 7.28.0.
  • #2295 f9119d4 @TooTallNate - Fix world-local and world-postgres turning duplicate processing of the same hook_created (same runId, hookId, and token) into a self-conflict; both worlds now treat same-entity duplicates as idempotent (matching step_created), and recover crash-orphaned token claims (world-local) and hook rows (world-postgres) by completing the partial write instead of incorrectly suppressing it.
  • #2508 b06fa65 @karthikscale3 - Add run IDs on world storage telemetry spans.
  • #2747 6dbe2de @NathanColosimo - Keep local hooks reachable after a crash or restart by rebuilding lost hook cache files from committed hook creation events, preventing active hook tokens from being reused.
  • #2667 af6ff4f @VaguelySerious - Scope untagged startup recovery to untagged runs so a dev server no longer re-enqueues tagged runs (e.g. left behind by the vitest harness in a shared data directory), which previously failed run_started with "did not return the run entity".

@workflow/world-postgres@4.3.0

  • #2705 50492d7 @NathanColosimo - Move Workflow Postgres enum types into the workflow schema.
  • #2295 f9119d4 @TooTallNate - Fix world-local and world-postgres turning duplicate processing of the same hook_created (same runId, hookId, and token) into a self-conflict; both worlds now treat same-entity duplicates as idempotent (matching step_created), and recover crash-orphaned token claims (world-local) and hook rows (world-postgres) by completing the partial write instead of incorrectly suppressing it.
  • #2714 b534da2 @NathanColosimo - Fix Postgres step lifecycle event ordering so a late concurrent step_started is no longer logged after step_completed.
  • #2580 9fba14e @karthikscale3 - Send optional client-side event occurrence timestamps through world event creation.
  • #2644 3eb7e97 @NathanColosimo - Rename the Postgres setup command to bootstrap.
  • #2657 92ddf7a @NathanColosimo - Defer loopback worker startup

@workflow/world-vercel@4.5.0

  • #2414 2a688f0 @github-actions - New internal API format: separately encode event metadata from user payloads. Eliminates the need for calling separate endpoints for ref resolution, which improves performance especially on longer runs.
  • #2534 ab24408 @NathanColosimo - Update undici to 7.28.0.
  • #2580 9fba14e @karthikscale3 - Send optional client-side event occurrence timestamps through world event creation.
  • #2508 b06fa65 @karthikscale3 - Add run IDs on world storage telemetry spans.
  • #2445 67fcf1a @pranaygp - Treat transient world-vercel transport failures as retryable, surfacing them as a TRANSPORT type WorkflowWorldError, to be retried by the queue instead of failing the run.
  • #2414 2a688f0 @github-actions - Skip transferring event payload bytes when listing events with resolveData: 'none' using the v4 API.

@workflow/world-testing@4.1.11

@workflow/web@4.1.12

@workflow/web-shared@4.1.12

@workflow/ai@4.2.0

  • #2537 a06f425 @VaguelySerious - WorkflowChatTransport now repairs UI message stream part framing, so duplicated or interleaved durable stream writes no longer crash the AI SDK consumer with Received text-delta for missing text part.
  • #2440 80ccca0 @pranaygp - Re-release @workflow/ai on the 4.x stable line. Versions 5.0.0, 6.0.0, and 7.0.0 were published to the latest dist-tag in error: a changesets peer-dependency misconfiguration force-bumped a full major on every workflow minor release, even though @workflow/ai had no breaking changes. Those versions are deprecated — ^4 remains the correct stable range.
  • #2730 cfb8f77 @NathanColosimo - Continue DurableAgent tool loops whenever a model step contains tool calls, regardless of the reported finish reason.
  • #2082 280a34a @VaguelySerious - WorkflowChatTransport now drops orphan UI chunks (deltas/ends with no matching *-start in the resumed window) when reconnecting with an initialStartIndex not matching a UI chunk boundary, instead of throwing.
  • #2699 ef60d31 @VaguelySerious - DurableAgent now recovers from invalid tool-call input by returning the validation error to the model instead of aborting the stream.
  • #2635 cee802d @NathanColosimo - Suppress chat transport console errors for intentional AbortError stream closes.

@workflow/swc-plugin@4.1.2

  • #2398 b357137 @pranaygp - Fix dead-code elimination stripping module-scope declarations referenced only by a destructuring-default initializer (e.g. const { ttl = TTL } = options;), which caused a runtime ReferenceError when the default fired.

@workflow/builders@4.1.1

  • #2725 c4bc5a1 @NathanColosimo - Share framework project root detection across Astro, Next.js, and SvelteKit.
  • #2546 ba62f57 @ijjk - Optimize eager workflow discovery and improve default eager build compatibility. Also fixes NestJS builds pulling SDK build-tooling into the runtime steps bundle, which crashed step handlers at runtime.
  • #2702 504cf88 @NathanColosimo - Fix workflow graph extraction when transformed step proxies include pure annotations.
  • #2455 578f7e1 @TooTallNate - Fix Next.js lazy discovery workflow IDs for monorepo workspace packages by resolving module specifiers relative to the app package instead of the tracing root.
  • #2594 8bbf331 @ijjk - Fix fast workflow discovery for JS files imported through basenames like ./hello.step.
  • #2565 a4dd59b @ijjk - Collapse default workflow build output to a single completion summary and move detailed progress logs behind DEBUG=workflow:build.
  • #2324 4c49cc8 @VaguelySerious - Decode escaped workflowCode template literals before graph extraction so unicode-escape identifiers parse correctly.
  • #2545 c5d14c8 @ijjk - Remove the Next.js lazy discovery/deferred builder path and the workflows.lazyDiscovery option.
  • #2427 8d1f299 @ijjk - Add .swc to the builder's default gitignore handling.

@workflow/next@4.1.0

  • #2545 c5d14c8 @ijjk - Remove the Next.js lazy discovery/deferred builder path and the workflows.lazyDiscovery option.
  • #2417 977a4a2 @TooTallNate - Clarify that workflow packages removed from serverExternalPackages are still compiled during the build.
  • #2725 c4bc5a1 @NathanColosimo - Share framework project root detection across Astro, Next.js, and SvelteKit.
  • #2546 ba62f57 @ijjk - Optimize eager workflow discovery and improve default eager build compatibility. Also fixes NestJS builds pulling SDK build-tooling into the runtime steps bundle, which crashed step handlers at runtime.
  • #2455 578f7e1 @TooTallNate - Fix Next.js lazy discovery workflow IDs for monorepo workspace packages by resolving module specifiers relative to the app package instead of the tracing root.
  • #2729 01265b7 @NathanColosimo - Derive the workflow builder project root from Next.js workspace root configuration.
  • #2538 aa9919b @NathanColosimo - Prewarm the Workflow SWC plugin cache before Next.js starts parallel loader workers.
  • #2564 8db7b7f @NathanColosimo - Discover workflows imported by Next.js instrumentation, middleware, and proxy entrypoints.

@workflow/nitro@4.1.2

@workflow/nuxt@4.0.12

  • #2713 f927d69 @NathanColosimo - Use Nitro's workspace root for workflow module resolution so Nitro and Nuxt monorepo apps can import sibling workspace packages without extra config.

@workflow/sveltekit@4.0.11

@workflow/astro@4.0.11

@workflow/nest@4.0.12

  • #2546 ba62f57 @ijjk - Optimize eager workflow discovery and improve default eager build compatibility. Also fixes NestJS builds pulling SDK build-tooling into the runtime steps bundle, which crashed step handlers at runtime.

@workflow/vitest@4.0.12

  • #2726 4b42249 @NathanColosimo - Derive the Workflow Vitest cwd from the resolved Vitest project root.
  • #2351 2783ae3 @VaguelySerious - Bundle project-local imports into the test step bundle instead of externalizing them, fixing module resolution errors when bundles are loaded by Node's native ESM loader