Commit Graph

1497 Commits

Author SHA1 Message Date
Peter Wielander 6265534d6b CVE-2025-55184 changeset (#604) 2025-12-12 19:09:08 -08:00
Peter Wielander f5db6ed52c CVE-2025-55184 (#603) 2025-12-12 19:07:21 -08:00
Vercel Release Bot 7018f490e6 Version Packages (beta) (#589)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@workflow/nuxt@4.0.1-beta.18 @workflow/world-postgres@4.1.0-beta.19 @workflow/astro@4.0.0-beta.8 @workflow/builders@4.0.1-beta.25 @workflow/cli@4.0.1-beta.30 @workflow/core@4.0.1-beta.26 @workflow/errors@4.0.1-beta.8 @workflow/next@4.0.1-beta.29 @workflow/nitro@4.0.1-beta.29 @workflow/ai@4.0.1-beta.30 @workflow/sveltekit@4.0.0-beta.23 @workflow/utils@4.0.1-beta.6 @workflow/web-shared@4.0.1-beta.27 @workflow/world-local@4.0.1-beta.17 workflow@4.0.1-beta.30 @workflow/world-vercel@4.0.1-beta.19 @workflow/world-testing@4.0.1-beta.31
2025-12-12 18:11:25 -08:00
Adrian c9b8d843fd fix: improve port detection reliability with HTTP probing (#590)
* add logs

* fix: sveltekit type error

* feat: add polling for ports

* cleanup logs

* changeset

* fix test

* test

* test

* trigger

* trigger

* trigger

* trigger
2025-12-10 13:06:19 -08:00
Adrian 8d2cabe27e fix: externalize virtual modules in sveltekit builder (#573)
* fix: add virtual modules to sveltekit builder

* add test dynamic import

* changeset

* revert
2025-12-10 11:49:02 -08:00
Peter Wielander 30c0274cdb Fix changelog generation on changeset publish (#585) 2025-12-09 18:03:18 -08:00
Karthik Kalyanaraman a4b67a9b3a [web] Show chat conversation UI when detecting step spans from DurableAgent (#586)
---------

Signed-off-by: Karthik Kalyanaraman <karthik@scale3labs.com>
2025-12-09 16:35:46 -08:00
Peter Wielander 696e7e31e8 [core] Fix runs getting stuck due to step status edge case (#588) 2025-12-09 15:04:29 -08:00
Vercel Release Bot 76795b0cd0 Version Packages (beta) (#561) @workflow/world@4.0.1-beta.10 workflow@4.0.1-beta.29 2025-12-09 09:26:51 -08:00
Peter Wielander 161c54ca13 [web] [cli] Add Web and CLI UI for listing and viewing streams (#575) 2025-12-08 18:10:02 -08:00
Peter Wielander c82b46720c [world] Add Streamer.listByRunId method to list all streams for a run (#574) 2025-12-08 16:05:44 -08:00
Nathan Rajlich 656a5027ab Check step maxRetries at the beginning of the step handler (#532) 2025-12-08 15:42:34 -08:00
Nathan Rajlich 8ff4b3a508 Enable Vercel Deployment Protection bypass secret for E2E tests (#580)
This allows us to enable the Deployment Protection feature for the
Vercel test projects.
2025-12-08 14:44:41 -08:00
JJ Kasper b29d8a80e0 Revert "fix: import stripping in client mode for step functions (#563)" (#577)
This reverts commit 8b8135fb37.
2025-12-08 14:23:05 -08:00
Adrian 451b67256c docs: fix port getting started for vite and astro (#578) 2025-12-08 14:14:43 -08:00
Adrian 3064fbfa7d fix: force devalue version (#576) 2025-12-08 13:29:15 -08:00
Peter Wielander 33c254c82c [web] Clean up error handling and surface status code (#572) 2025-12-08 12:59:05 -08:00
Ariel Weinberger 8b8135fb37 fix: import stripping in client mode for step functions (#563)
* fix client output

* inputs

* add fixtures

* test: wip

* fix: update step-with-imports fixture to match transform output

* DCO Remediation Commit for Ariel Weinberger <weinberger.ariel@gmail.com>

I, Ariel Weinberger <weinberger.ariel@gmail.com>, hereby add my Signed-off-by to this commit: 949bc0cc68
I, Ariel Weinberger <weinberger.ariel@gmail.com>, hereby add my Signed-off-by to this commit: 79e31ad4b2
I, Ariel Weinberger <weinberger.ariel@gmail.com>, hereby add my Signed-off-by to this commit: 5f6a825815
I, Ariel Weinberger <weinberger.ariel@gmail.com>, hereby add my Signed-off-by to this commit: fb20e60836
I, Ariel Weinberger <weinberger.ariel@gmail.com>, hereby add my Signed-off-by to this commit: ed8e944f0b

Signed-off-by: Ariel Weinberger <weinberger.ariel@gmail.com>

* add changeset

Signed-off-by: Ariel Weinberger <weinberger.ariel@gmail.com>

---------

Signed-off-by: Ariel Weinberger <weinberger.ariel@gmail.com>
2025-12-08 12:49:06 -08:00
Peter Wielander 058757c476 [web] Tidy time helper functions (#562) 2025-12-08 12:16:53 -08:00
Gal Schlezinger c35b445875 core: do not treat workflow suspensions as errors in otel (#567) 2025-12-08 11:00:11 -08:00
Nathan Rajlich d3fd81dffd Enhance serialization falure error reporting (#571) 2025-12-08 10:21:47 -08:00
Peter Wielander d42a9681a1 [world-local] Bump undici dependency to latest minor version (#568) 2025-12-07 13:58:46 -08:00
Pranay Prakash ad7d14e6e1 Fix asset upload in CI 2025-12-06 19:41:13 -08:00
Pranay Prakash ee4fff6814 benchmarking: make steps simulate real work (+ misc improvements) (#565)
* perf: add 5s delay to benchmark steps to simulate real work

* perf: add realistic workloads to benchmark steps

Add realistic workloads to benchmark step functions:
- doWork() - 1 second delay to simulate real computation
- stressTestStep() - 1 second delay to simulate real computation
- genBenchStream() - generates ~5KB of data in 50 chunks
- transformStream() - uppercases stream content (renamed from doubleNumbers)

Add "Slurp Time" metric to stream benchmarks measuring time from
first byte to complete stream consumption, complementing TTFB.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(e2e): increase dev test timeouts for Windows

Windows file watching and rebuilding is slower than macOS/Linux,
causing the 10s timeouts to fail. Increased to 30s to accommodate.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(ci): treat community world failures as warnings, not errors

Community world tests/benchmarks are now non-blocking:
- Removed from has_failures check in both tests.yml and benchmarks.yml
- Added separate has_warnings output for community failures
- Split PR comment notices: ❌ for failures, ⚠️ for community warnings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: apply PR review suggestions

- Fix chunk size calculation: chunkSize - 11 for ~100 bytes per chunk
- Remove redundant metadata check (always truthy)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-06 19:27:02 -08:00
Pranay Prakash 516f16fe98 fix(ci): ensure publish-results job runs when E2E tests fail
The publish-results job was being skipped because it depends on the
summary job which uses `if: always()`. When a job uses `always()`,
downstream jobs need to also use `always()` in their condition,
otherwise GitHub Actions skips them when any upstream job fails.

This was causing e2e-results.json to never be published to gh-pages.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-06 19:04:21 -08:00
Pranay Prakash b28cd847de fix: step.ts handling corrupted step invocation log 2025-12-06 18:43:39 -08:00
Pranay Prakash 54ba1888cd fix: compare benchmarks against PR base branch instead of main (#560)
* fix: compare benchmarks against PR base branch instead of main

- Use github.event.pull_request.base.ref instead of hardcoded main
- Remove search_artifacts: true to ensure most recent baseline is used
- For stacked PRs, this compares against the parent PR's baseline

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: group failed e2e tests by category and app in summary

Instead of listing each failed test as a separate item, group them by:
1. Category (world): e.g., "Community Worlds", "Vercel Production"
2. App (framework): e.g., "mongodb", "turso", "nextjs-turbopack"

This makes the summary much more readable when there are many failures.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: ensure local E2E tests always produce JSON output

- Add 'fastify' to app detection list in aggregate-e2e-results.js
- Change && to ; so e2e tests run even if dev.test.ts fails
- This ensures local-dev, local-prod, and local-postgres categories
  appear in the E2E summary comment

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: ensure local E2E tests always produce JSON output

- Add 'fastify' to app detection list in aggregate-e2e-results.js
- Change && to ; so e2e tests run even if dev.test.ts fails
- This ensures local-dev, local-prod, and local-postgres categories
  appear in the E2E summary comment

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: publish CI results to GitHub Pages for docs

- Add generate-docs-data.js script to create JSON summaries from CI artifacts
- Add publish-results job to tests.yml and benchmarks.yml workflows
- Update docs/lib/worlds-data.ts to fetch from GitHub Pages URLs
- Results published to https://vercel.github.io/workflow/ci/

This allows the docs worlds page to display actual test/benchmark
results without requiring a GITHUB_TOKEN.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: correct outputFile path for local E2E test artifacts

The --outputFile path was using ../../ which placed files outside the
repo because pnpm run test:e2e executes from workspace root, not from
the cd'd workbench directory. This prevented local-dev, local-prod, and
local-postgres test results from being uploaded as artifacts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: show green checkmark for skipped tests instead of warning

Skipped tests are intentional and shouldn't show as warnings in the
E2E test summary comments.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: use collapsible sections in benchmark PR comment

Wrap each benchmark, stream benchmarks section, and summary tables in
<details> toggles to make the PR comment more compact and readable.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat: add Vercel observability links to benchmark PR comments

- Store runId in benchmark timing data
- Add project-slug to Vercel benchmark matrix
- Pass WORKFLOW_VERCEL_PROJECT_SLUG env var to benchmarks
- Store Vercel metadata (teamSlug, projectSlug, environment) in timing files
- Generate observability deep links for each Vercel world benchmark
- Show observability links below Production (Vercel) tables

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: use correct Vercel project slugs for observability links

- nextjs-turbopack → example-nextjs-workflow-turbopack
- nitro-v3 → workbench-nitro-workflow

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-06 18:30:25 -08:00
Pranay Prakash 0bbd26f8c8 perf: use Map for invocationsQueue (O(1) lookup/delete) (#541)
* perf: use Map for invocationsQueue (O(1) lookup/delete)

Replace array-based invocationsQueue with Map<string, QueueItem> for
O(1) lookup and delete operations. This eliminates the O(n²) complexity
from findIndex + splice patterns in step.ts, hook.ts, and sleep.ts.

Changes:
- private.ts: Change invocationsQueue type from QueueItem[] to Map
- workflow.ts: Initialize with new Map() instead of []
- global.ts: Accept Map or array in WorkflowSuspension, add single-pass counting
- step.ts: Use Map.set/has/delete instead of push/findIndex/splice
- hook.ts: Use Map.set/delete instead of push/findIndex/splice
- sleep.ts: Use Map.set/get/delete instead of push/find/findIndex/splice

This is Phase 1 of the high-concurrency workflow optimization plan.
See beads issue wrk-fyx for details.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update packages/core/src/step.ts

Co-authored-by: Nathan Rajlich <n@n8.io>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Nathan Rajlich <n@n8.io>
2025-12-06 18:29:50 -08:00
Peter Wielander cbb03bcb08 Direct changeset to write github changelogs (#558) 2025-12-05 18:19:10 -08:00
Adrian 19c271c072 refactor: move request converters to @workflow/builders (#503)
sveltekit and astro use the exact same code for normalizing requests so it's been refactored to `request-converter.ts` inside `@workflow/builders`
2025-12-05 16:02:26 -08:00
Adrian 205b3953f0 refactor: add vite package for hmr (#501)
nitro, sveltekit and astro and additional vite integrations will use `hotUpdate` for hmr in the future. this adds a `@workflow/vite` package to standardize hmr in workflows
2025-12-05 16:00:26 -08:00
Vercel Release Bot 6194ded51b Version Packages (beta) (#533) @workflow/world-postgres@4.1.0-beta.17 @workflow/world-testing@4.0.1-beta.29 workflow@4.0.1-beta.28 @workflow/cli@4.0.1-beta.28 @workflow/ai@4.0.1-beta.28 @workflow/nitro@4.0.1-beta.27 @workflow/next@4.0.1-beta.27 @workflow/web-shared@4.0.1-beta.25 @workflow/builders@4.0.1-beta.23 @workflow/world-vercel@4.0.1-beta.17 @workflow/nuxt@4.0.1-beta.16 @workflow/world-local@4.0.1-beta.15 @workflow/web@4.0.1-beta.14 @workflow/swc-plugin@4.0.1-beta.12 @workflow/world@4.0.1-beta.9 @workflow/world-testing@4.0.1-beta.2 @workflow/core@4.0.1-beta.2 @workflow/world-vercel@4.0.1-beta.1 @workflow/world-local@4.0.1-beta.1 @workflow/web@4.0.1-beta.1 @workflow/swc-plugin@4.0.1-beta.1 @workflow/sveltekit@4.0.0-beta.21 @workflow/rollup@4.0.0-beta.6 @workflow/astro@4.0.0-beta.6 2025-12-05 15:24:04 -08:00
Nathan Rajlich 43f2dec31b Improved workflow registration in workflow mode (#557)
Primary motivation here is to allow a `use workflow` function to be non-exported, meaning that it is called by `start()` in i.e. an API route within the same function:

- SWC plugin now emits `globalThis.__private_workflows.set(workflowId, fn)` directly after setting `workflowId`
- Non-exported workflow functions are now properly registered and can be invoked
- Removed runtime iteration over exports in the workflow bundle - registration happens at transform time
- Simplified virtual entry generation in base-builder
2025-12-05 15:19:24 -08:00
Nathan Rajlich 21cff154a3 Add support for .mjs, .mts, .cjs, and .cts file extensions in the SWC transform (#556)
- Updated turbopack rules to include `*.mjs`, `*.mts`, `*.cjs`, `*.cts` in addition to existing extensions
- Fixed TypeScript detection for `.mts` and `.cts` files across all transform plugins
- Updated esbuild `resolveExtensions` to include `.mts` and `.cts`
- Updated the file watcher's `watchableExtensions` to include `.cts`
2025-12-05 14:39:10 -08:00
Nathan Rajlich af5b005ac8 Set workflowId property in workflow mode for non-exported workflow functions (#555)
### TL;DR

Modified the SWC plugin to set the `workflowId` property for all workflow functions in workflow mode, regardless of whether they are exported.

### What changed?

- Removed conditional logic that only added the `workflowId` property to exported workflow functions in workflow mode
- Now all workflow functions will have the `workflowId` property set, regardless of export status
- Updated test fixtures to reflect this change

### How to test?

1. Create a workflow file with non-exported workflow functions
2. Verify that the compiled output includes `workflowId` properties for all workflow functions
3. Run the existing test suite to ensure all tests pass with the updated behavior

### Why make this change?

This change ensures consistent behavior for all workflow functions. Previously, only exported workflow functions received the `workflowId` property in workflow mode, which could lead to inconsistent behavior when referencing non-exported workflow functions within the same file. This change makes the behavior more predictable and ensures all workflow functions are properly identified.
2025-12-05 14:31:54 -08:00
Nathan Rajlich fa37d26275 Set workflowId property directly after function declarations (#548)
Set `workflowId` property directly after function declarations in the SWC plugin.

### What changed?

Modified the SWC plugin to add the `workflowId` property immediately after workflow function declarations instead of collecting and adding them at the end of the file. This change applies to all transform modes (Client, Step, and Workflow).

The key changes include:
- Removed mode-specific conditions for adding `workflowId` assignments
- Simplified the code by adding `workflowId` inline for all workflow functions
- Cleared the `workflow_exports_to_expand` collection since it's no longer needed

### How to test?

1. Run the test suite to verify that all tests pass with the updated output format
2. Check the test fixtures to confirm that `workflowId` properties now appear directly after their respective function declarations
3. Verify that the behavior is consistent across all transform modes

### Why make this change?

This change improves code organization by placing the `workflowId` property closer to its associated function declaration, making the generated code more readable and maintainable. It also simplifies the plugin's logic by using a consistent approach across all transform modes rather than handling different modes separately.
2025-12-05 14:30:04 -08:00
Nathan Rajlich f46c51e30f Apply workflow transformation with export { fnName } syntax (#547)
Added support for workflow transformation with `export { fnName }` syntax.

### What changed?

Enhanced the SWC plugin to properly handle workflow functions that are exported using the named export syntax (`export { fnName }`). Previously, the plugin only properly handled workflow functions that were directly exported with `export function` or `export const`.

The implementation now:
- Collects names that are exported via `export { ... }` syntax in a first pass
- Applies the appropriate transformations to workflow functions that are later exported
- Ensures workflowId is correctly assigned to functions exported with this syntax
- Works across all transformation modes (Client, Step, and Workflow)

### How to test?

Test with files that use the named export syntax:

```javascript
async function workflowFunction() {
  'use workflow';
  // function body
}

export { workflowFunction };
```

Verify that the transformation correctly:
- Adds workflowId to the function
- Applies the appropriate mode-specific transformations
- Preserves the export statement

### Why make this change?

This change ensures consistent behavior across different export syntaxes. Previously, workflow functions exported with the `export { fnName }` syntax weren't properly transformed, which could lead to runtime errors or unexpected behavior. This enhancement provides developers with more flexibility in how they structure and export their workflow functions.
2025-12-05 14:20:40 -08:00
Pranay Prakash 48b3a12fd0 Add stress test benchmarks for large concurrent step counts (#539)
Add new benchmark workflows to reproduce reported issues with Promise.race
and Promise.all falling over when array sizes exceed a few hundred.

New workflows:
- promiseAllStressTestWorkflow(count) - Tests Promise.all with many concurrent steps
- promiseRaceStressTestLargeWorkflow(count) - Tests Promise.race with Map pattern

New benchmarks at 100, 500, and 1000 concurrent step scales for both
Promise.all and Promise.race patterns.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 14:20:00 -08:00
Peter Wielander 24e6271592 [web] UI polish: inline durations, font fixes, trace viewer scrolling fix (#554) 2025-12-05 12:43:39 -08:00
Karthik Kalyanaraman 4aecb9996f Add workflow CFG visualization to observability UI (#456)
---------

Signed-off-by: Karthik Kalyanaraman <karthik@scale3labs.com>
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
2025-12-05 12:05:17 -08:00
Pranay Prakash 7969df9f59 [web-shared] Human readable durations in span viewer (#535)
---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: pranay.prakash <pranay.prakash@vercel.com>
Co-authored-by: Peter Wielander <mittgfu@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-05 10:37:44 -08:00
Peter Wielander 817245526e [web] Add run data expiry date and status to trace viewer (#549) 2025-12-05 10:29:03 -08:00
Karthik Kalyanaraman 14daeddb2f UX updates to span viewer panel (#457) 2025-12-05 09:38:43 -08:00
Adrian c872c5d162 ci: fix verboseness on e2e tests (#543) 2025-12-04 21:55:06 -08:00
Adrian b73fc72f0e test: fix getViolationLocation sync in test (#540) 2025-12-04 18:25:03 -08:00
Adrian fc774e57d0 fix: error messages in esbuild node module plugin (#264)
* feat: add file dependency tracing for node module plugin

* feat: add violation identifier and read file to show contents

* Update packages/builders/src/node-module-esbuild-plugin.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* changeset

* fix: node module plugin silently failing when enhanced resolve fails

* chore: fix comment jsdoc

* fix: infinite loop in traversing dep grpah

* Update packages/builders/src/node-module-esbuild-plugin.test.ts

Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>

* fix

* cleanup

* test: add comprehensive build errors test

* add more tests

* fix generate workflows

* update test

* fix: use readFile over readFileSync

* fix test

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: vercel[bot] <35613825+vercel[bot]@users.noreply.github.com>
2025-12-04 16:53:41 -08:00
Adrian 49e2df4691 fix: fastify and astro test matrix (#538) 2025-12-04 16:00:02 -08:00
Peter Wielander 57a2c328ca [world] Add expiredAt attribute to Run (#515) 2025-12-04 12:05:58 -08:00
Nathan Rajlich b7b717aae5 Use double quote strings in docs consistently (#531) 2025-12-04 11:34:16 -08:00
Vercel Release Bot 60e3a423b7 Version Packages (beta) (#530)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@workflow/world-testing@4.0.1-beta.28 workflow@4.0.1-beta.27 @workflow/cli@4.0.1-beta.27 @workflow/ai@4.0.1-beta.27 @workflow/web@4.0.1-beta.13
2025-12-04 11:30:44 -08:00