From e7865d96dec141651187815f1c1bbf5e9c134408 Mon Sep 17 00:00:00 2001 From: Peter Wielander Date: Wed, 14 Oct 2026 16:37:02 -0700 Subject: [PATCH] feat(workflow-world): implement the Workflow SDK 5 World contract (spec 8) --- examples/workflow-sdk/package.json | 4 +- integrations/workflow-world/README.md | 12 + integrations/workflow-world/package.json | 7 +- .../workflow-world/scripts/integration/run.ts | 8 +- .../workflow-world/src/actors/coordinator.ts | 15 +- .../workflow-world/src/actors/dispatcher.ts | 14 +- .../workflow-world/src/actors/workflow-run.ts | 256 ++++-- integrations/workflow-world/src/index.ts | 86 +- .../tests/integration/workflow-events.test.ts | 137 +++- pnpm-lock.yaml | 745 ++++++++++-------- 10 files changed, 812 insertions(+), 472 deletions(-) diff --git a/examples/workflow-sdk/package.json b/examples/workflow-sdk/package.json index 9833a95e81..10a29d5229 100644 --- a/examples/workflow-sdk/package.json +++ b/examples/workflow-sdk/package.json @@ -14,11 +14,11 @@ "hono": "^4.12.25", "nitro": "3.0.260610-beta", "rollup": "^4.62.2", - "workflow": "5.0.0-beta.35" + "workflow": "5.2.2" }, "devDependencies": { "@types/node": "^24.0.0", - "@workflow/vitest": "5.0.0-beta.35", + "@workflow/vitest": "5.0.5", "typescript": "^5.9.3", "vite": "^7.0.0", "vitest": "^4.1.9" diff --git a/integrations/workflow-world/README.md b/integrations/workflow-world/README.md index 5987b5d849..4aff0e2a69 100644 --- a/integrations/workflow-world/README.md +++ b/integrations/workflow-world/README.md @@ -59,3 +59,15 @@ package is left to Node at runtime. Next.js rejects a package asked to do both. This package only implements orchestration. Sandbox selection, including agentOS, stays in Vercel Eve's sandbox configuration. + +## Workflow SDK compatibility + +This package implements the Workflow SDK 5 World contract and requires +`workflow` 5.2 or newer. Event ids are positions in the run's log +(`evnt_00000000000000000000000001` is a run's first event), allocated inside +the run actor's transaction that appends the event. + +Runs created by an earlier release of this package numbered their events with +ULIDs, and the Workflow SDK 5 runtime refuses to replay them. Every run is +served by the deployment at `WORKFLOW_RUNTIME_URL`, so let in-flight runs +finish on the previous release before upgrading. diff --git a/integrations/workflow-world/package.json b/integrations/workflow-world/package.json index ff86d53b19..07a40e71c3 100644 --- a/integrations/workflow-world/package.json +++ b/integrations/workflow-world/package.json @@ -28,8 +28,9 @@ "test:conformance": "pnpm run build && tsx scripts/conformance/run.ts" }, "dependencies": { - "@workflow/errors": "5.0.0-beta.11", - "@workflow/world": "5.0.0-beta.21", + "@workflow/errors": "5.0.4", + "@workflow/utils": "5.0.2", + "@workflow/world": "5.0.4", "cbor-x": "^1.6.0", "rivetkit": "workspace:*", "ulid": "~3.0.1" @@ -39,7 +40,7 @@ "@rivetkit/engine-cli-linux-x64-musl": "2.3.5", "@rivetkit/rivetkit-napi-linux-x64-gnu": "2.3.5", "@types/node": "^24.0.0", - "@workflow/world-testing": "5.0.0-beta.35", + "@workflow/world-testing": "5.0.5", "tsx": "^4.20.0", "typescript": "^5.5.2", "vite": "^7.0.0", diff --git a/integrations/workflow-world/scripts/integration/run.ts b/integrations/workflow-world/scripts/integration/run.ts index eaf97b85f1..b4639ba9a1 100644 --- a/integrations/workflow-world/scripts/integration/run.ts +++ b/integrations/workflow-world/scripts/integration/run.ts @@ -641,14 +641,14 @@ async function runChecks( input: { source: "integration" }, }, }); - const globalStep = await world.steps.get(undefined, stepId, { + const scopedStep = await world.steps.get(stepLookupRunId, stepId, { resolveData: "none", }); assert( - globalStep.stepId === stepId && globalStep.runId === stepLookupRunId, - "Expected steps.get without runId to resolve via correlation index", + scopedStep.stepId === stepId && scopedStep.runId === stepLookupRunId, + "Expected steps.get to resolve the step within its run", ); - log("global step lookup check passed"); + log("run-scoped step lookup check passed"); const waitCreated = await world.events.create(null, { eventType: "run_created", diff --git a/integrations/workflow-world/src/actors/coordinator.ts b/integrations/workflow-world/src/actors/coordinator.ts index 9b4591685a..f8ac628b5f 100644 --- a/integrations/workflow-world/src/actors/coordinator.ts +++ b/integrations/workflow-world/src/actors/coordinator.ts @@ -332,9 +332,18 @@ export const coordinator = actor({ where.push("workflow_name = ?"); args.push(params.workflowName); } - if (params?.status) { - where.push("status = ?"); - args.push(params.status); + if (params?.status !== undefined) { + // An array matches any listed status; an empty array matches nothing, + // like SQL `IN ()`. + const statuses = Array.isArray(params.status) + ? params.status + : [params.status]; + if (statuses.length === 0) { + where.push("0"); + } else { + where.push(`status IN (${statuses.map(() => "?").join(", ")})`); + args.push(...statuses); + } } const rows = await c.db.execute( ` diff --git a/integrations/workflow-world/src/actors/dispatcher.ts b/integrations/workflow-world/src/actors/dispatcher.ts index e91019eb57..207830d9d2 100644 --- a/integrations/workflow-world/src/actors/dispatcher.ts +++ b/integrations/workflow-world/src/actors/dispatcher.ts @@ -1,10 +1,10 @@ -import { MessageId, QueuePayloadSchema, parseQueueName } from "@workflow/world"; +import { MessageId, QueuePayloadSchema } from "@workflow/world"; import type { Ctx } from "./shared.js"; type DispatchRow = { message_id: string; queue_name: string; - route: "flow" | "step"; + route: "flow"; runtime_url: string; body: string; headers: Record; @@ -153,8 +153,10 @@ function normalizeRuntimeUrl(value: string) { return value.replace(/\/+$/, ""); } -function queueRoute(queueName: string): "flow" | "step" { - return parseQueueName(queueName).kind === "workflow" ? "flow" : "step"; +// Workflow continuations and queued steps both travel on the workflow topic and +// are served by the combined flow handler. There is no step route. +function queueRoute(_queueName: string): "flow" { + return "flow"; } export async function claimNextDispatch(c: Ctx): Promise { @@ -192,7 +194,9 @@ export async function claimNextDispatch(c: Ctx): Promise { return { message_id: String(row.message_id), queue_name: String(row.queue_name), - route: row.route === "step" ? "step" : "flow", + // Rows enqueued by a release that still had a step route are delivered to + // the flow handler too. + route: "flow", runtime_url: String(row.runtime_url), body: String(row.body), headers: diff --git a/integrations/workflow-world/src/actors/workflow-run.ts b/integrations/workflow-world/src/actors/workflow-run.ts index 294a9981c0..63912987cd 100644 --- a/integrations/workflow-world/src/actors/workflow-run.ts +++ b/integrations/workflow-world/src/actors/workflow-run.ts @@ -1,18 +1,24 @@ import { EntityConflictError, HookNotFoundError, + RunExpiredError, TooEarlyError, WorkflowRunNotFoundError, WorkflowWorldError, } from "@workflow/errors"; import { + EVENT_ID_PREFIX, + FIRST_EVENT_SLOT, MessageId, - SPEC_VERSION_CURRENT, + eventIdToSlot, + mintedSpecVersion, + slotToEventId, stripEventDataRefs, type CreateEventParams, type CreateEventRequest, type Event, type EventResult, + type EventsResolveData, type GetEventParams, type GetHookParams, type GetStepParams, @@ -28,7 +34,6 @@ import { type WorkflowRun, } from "@workflow/world"; import { actor } from "rivetkit"; -import { isDeepStrictEqual } from "node:util"; import { monotonicFactory } from "ulid"; import { decodeValue, encodeValue } from "../codec.js"; import type { CoordinatorIndexUpdate } from "./coordinator.js"; @@ -278,10 +283,27 @@ async function currentRunStatus(c: Ctx, runId: string) { return row?.status == null ? null : String(row.status); } +const EVENT_ID_LIKE = `${EVENT_ID_PREFIX}%`; +// Each insert re-reads the tail inside the actor transaction, and `event_id` is +// the primary key, so a collision can only come from a writer outside that +// transaction. Bounded so a broken invariant surfaces instead of spinning. +const MAX_SLOT_ATTEMPTS = 8; + +async function lastEventSlot(c: Ctx) { + // Only slot-numbered ids take part. A run written by an older release holds + // ULID ids, which the runtime refuses to replay anyway (see README). + const row = await one( + c, + "SELECT event_id FROM workflow_events WHERE event_id LIKE ? ORDER BY event_id DESC LIMIT 1", + EVENT_ID_LIKE, + ); + const slot = row ? eventIdToSlot(String(row.event_id)) : null; + return slot ?? FIRST_EVENT_SLOT - 1; +} + async function insertEvent( c: Ctx, runId: string, - eventId: string, data: StorableEventRequest, specVersion: number, now: number, @@ -292,54 +314,121 @@ async function insertEvent( // `@workflow/world` queue.d.ts). const storedEventData = "eventData" in data ? data.eventData : undefined; const dedupeCreation = creationEvents.has(data.eventType); - await c.db.execute( + const correlationId = "correlationId" in data ? data.correlationId : null; + for (let attempt = 0; attempt < MAX_SLOT_ATTEMPTS; attempt++) { + // The event's id is its 1-based position in the run's log. It is taken + // from the committed tail in the same transaction that appends the row, + // so the log stays dense and no reader can pass a slot that is filled + // later. + const eventId = slotToEventId((await lastEventSlot(c)) + 1); + const inserted = await c.db.execute( + ` + INSERT INTO workflow_events ( + event_id, run_id, event_type, correlation_id, event_data, spec_version, created_at + ) + VALUES (?, ?, ?, ?, ?, ?, ?) + ON CONFLICT DO NOTHING + RETURNING * + `, + eventId, + runId, + data.eventType, + correlationId, + encodeValue(storedEventData), + specVersion, + now, + ); + if (inserted[0]) return rowToEvent(inserted[0]); + if (dedupeCreation) { + // A creation event that already exists converges on the committed one + // and allocates no slot. + const existing = + data.eventType === "run_created" + ? await one( + c, + "SELECT * FROM workflow_events WHERE run_id = ? AND event_type = 'run_created'", + runId, + ) + : await one( + c, + "SELECT * FROM workflow_events WHERE run_id = ? AND event_type = ? AND correlation_id = ?", + runId, + data.eventType, + correlationId, + ); + if (existing) return rowToEvent(existing); + } + } + throw new WorkflowWorldError( + `Could not allocate an event slot for run "${runId}"`, + ); +} + +/** + * Bump-and-report: the events occupying the slots between the one the writer + * expected (`eventCount + 1`) and the one this write committed at. + */ +async function skippedEvents( + c: Ctx, + runId: string, + committedEventId: string, + eventCount: number, + resolveData: EventsResolveData, +) { + const expected = Math.max(eventCount + 1, FIRST_EVENT_SLOT); + const committed = eventIdToSlot(committedEventId); + if (committed == null || committed <= expected) return undefined; + const rows = await c.db.execute( ` - INSERT ${dedupeCreation ? "OR IGNORE" : ""} INTO workflow_events ( - event_id, run_id, event_type, correlation_id, event_data, spec_version, created_at - ) - VALUES (?, ?, ?, ?, ?, ?, ?) + SELECT * FROM workflow_events + WHERE run_id = ? AND event_id >= ? AND event_id < ? + ORDER BY event_id ASC `, - eventId, runId, - data.eventType, - "correlationId" in data ? data.correlationId : null, - encodeValue(storedEventData), - specVersion, - now, - ); - const inserted = await one( - c, - "SELECT * FROM workflow_events WHERE event_id = ?", - eventId, + slotToEventId(expected), + committedEventId, ); - if (inserted) return rowToEvent(inserted); - if (dedupeCreation) { - const existing = - data.eventType === "run_created" - ? await one( - c, - "SELECT * FROM workflow_events WHERE run_id = ? AND event_type = 'run_created'", - runId, - ) - : await one( - c, - "SELECT * FROM workflow_events WHERE run_id = ? AND event_type = ? AND correlation_id = ?", - runId, - data.eventType, - "correlationId" in data ? data.correlationId : null, - ); - if (existing) return rowToEvent(existing); + return rows.map((row) => stripEventDataRefs(rowToEvent(row), resolveData)); +} + +const stepSettlingEvents = new Set([ + "step_completed", + "step_failed", + "step_retrying", +]); + +/** + * A finished run accepts only the outcome of a step that was already running + * when it finished. Nothing may begin on it: `run_started` and `step_started` + * are refused with `RunExpiredError`, which the runtime reads as "nothing left + * to execute", even when the step row still reads `running` (a redelivery of a + * start an earlier delivery already claimed). The run is the only liveness + * check left once step messages stop carrying run status. + */ +async function assertAllowedOnTerminalRun( + c: Ctx, + data: StorableEventRequest, + status: string, +) { + if (data.eventType === "run_started" || data.eventType === "step_started") { + throw new RunExpiredError( + `Workflow run is already in terminal state "${status}"`, + ); } - return rowToEvent({ - ...data, - run_id: runId, - event_id: eventId, - event_type: data.eventType, - correlation_id: "correlationId" in data ? data.correlationId : null, - event_data: encodeValue(storedEventData), - spec_version: specVersion, - created_at: now, - }); + if (stepSettlingEvents.has(data.eventType) && "correlationId" in data) { + const step = await one( + c, + "SELECT status FROM workflow_steps WHERE step_id = ?", + data.correlationId, + ); + if (step && String(step.status) === "running") return; + throw new RunExpiredError( + `Cannot modify non-running step on run in terminal state "${status}"`, + ); + } + throw new EntityConflictError( + `Cannot modify run in terminal state "${status}"`, + ); } async function listEventsForRun(c: Ctx, runId: string) { @@ -572,7 +661,7 @@ export const workflowRun = actor({ : runIdOrNull; if (!runId) throw new Error("runId is required"); - const specVersion = data.specVersion ?? SPEC_VERSION_CURRENT; + const specVersion = data.specVersion ?? mintedSpecVersion(); const now = Date.now(); const resolveData = params?.resolveData ?? "all"; let run: WorkflowRun | undefined; @@ -587,9 +676,7 @@ export const workflowRun = actor({ ? null : await currentRunStatus(c, runId); if (status && terminalRuns.has(status)) { - throw new EntityConflictError( - `Cannot modify run in terminal state "${status}"`, - ); + await assertAllowedOnTerminalRun(c, data, status); } if ( status == null && @@ -810,7 +897,6 @@ export const workflowRun = actor({ await insertEvent( c, runId, - `wevt_${ulid()}`, { eventType: "step_created", correlationId: data.correlationId, @@ -828,23 +914,26 @@ export const workflowRun = actor({ data.correlationId, ); } else if (existing && lazyData) { - if ( - String(existing.step_name) !== lazyData.stepName || - !isDeepStrictEqual(decodeValue(existing.input), lazyData.input) - ) { - throw new EntityConflictError( - `Step "${data.correlationId}" already exists with different data`, - ); - } + // A lazy start is a create-claim: the runtime only sends one for a + // step whose step_created it deferred, so finding the step means a + // concurrent handler won the claim. The loser must get a conflict + // (the runtime maps it to `skipped`) rather than the winner's step, + // or it would run the body a second time. + throw new EntityConflictError( + `Step "${data.correlationId}" already created`, + ); } if (!existing) throw new WorkflowWorldError(`Step "${data.correlationId}" not found`); - if ( - String(existing.status) === "running" || - terminalSteps.has(String(existing.status)) - ) { - // Vercel may redeliver an accepted step start. Returning the existing - // step keeps delivery idempotent without incrementing its attempt. + if (terminalSteps.has(String(existing.status))) { + throw new EntityConflictError( + `Cannot modify step in terminal state "${existing.status}"`, + ); + } + if (String(existing.status) === "running") { + // A queue may redeliver an accepted step start. Returning the + // existing step keeps delivery idempotent without incrementing its + // attempt. step = rowToStep(existing); } else { if ( @@ -1091,7 +1180,6 @@ export const workflowRun = actor({ const event = await insertEvent( c, runId, - `wevt_${ulid()}`, data, specVersion, now, @@ -1190,12 +1278,24 @@ export const workflowRun = actor({ let events: Event[] | undefined; let cursor: string | null | undefined; let hasMore: boolean | undefined; - if (data.eventType === "run_started" && run) { + if (data.eventType === "run_started" && run && !params?.skipPreload) { events = (await listEventsForRun(c, runId)).map((item) => stripEventDataRefs(item, resolveData), ); cursor = events.at(-1)?.eventId ?? null; hasMore = false; + } else if (params?.eventCount !== undefined && event.eventId) { + events = await skippedEvents( + c, + runId, + event.eventId, + params.eventCount, + resolveData, + ); + if (events) { + cursor = null; + hasMore = false; + } } return { @@ -1274,15 +1374,17 @@ export const workflowRun = actor({ c, params: ListEventsByCorrelationIdParams, ) => { + assertRunKey(c, params.runId); const limit = params.pagination?.limit ?? 100; const cursor = params.pagination?.cursor; const rows = await c.db.execute( ` SELECT * FROM workflow_events - WHERE correlation_id = ? AND (? IS NULL OR event_id > ?) + WHERE run_id = ? AND correlation_id = ? AND (? IS NULL OR event_id > ?) ORDER BY event_id ASC LIMIT ? `, + params.runId, params.correlationId, cursor ?? null, cursor ?? null, @@ -1299,19 +1401,17 @@ export const workflowRun = actor({ }, getStep: async ( c, - runId: string | undefined, + runId: string, stepId: string, params?: GetStepParams, ) => { - if (runId) assertRunKey(c, runId); - const row = runId - ? await one( - c, - "SELECT * FROM workflow_steps WHERE run_id = ? AND step_id = ?", - runId, - stepId, - ) - : await one(c, "SELECT * FROM workflow_steps WHERE step_id = ?", stepId); + assertRunKey(c, runId); + const row = await one( + c, + "SELECT * FROM workflow_steps WHERE run_id = ? AND step_id = ?", + runId, + stepId, + ); if (!row) throw new WorkflowWorldError(`Step not found: ${stepId}`); return filterData(rowToStep(row), params?.resolveData) as Step; }, diff --git a/integrations/workflow-world/src/index.ts b/integrations/workflow-world/src/index.ts index 4eab2c7967..0570cd689d 100644 --- a/integrations/workflow-world/src/index.ts +++ b/integrations/workflow-world/src/index.ts @@ -2,8 +2,8 @@ import { MessageId, QueuePayloadSchema, ValidQueueName as ValidQueueNameSchema, - SPEC_VERSION_CURRENT, getQueueTopicPrefix, + mintedSpecVersion, resolveQueueNamespace, type CreateEventParams, type CreateEventRequest, @@ -29,6 +29,7 @@ import { type World, } from "@workflow/world"; import { HookNotFoundError, WorkflowWorldError } from "@workflow/errors"; +import { globalSingleton } from "@workflow/utils"; import { setup, type Registry } from "rivetkit"; import { createClient, type Client } from "rivetkit/client"; import { monotonicFactory } from "ulid"; @@ -180,6 +181,28 @@ function verifyWorkflowBearer(req: Request) { return Response.json({ error: "Unauthorized" }, { status: 401 }); } +/** + * The subset of `CreateEventParams` the run actor reads. Params also carry + * process-local values (`replayEventObserver` is a function) that cannot cross + * the actor RPC, so only these are forwarded. + */ +function actorEventParams( + params: CreateEventParams | undefined, +): CreateEventParams | undefined { + if (!params) return undefined; + return { + ...(params.resolveData === undefined + ? {} + : { resolveData: params.resolveData }), + ...(params.eventCount === undefined + ? {} + : { eventCount: params.eventCount }), + ...(params.skipPreload === undefined + ? {} + : { skipPreload: params.skipPreload }), + }; +} + function runActor(client: Client, runId: string) { return client.workflowRun.getOrCreate([runId]); } @@ -246,10 +269,21 @@ function withRegistryReadiness( }) as Client; } -const ulid = monotonicFactory(); +// Process-wide rather than per module instance: a host that bundles this +// package (Next.js compiles the World into each server layer) would otherwise +// get one monotonic factory per layer. +const ids = globalSingleton("@rivet-dev/workflow-world//ids", 1, () => ({ + ulid: monotonicFactory(), +})); +const ulid = () => ids.ulid(); export class RivetClientWorld { - readonly specVersion = SPEC_VERSION_CURRENT; + // The spec version stamped on every run this World creates: the sealed-log + // version by default, slot identity under `WORKFLOW_SEALED_LOG=0`. Read per + // World so one process can create Worlds in both modes. Event ids are + // allocated at the commit (see `insertEvent`), so the log never has holes + // and this World never writes a `noop`. + readonly specVersion = mintedSpecVersion(); readonly #client: Client; readonly #registry: RegistryWithReadiness | undefined; readonly #ownsRegistry: boolean; @@ -311,27 +345,8 @@ export class RivetClientWorld { }; steps = { - get: async ( - runId: string | undefined, - stepId: string, - params?: GetStepParams, - ) => { - const effectiveRunId = - runId ?? - (await resolveDerivedRunId(() => - this.#client.coordinator - .getOrCreate(["coordinator"]) - .getRunIdByCorrelation(stepId), - )); - if (!effectiveRunId) { - throw new WorkflowWorldError(`Step not found: ${stepId}`); - } - return runActor(this.#client, effectiveRunId).getStep( - effectiveRunId, - stepId, - params, - ); - }, + get: async (runId: string, stepId: string, params?: GetStepParams) => + runActor(this.#client, runId).getStep(runId, stepId, params), list: async (params: ListWorkflowRunStepsParams) => runActor(this.#client, params.runId).listSteps(params), }; @@ -411,7 +426,7 @@ export class RivetClientWorld { input: dataToStore.eventData.input, deploymentId: dataToStore.eventData.deploymentId, workflowName: dataToStore.eventData.workflowName, - specVersion: dataToStore.specVersion ?? SPEC_VERSION_CURRENT, + specVersion: dataToStore.specVersion ?? this.specVersion, ...(executionContext == null ? {} : { executionContext }), ...(dataToStore.eventData.attributes == null ? {} @@ -437,7 +452,7 @@ export class RivetClientWorld { result = await runActor(this.#client, actorRunId).appendEvent( actorRunId, dataToStore, - params, + actorEventParams(params), initialDispatch, { ...(reservationToConfirm == null @@ -484,13 +499,10 @@ export class RivetClientWorld { runActor(this.#client, runId).getEvent(runId, eventId, params), list: async (params: ListEventsParams) => runActor(this.#client, params.runId).listEvents(params), - listByCorrelationId: async (params: ListEventsByCorrelationIdParams) => { - const runId = await this.#client.coordinator - .getOrCreate(["coordinator"]) - .getRunIdByCorrelation(params.correlationId); - if (!runId) return { data: [], cursor: null, hasMore: false }; - return runActor(this.#client, runId).listEventsByCorrelationId(params); - }, + // A correlation id names a step, hook or wait within one run, so the + // lookup goes straight to that run's actor. + listByCorrelationId: async (params: ListEventsByCorrelationIdParams) => + runActor(this.#client, params.runId).listEventsByCorrelationId(params), }; hooks = { @@ -582,7 +594,7 @@ export class RivetClientWorld { createQueueHandler( queueNamePrefix: QueuePrefix, - handler: (message: unknown, meta: any) => Promise, + handler: (message: unknown, meta: any) => Promise, ) { return async (req: Request) => { const unauthorized = verifyWorkflowBearer(req); @@ -620,8 +632,10 @@ export class RivetClientWorld { queueName, messageId: parsedMessageId, }); - if (typeof result?.timeoutSeconds === "number") { - return Response.json({ timeoutSeconds: result.timeoutSeconds }); + const timeoutSeconds = (result as { timeoutSeconds?: unknown } | undefined) + ?.timeoutSeconds; + if (typeof timeoutSeconds === "number") { + return Response.json({ timeoutSeconds }); } return Response.json({ ok: true }); } catch (error) { diff --git a/integrations/workflow-world/tests/integration/workflow-events.test.ts b/integrations/workflow-world/tests/integration/workflow-events.test.ts index 454cef8bd5..960c93e5b9 100644 --- a/integrations/workflow-world/tests/integration/workflow-events.test.ts +++ b/integrations/workflow-world/tests/integration/workflow-events.test.ts @@ -1,7 +1,11 @@ import { randomUUID } from "node:crypto"; import { setupTest } from "rivetkit/test"; import { afterEach, describe, expect, test } from "vitest"; -import { SPEC_VERSION_CURRENT } from "@workflow/world"; +import { + FIRST_EVENT_SLOT, + SPEC_VERSION_CURRENT, + eventIdToSlot, +} from "@workflow/world"; import { registry } from "../../src/actors.ts"; const uid = () => randomUUID().slice(0, 8); @@ -112,12 +116,14 @@ describe("workflowRun event dedup + materialization", () => { } const first = await runActor(client, runId).listEventsByCorrelationId({ + runId, correlationId, pagination: { limit: 2 }, }); expect(first.data).toHaveLength(2); expect(first.hasMore).toBe(true); const second = await runActor(client, runId).listEventsByCorrelationId({ + runId, correlationId, pagination: { limit: 2, cursor: first.cursor ?? undefined }, }); @@ -219,12 +225,21 @@ describe("workflowRun event dedup + materialization", () => { .filter((event) => event.correlationId === stepId) .map((event) => event.eventType), ).toEqual(["step_created", "step_started"]); - const replay = await runActor(client, runId).appendEvent(runId, { + // A second lazy start lost the create-claim: it must not get the step, + // or it would run the body again. + await expect( + runActor(client, runId).appendEvent(runId, { eventType: "step_started", specVersion: SPEC_VERSION_CURRENT, correlationId: stepId, eventData: { stepName: "lazy", input: { value: 1 } }, - }); + }), + ).rejects.toThrow(/already created/); + const replay = await runActor(client, runId).appendEvent(runId, { + eventType: "step_started", + specVersion: SPEC_VERSION_CURRENT, + correlationId: stepId, + }); expect(replay.step?.status).toBe("running"); expect(replay.step?.attempt).toBe(1); @@ -323,4 +338,120 @@ describe("workflowRun event dedup + materialization", () => { }); expect(steps.data.filter((s) => s.stepId === stepId)).toHaveLength(1); }); + + test("event ids are dense slots from 1, even under concurrent appends", async (c) => { + const { client } = await setupTest(c, registry); + const runId = `wrun_${uid()}`; + await createRun(client, runId); + await Promise.all( + Array.from({ length: 12 }, (_, i) => + runActor(client, runId).appendEvent(runId, { + eventType: "step_created", + specVersion: SPEC_VERSION_CURRENT, + correlationId: `step-${i}-${uid()}`, + eventData: { stepName: "fanout", input: { i } }, + }), + ), + ); + const events = await runActor(client, runId).listEvents({ + runId, + pagination: { limit: 100 }, + }); + const slots = events.data.map((e) => eventIdToSlot(e.eventId)); + expect(slots).toEqual( + Array.from({ length: 13 }, (_, i) => FIRST_EVENT_SLOT + i), + ); + }); + + test("a write behind the log commits at the next slot and reports the skipped events", async (c) => { + const { client } = await setupTest(c, registry); + const runId = `wrun_${uid()}`; + await createRun(client, runId); + const stepIds = [`step-a-${uid()}`, `step-b-${uid()}`]; + for (const stepId of stepIds) { + await runActor(client, runId).appendEvent(runId, { + eventType: "step_created", + specVersion: SPEC_VERSION_CURRENT, + correlationId: stepId, + eventData: { stepName: "s", input: {} }, + }); + } + // The writer only saw run_created, so it expected slot 2. + const stale = await runActor(client, runId).appendEvent( + runId, + { + eventType: "wait_created", + specVersion: SPEC_VERSION_CURRENT, + correlationId: `wait-${uid()}`, + eventData: { resumeAt: new Date(Date.now() + 60_000) }, + }, + { eventCount: 1 }, + ); + expect(eventIdToSlot(stale.event?.eventId ?? "")).toBe(4); + expect(stale.events?.map((e) => e.correlationId)).toEqual(stepIds); + expect(stale.hasMore).toBe(false); + + // A writer that is current gets no report. + const current = await runActor(client, runId).appendEvent( + runId, + { + eventType: "step_created", + specVersion: SPEC_VERSION_CURRENT, + correlationId: `step-c-${uid()}`, + eventData: { stepName: "s", input: {} }, + }, + { eventCount: 4 }, + ); + expect(eventIdToSlot(current.event?.eventId ?? "")).toBe(5); + expect(current.events).toBeUndefined(); + }); + + test("a finished run accepts a running step's outcome but refuses new starts", async (c) => { + const { client } = await setupTest(c, registry); + const runId = `wrun_${uid()}`; + await createRun(client, runId); + const running = `step-running-${uid()}`; + const pending = `step-pending-${uid()}`; + for (const stepId of [running, pending]) { + await runActor(client, runId).appendEvent(runId, { + eventType: "step_created", + specVersion: SPEC_VERSION_CURRENT, + correlationId: stepId, + eventData: { stepName: "s", input: {} }, + }); + } + await runActor(client, runId).appendEvent(runId, { + eventType: "step_started", + specVersion: SPEC_VERSION_CURRENT, + correlationId: running, + }); + await runActor(client, runId).appendEvent(runId, { + eventType: "run_cancelled", + specVersion: SPEC_VERSION_CURRENT, + }); + + // Redelivered start of the step that was already running. + await expect( + runActor(client, runId).appendEvent(runId, { + eventType: "step_started", + specVersion: SPEC_VERSION_CURRENT, + correlationId: running, + }), + ).rejects.toThrow(/terminal state/); + await expect( + runActor(client, runId).appendEvent(runId, { + eventType: "step_started", + specVersion: SPEC_VERSION_CURRENT, + correlationId: pending, + }), + ).rejects.toThrow(/terminal state/); + + const completed = await runActor(client, runId).appendEvent(runId, { + eventType: "step_completed", + specVersion: SPEC_VERSION_CURRENT, + correlationId: running, + eventData: { result: { ok: true } }, + }); + expect(completed.step?.status).toBe("completed"); + }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4eae8e3a96..242359b6d6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -278,13 +278,13 @@ importers: dependencies: '@ai-sdk/openai': specifier: ^0.0.66 - version: 0.0.66(zod@4.3.6) + version: 0.0.66(zod@4.5.4) '@rivetkit/react': specifier: workspace:* version: link:../../rivetkit-typescript/packages/react ai: specifier: ^4.0.38 - version: 4.3.19(react@19.1.0)(zod@4.3.6) + version: 4.3.19(react@19.1.0)(zod@4.5.4) react: specifier: 19.1.0 version: 19.1.0 @@ -2505,20 +2505,20 @@ importers: version: 4.12.33 nitro: specifier: 3.0.260610-beta - version: 3.0.260610-beta(@vercel/functions@3.7.6(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0))(better-sqlite3@12.8.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.8.0)(bun-types@1.3.11)(kysely@0.29.5)(pg@8.17.2)(postgres@3.4.9)(sql.js@1.14.2))(giget@3.3.1)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.6)(miniflare@4.20260611.0)(rollup@4.62.3)(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0))(wrangler@4.100.0)(xml2js@0.6.2) + version: 3.0.260610-beta(@vercel/functions@3.10.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0))(better-sqlite3@12.8.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.8.0)(bun-types@1.3.11)(kysely@0.29.5)(pg@8.17.2)(postgres@3.4.9)(sql.js@1.14.2))(giget@3.3.1)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.6)(miniflare@4.20260611.0)(rollup@4.62.3)(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0))(wrangler@4.100.0)(xml2js@0.6.2) rollup: specifier: ^4.62.2 version: 4.62.3 workflow: - specifier: 5.0.0-beta.35 - version: 5.0.0-beta.35(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.1)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(magicast@0.5.5)(next@16.1.1(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2))(react@19.1.0)(typescript@5.9.3)(ws@8.22.0) + specifier: 5.2.2 + version: 5.2.2(@aws-sdk/credential-provider-web-identity@3.972.49)(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.1)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(magicast@0.5.5)(next@16.1.1(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2))(react@19.1.0)(typescript@5.9.3)(ws@8.22.0) devDependencies: '@types/node': specifier: ^24.0.0 version: 24.7.1 '@workflow/vitest': - specifier: 5.0.0-beta.35 - version: 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.7.1)(msw@2.14.6(@types/node@24.7.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0)))(ws@8.22.0) + specifier: 5.0.5 + version: 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.7.1)(msw@2.14.6(@types/node@24.7.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0)))(ws@8.22.0) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -3304,11 +3304,14 @@ importers: integrations/workflow-world: dependencies: '@workflow/errors': - specifier: 5.0.0-beta.11 - version: 5.0.0-beta.11 + specifier: 5.0.4 + version: 5.0.4 + '@workflow/utils': + specifier: 5.0.2 + version: 5.0.2 '@workflow/world': - specifier: 5.0.0-beta.21 - version: 5.0.0-beta.21 + specifier: 5.0.4 + version: 5.0.4 cbor-x: specifier: ^1.6.0 version: 1.6.4 @@ -3332,8 +3335,8 @@ importers: specifier: ^24.0.0 version: 24.7.1 '@workflow/world-testing': - specifier: 5.0.0-beta.35 - version: 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(react@19.1.0)(typescript@5.9.3)(vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.7.1)(msw@2.14.6(@types/node@24.7.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0)))(ws@8.22.0) + specifier: 5.0.5 + version: 5.0.5(@aws-sdk/credential-provider-web-identity@3.972.78)(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(react@19.1.0)(typescript@5.9.3)(vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.7.1)(msw@2.14.6(@types/node@24.7.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0)))(ws@8.22.0) tsx: specifier: ^4.20.0 version: 4.23.1 @@ -4154,13 +4157,6 @@ packages: resolution: {integrity: sha512-A/E6n2W42ruU+sfWk+mMUOyVXbsSgGrY3MJ9/0Az5qUdG67y8I6HYzzoAa+e/lzxxl1uCYmEL6BTMi9ZiZnplQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.977.4': - resolution: {integrity: sha512-CEkcQlMOQJCvul60U7wdAOACjtdgFWDsfJI+6wUOGdhGNV2lGbuJpi/R50QLpFG3Tp+sQxa/RmzC3X7KHbhuTA==} - engines: {node: '>=20.0.0'} - deprecated: |- - Deprecated due to Document number parsing bug in JSON, see - https://github.com/aws/aws-sdk-js-v3/issues/8246. Newer version available. - '@aws-sdk/core@3.978.1': resolution: {integrity: sha512-LbY9aGsEiznDWmUc30Nwv3aIX/+dbwTx8KfS0yOC3NPYMO+O91e6jkT1azf34FwjOndq8/Q+RcVVZz5xnerwdg==} engines: {node: '>=20.0.0'} @@ -4245,10 +4241,6 @@ packages: resolution: {integrity: sha512-bhESdru8u8KosziH8jcVta/NM/dNreeRz2+2aU86si5bfBYOiJ6IiqD+9U4URUcU5WJO3Yw+jO3GLDIHlscXMQ==} engines: {node: '>= 14.0.0'} - '@aws-sdk/nested-clients@3.997.39': - resolution: {integrity: sha512-wU5NPnj62Sb7A8xn/Zb+xThe05P3otNtDl37iOIi5DDMeCesNeCckaG+eXWGUs12Z9R34I8CD05TaTe6SIa61g==} - engines: {node: '>=20.0.0'} - '@aws-sdk/nested-clients@3.997.46': resolution: {integrity: sha512-oRxtBcka/JGHGs9l9p9IVajGoTP8vTPmoAzdHGy4Qcy9P5vPnDf6nhIeM/COQNY9k/OahImTRaLkHftoXvfcmQ==} engines: {node: '>=20.0.0'} @@ -4257,10 +4249,6 @@ packages: resolution: {integrity: sha512-1dq9ToC6e070QvnVhhbAs3bb5r6cQ10gTVc6cyRV5uvQe7P138TV2uG2i6+Yok4bAkVAcx5AqkTEBUvWEtBlsQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.996.43': - resolution: {integrity: sha512-lKekx8bLBXSv4O+cslk9Zfnw2XKSkWBs3uWL5QGhH2ZAQfNS7FE0vcSSN2vD/AhxX54ZTywWxR4STThoeOXlBA==} - engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.996.47': resolution: {integrity: sha512-Zk08macMvQTHzQJCLJVkOlviVoqwYMrpXv4lmLN7b7sAbiMoOK7Go0NYdR5UeF+MW8LIbRmwrNy9u/5VvX1U5g==} engines: {node: '>=20.0.0'} @@ -4281,10 +4269,6 @@ packages: resolution: {integrity: sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==} engines: {node: '>=20.0.0'} - '@aws-sdk/types@3.974.2': - resolution: {integrity: sha512-3W6IUtSxFbH6X7Wb7DzGCV5QiFQsd0g8bOfntpmDxQlzBoKWUMBu/JPQR0DwkE+Hpnxd6db1tXbOwdeHddG6cA==} - engines: {node: '>=20.0.0'} - '@aws-sdk/types@3.974.6': resolution: {integrity: sha512-v/clNZzZnDxGyvpHMOGpJKVXFAExJzUNAAjaWGdcx8QAcXLGwTaOkw33p5SHAi0YAioK32xB3hWwOekRVfmfKg==} engines: {node: '>=20.0.0'} @@ -4313,10 +4297,6 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.972.37': - resolution: {integrity: sha512-zKq4HQum8JwDyEuyfuI4bbiAcU0KxP6qy+9PR/IsR92IyE/DaBAikzAS50tjxip4bqIIANpCcG+Yyj6CVhXupg==} - engines: {node: '>=20.0.0'} - '@aws-sdk/xml-builder@3.972.41': resolution: {integrity: sha512-ctjVSyCMegrWfXlx6VqzSBFI6UqmQ5ZlnfMhdLIiWmhoH8UAQxSCP5N3OpG7X3k4LnS7ou74C4mt20+bfTW2aQ==} engines: {node: '>=20.0.0'} @@ -9766,10 +9746,6 @@ packages: resolution: {integrity: sha512-J+2TT9D6oGsUVXVEMvz8h2EmdVnkBiy2auCie4aSJMvKlzUtO5hqjEzXhoCUkIMo7gAYjbQcN0g/MMSXEhDs1Q==} engines: {node: '>=18.0.0'} - '@smithy/core@3.31.1': - resolution: {integrity: sha512-CyogUINxvi7C7LDsh8Syo6hVJOT9ckz4rG8dRZfTJ8r91HkMY59PnNooaj7WcHyxEkxPfBAmbgztZU+xTo76lg==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.35.0': resolution: {integrity: sha512-zRMhfkByhT2snNdr1si24vJitU6Cr9ix2MikUfWmkAgp4jrNP0GcKSP5YvwQ+TlI8AZXER5QOGJn3JsVtSD9/A==} engines: {node: '>=18.0.0'} @@ -9802,10 +9778,6 @@ packages: resolution: {integrity: sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.6.13': - resolution: {integrity: sha512-4fW86pEUOMbrD5nkbyl/tTvPHHWJFbuB2odl6ps9lWfHoXf9HWh3Q/Smh59qH1g7+c/BSZghX6bbUk4gsiMs8A==} - engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.8.0': resolution: {integrity: sha512-ycSJu3tFAQ4v04CBB0agqFMVsSQ1iG3yw+SpgxRqKfaURpQD4CZ8Wn0zPMmSnOuTpTh65Vz+EA0rMrw089wvkA==} engines: {node: '>=18.0.0'} @@ -9886,10 +9858,6 @@ packages: resolution: {integrity: sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.6.12': - resolution: {integrity: sha512-I6KLtq3H0qqSuV9vLglfi8puHqzygzWHOnI4z/Rdoo+q50vvo18vBRdPAvvEtcaKROz7Zn6qnPa14kRfPH6PcQ==} - engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.7.4': resolution: {integrity: sha512-tHy0K0VtqNd5Y7Y41h0a0Lhh0L1GzC08dTWg0F7vRJWFtTENg7IZikf3wQkanYIRdb7ngoIPMTmqgUi401fEeQ==} engines: {node: '>=18.0.0'} @@ -9902,10 +9870,6 @@ packages: resolution: {integrity: sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==} engines: {node: '>=18.0.0'} - '@smithy/types@4.16.1': - resolution: {integrity: sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==} - engines: {node: '>=18.0.0'} - '@smithy/types@4.19.0': resolution: {integrity: sha512-r7jh49VJxGerfAcTQA6gXcKc+98zOp/tqRwzYjgOE+iSQsP6cEU1hq2QzbuipmP68QtYdY9wKEhiCQZIzHgZ4Q==} engines: {node: '>=18.0.0'} @@ -10065,6 +10029,10 @@ packages: peerDependencies: react: 19.1.0 + '@sveltejs/load-config@0.2.3': + resolution: {integrity: sha512-VT3qmUb8pRV2QrZjd8iAmtg8lf4W0TIjZbvXtz5MKei/q96teWZgGJyyidJzOjzZzvdq616eSRVeMYIQChUTAQ==} + engines: {node: '>= 18.0.0'} + '@swc/cli@0.8.1': resolution: {integrity: sha512-L+ACCGHCiS0VqHVep/INLVnvRvJ2XooQFLZq4L8snhxw1jsqz+XRcY313UsyPVturPPE1shW3jic7rt3qEQTSQ==} engines: {node: '>= 20.19.0'} @@ -10958,16 +10926,23 @@ packages: '@vercel/cli-config@0.2.1': resolution: {integrity: sha512-RhfyXmRLHdbnry8RJqHDc+5rGxMZ0bu+fpysZjtv3bE+BubpuwxTancHOKiH5zKQREsdwFVr3mOI2kOvxlOyxA==} + '@vercel/cli-config@0.3.1': + resolution: {integrity: sha512-sISbygqlFXYb8qfPu/+2Cf/A8IjrlAuZePdag3EDQr2PRA455s7UZtl9Ro674CWsB/saBRmz3jEkw0YsQs8OoQ==} + '@vercel/cli-exec@1.0.0': resolution: {integrity: sha512-kQF8LGie/Hbdq9/psJxLE7owRTcqMQMhgybU04gCeR7cbQAr5t8OrjefDNColJv1QSSucFt4pLwRiARVmlOnug==} engines: {node: '>= 18'} + '@vercel/cli-exec@1.0.1': + resolution: {integrity: sha512-g9XerViJ/paZujufXYcu5XYI2vU2rtB4sgdpjUHde5RnOkdmpu0ngH46LCFGHoPXO/C+qDPSczIHIRN+8Q2YKQ==} + engines: {node: '>= 18'} + '@vercel/detect-agent@1.2.3': resolution: {integrity: sha512-VYNCgUc0nOmC4WJmWw9GkrKdfr8Zl4/rxhC5SvgacBgxiW9W/9NRttUoHHXV8xdII3MaRgkZZVX8Ikzc/Jmjag==} engines: {node: '>=14'} - '@vercel/functions@3.7.6': - resolution: {integrity: sha512-QKlSfrgvo4pGEnzHw8Dha9GRTb5hhLBbImKi4rL4CmxClaVs+36hxgjW0MOqez57wWShstpKOWZY/mU8KuYoUQ==} + '@vercel/functions@3.10.1': + resolution: {integrity: sha512-Ca7peSyID6CW5a9Pyu6rDK2AC3n9hyJD0aTBuO74x9eL50Z+rgXIR0H0umI6j0gb9NMG7jvrx7DUhMGuuOFxsg==} engines: {node: '>= 20'} peerDependencies: '@aws-sdk/credential-provider-web-identity': '*' @@ -10990,8 +10965,12 @@ packages: resolution: {integrity: sha512-ufdalm2MWOYksyj8KVpWjoOFPJO6zoYpuyvIggIQ2bB0CFCjTCiTkGXHqAKwG77GVRjOaN3/8S5ITlZpXWmqOw==} engines: {node: '>= 20'} - '@vercel/queue@0.4.0': - resolution: {integrity: sha512-2HctPb2+6Pj1DMxbPohMq574rE9OP3fUAGhwV0R4Qv1FHQIR+qti92G8FGjFMJGUSFxVlWdNwVfgHU2hZlM6Dw==} + '@vercel/oidc@4.0.1': + resolution: {integrity: sha512-l//xMmDTj2WR6EMtfA2BEF2oR7ViKCD1SCxqFKCn1/8wOZBxgxhxkegSGi90ICTc1rB50ZbKuPIslc8aJxAqew==} + engines: {node: '>= 20'} + + '@vercel/queue@0.8.0': + resolution: {integrity: sha512-Rwaoq8DbSN2/qVPMdHzBdBXqpoD2h2s7+gOSaE3Gff9XI1NjNh281uMesP30k1kbsnjgeaibLTSiuYDlNPlw+g==} engines: {node: '>=20.0.0'} peerDependencies: '@opentelemetry/api': ^1.0.0 @@ -11318,29 +11297,29 @@ packages: '@webgpu/types@0.1.69': resolution: {integrity: sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==} - '@workflow/astro@5.0.0-beta.35': - resolution: {integrity: sha512-9MhMDEWjUhiIz1mCyqVWTfB5Z+2qdCxJCz4RUB4GLcG2tACWAn8Er3AR4in8f3ujwyeRGhoKEa/TS3C8JHag+g==} + '@workflow/astro@5.0.5': + resolution: {integrity: sha512-OecvSEopbsQEznrKv3f0LPts6tmYiQYFg7wxhVicjshN9qPp9yXey71JCCuQ0LIeupDD7Oj2aQtZQ98sBl4dog==} - '@workflow/builders@5.0.0-beta.35': - resolution: {integrity: sha512-2sP+pt54hI/okqQJbUvhYVyWpi/TeiviALGBHlryKm2bjAPmLSv9zTBXPl4TDKD8KmfBeVt7l2Gtn0J3wYzKTg==} + '@workflow/builders@5.0.5': + resolution: {integrity: sha512-/yq7Z/k/ir20wMMJpV7behktJ/CBvthzxJ4MhBjytLnYxcVtZBlQvKuLya4UT7WxeKOupEB5u0uM7IUPjE+c3A==} - '@workflow/cli@5.0.0-beta.35': - resolution: {integrity: sha512-sD8tYtuKgOOvduVMqQeCkiPwyvR3Z2pJVrTOewEL+RfcvZ6NU5K4tVT9MEC0M8eOz9GEjcEX3x5YBH7Csr6Lcw==} + '@workflow/cli@5.0.5': + resolution: {integrity: sha512-fzc+n0aQ4RL6zkBPzO7UQOGwX3KF3/8EppqW3DJS0L0oc3W81cvh7AEV1fZNwy4lfgqe3n5TBxnhdAcNJAZqRg==} hasBin: true - '@workflow/core@5.0.0-beta.35': - resolution: {integrity: sha512-LD7g1377MgWrFQxp+upYc+h1hjmqe0zs+2rJaxxBTYFEwxqP8BD/n6+5NMpy5xmfLjR+BGCg7syWKoLM1Nq84w==} + '@workflow/core@5.2.2': + resolution: {integrity: sha512-wKcFwWa+3i+syom+eKpYwzfhrtAYJu5KgdO06sDjT7rZErSQZWf3CcjF/qv+wGtyEfvkZAJ1cWep2HkldLUrzA==} peerDependencies: '@opentelemetry/api': '1' peerDependenciesMeta: '@opentelemetry/api': optional: true - '@workflow/errors@5.0.0-beta.11': - resolution: {integrity: sha512-m8SFeLrckiWnefE5FmmCcrPiLsZM+qWM/f1MUmIoUbu2DUp280Cc5zV4yW22wyd2//CN4MJBklArwSKcFS6JxQ==} + '@workflow/errors@5.0.4': + resolution: {integrity: sha512-frC0qRYqPdzSJbN3eq29KPsvRITceKT8svIxkcVAPrR9nyyLpvoSpq4dBiBg5tNul91WJyPTclBXTZyl3XPpzA==} - '@workflow/nest@5.0.0-beta.35': - resolution: {integrity: sha512-Ie4bdRTvTg+5lo8CRgDTaE2emqXHqvRpjqQmABPO4BuI9Yp28gzXJpM3AsYmS5jL1jRvXJOp9ATDM/48mN+yJw==} + '@workflow/nest@5.1.3': + resolution: {integrity: sha512-pudiuyLVV+pPprlwbXOOMyNd4nQBp+p8UyBUldhrbGOAPnQQLkssnhfgeu/+DAaXaZBegunj1lyWfEsCn2/c+w==} hasBin: true peerDependencies: '@nestjs/common': '>=10.0.0' @@ -11348,50 +11327,50 @@ packages: '@swc/cli': '>=0.4.0' '@swc/core': '>=1.5.0' - '@workflow/next@5.0.0-beta.35': - resolution: {integrity: sha512-Esz+XLg8661wFlVjmkDZIZfg9QxqFtStOu+Uc+w31GOvy5Np3FcA+HHdRGRjZaH2JjJeqsDBR33t07dN3/pqiw==} + '@workflow/next@5.0.5': + resolution: {integrity: sha512-dBpnc3ZKkuReiFtzE3/W2Mw7MRXMm7/mBUgMGlS0dyWxbRjL7GJLyYuhHFxqF07cypu1qZbjhJUHODVR6R4I5Q==} peerDependencies: next: '>13' peerDependenciesMeta: next: optional: true - '@workflow/nitro@5.0.0-beta.35': - resolution: {integrity: sha512-Pk6MbVhHx7QJ93OlqVnQZ9Z7+mii0yZuiPIZByHvfGzNSMnEcTAwspm47RMxtoXd7A+MLBfLurypTWk/ISDFxA==} + '@workflow/nitro@5.0.5': + resolution: {integrity: sha512-FIaY32MtSWZmhwkQnGLXCOIGzWKt3k3I+pf5PM3SpPske/CbMoqxyj+yDkUTafI08ea/8rNa4gExvZQ3gymZyw==} - '@workflow/nuxt@5.0.0-beta.35': - resolution: {integrity: sha512-xMbSZxMYeQ6Uo/pdye4cHg1N2jIioz1Td1zLoSpx7nOFB8zQl61RS5lUNrT/kuIjCfhe1Ru7MmVgOUMW2M+r8A==} + '@workflow/nuxt@5.0.5': + resolution: {integrity: sha512-q9/PjJZmZW2sKVod12ZR3JWne8dPRNdCtTGt67NAzda232Tte8Xmhf3+5Krqy647WjcnubVEj70tfF9tO5gpJw==} - '@workflow/rollup@5.0.0-beta.35': - resolution: {integrity: sha512-1O34xEj91N8gYK5jwtZjaOeEQsiVY7LvXdrRF+4YC+0lF4Piua5K++C4AY2ZnUE/eLnGiXJE7wivgO2mw3DS/A==} + '@workflow/rollup@5.0.5': + resolution: {integrity: sha512-0khDeWl1DcSXno6FGyDlqk1ipQ9v6W8JDiSsmIlygnZHUMAaPbI9F5aBcF1mGyPxOuPL7R5Wsaop3qDsf7ODcA==} - '@workflow/serde@5.0.0-beta.2': - resolution: {integrity: sha512-INB+FcEKQkkFZa+s53sEMTNRFiBa2g9vzjsNuEDagvWxtI0t/cnCyoc57i7kS7nj+3/vGeRjO4Yn5ccbT0hyBQ==} + '@workflow/serde@5.0.0': + resolution: {integrity: sha512-78smVK/ejx/MIrjOwqAH14jGZkGBIO3u3B6u6WhWOyfjBJWl21xyHdsh0gFsncD96HlavCTbsWg/pN7MLSnrbw==} - '@workflow/sveltekit@5.0.0-beta.35': - resolution: {integrity: sha512-QdPE1Ngmd/5NbWoNlp07IPITAfy07030DVXYmTF0mpFjyDgeh595jSEg/F1NORdNyS4iC3jTKGMJIcTBaY4QmA==} + '@workflow/sveltekit@5.0.5': + resolution: {integrity: sha512-or/GvFo005MeNVgJS8S3iccH7qr6hupelNvje0YiFoSW1Mb7wGbKfWQV08OtQZb1bZD5yk5kTeVmuuYfN/uopg==} - '@workflow/swc-plugin@5.0.0-beta.5': - resolution: {integrity: sha512-Xk2UQePkuxTrgqU0EWZPRWM9Ttj9bcMAY+x700yg/0TQnD3MSxjY6/yC3e8wGr2dfzXik5zuH+Ixrog1CdBqeg==} + '@workflow/swc-plugin@5.0.1': + resolution: {integrity: sha512-uO6u9nWJKGrD3x9F9GhkwYwIIHJXrBO5xXiAePizLuWXoBSt7NlLKTmoOBgPQcN58j5m3pyWh+ZEeqK5x1g3Sg==} peerDependencies: '@swc/core': 1.15.3 - '@workflow/typescript-plugin@5.0.0-beta.5': - resolution: {integrity: sha512-IcP+tMktxXT02H60+Or+0rSKcydhg3CMM5CWTzpnnXlhW3rqBniA/FheWYvtR7HTM7x+Xht1W1eFm8PsaGQpxg==} + '@workflow/typescript-plugin@5.0.0': + resolution: {integrity: sha512-OklEiKRYbehA2q8wNG9CZE3iwBP93meLbAWbd8n8QTAByEc09iliJ5Tjsvw4s8r1GssrSLeokb+VKUbHiykiUA==} peerDependencies: typescript: '>=5.0.0' peerDependenciesMeta: typescript: optional: true - '@workflow/utils@5.0.0-beta.6': - resolution: {integrity: sha512-YMZqvtRMzlmWkgshURp4ilvcY8VMrNxwXxDEXQ/gkppKWhJ1xdJBpq3plZLf8LWS7JHXd32Wqll/UvQeARu93Q==} + '@workflow/utils@5.0.2': + resolution: {integrity: sha512-TP5yOOJ82wuSB0io7d476ZBQuPEhR+VQ1k3zqOpaY0UXYHo+zUCeOIdQtIAeNsJwKkg+8f1bQPZrA8ZoMDA8Cw==} - '@workflow/vite@5.0.0-beta.35': - resolution: {integrity: sha512-8tsas7S+OfIYJTEn5XJcSb1Ki+m19vuCwDrx7hFJ1VW53DshYEbCez7OQRanV+9Eu7dVOjX29XZIaQtk0dkRpQ==} + '@workflow/vite@5.0.5': + resolution: {integrity: sha512-g2p3WNymn9jLhuep3LDcdsM/Askx3McnEhppWTu0DAdotN2JOyJQbwLOQ3pYoLE+Di7Ot4iXaH9RjbfhQ/Rf2g==} - '@workflow/vitest@5.0.0-beta.35': - resolution: {integrity: sha512-6eGOIoTRaert6smjIjtJSyo799r4oEuoXdwE5VyK+y9QI458Sq8k1yF0sJaD/pZdRkyzSQRiVySLPflcsr3xQA==} + '@workflow/vitest@5.0.5': + resolution: {integrity: sha512-EjHO4NP3X68fVFcWKIQxW7HnABPjYV6yhS256itNLdN9qvaOOgRuUCx3rvvLSTj9vzsIc/31xmas8lO/Bpcjyw==} peerDependencies: vite: '>=6.0.0' vitest: '>=3.1.0' @@ -11399,32 +11378,32 @@ packages: vite: optional: true - '@workflow/web@5.0.0-beta.35': - resolution: {integrity: sha512-mJ9xmxCYtbXaKNX9mcV8fo2JAxwEhWpnYJpcQcfuqrOGpm2TlfdJOmTjQBoqvU0xFAnxkgWpgQBUJM1QkzBOrg==} + '@workflow/web@5.0.5': + resolution: {integrity: sha512-M5ZA81x4pW/KvE/CHPv2H/msD+ZAJyHARH3iw6JBRFHUiDPlOavHG4DrBtuVvGqb6HeeuNd6kobzigolzCxBkA==} - '@workflow/world-local@5.0.0-beta.29': - resolution: {integrity: sha512-TWJraKv6ObjutNHY0qmwquOWwYBzHAOlrpp1PPdhbM21U6VgvPCgmZ/D2+BjLsNIMLuofUY2j0L7KyQcG1WnXw==} + '@workflow/world-local@5.1.1': + resolution: {integrity: sha512-y1ofGZC6xi92sD1+wwfq/uBV4+05cSlPp7WOBhdXXzPGb3/4wdwnlzC5ANh6xdcZz6rFsdd0j4Vd+WcQQDTNOg==} peerDependencies: '@opentelemetry/api': '1' peerDependenciesMeta: '@opentelemetry/api': optional: true - '@workflow/world-testing@5.0.0-beta.35': - resolution: {integrity: sha512-GrFZKP5DCB33QqP9wC0Z3Y7Gq6n5Qb0MIdJ/qIu5Htax7zyNMZ8V2RO8VdxSIqxFaf2o+l3Na9uGtR9954PH1Q==} + '@workflow/world-testing@5.0.5': + resolution: {integrity: sha512-yGasAFQskD9JjGUUXXCBTEKjTYkSCTxJi+B1nA9GoC92kAFHX9bl4HRHOobp1FSGifUNj9ZyrlDU8a+ehHmP4w==} peerDependencies: vitest: ^4.1.10 - '@workflow/world-vercel@5.0.0-beta.31': - resolution: {integrity: sha512-1S/381R5QWVGfxVAcAaWwmmc57uqGIhlre4jiRRhSlQJHxakuX4EtewVUs1ZhyBRBJBTR4oJY4HvQjQh2Ru2sA==} + '@workflow/world-vercel@5.2.2': + resolution: {integrity: sha512-lIvw+bnPI7F1HS4YKZ4JTjPl01m51SRCFrA8u95vdknKwS1e3UUdUSjT4/bTrD3Ix1p+G9HCA/vkMSfmWYU4CQ==} peerDependencies: '@opentelemetry/api': '1' peerDependenciesMeta: '@opentelemetry/api': optional: true - '@workflow/world@5.0.0-beta.21': - resolution: {integrity: sha512-XAOtSr7CGL/81EqEvUuDSWzil12sRJwQfU7ymVZlui33BKK8vbtgqzuY5vI6/OWt6NiAqPMeJVeahD9oMkii/A==} + '@workflow/world@5.0.4': + resolution: {integrity: sha512-Z6vMtfl03vBShRNj83yGdKvF8F7WieL6hNA0im6f/EJlVPVNAHYCtiqTMUS6BVYNOYVpTXtzsArbXAw28S5qDg==} '@xhmikosr/archive-type@8.1.0': resolution: {integrity: sha512-EXOjEbnZFE5c/nFMf4FOrEURVanzHpnkPYmnmr78u02/8hAhE0FMq8p9TK1IM0/bFr5VcyBUY0gfLm8f7dKy+Q==} @@ -13027,8 +13006,9 @@ packages: detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - devalue@5.8.1: - resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + devalue@6.0.3: + resolution: {integrity: sha512-3woMEITftG1wKeO/4d/QXH1DVKctTSZg3jNGPpjp9hNr5Hos8MCFF5McTML5ZtgKDObm2R591B0spRp2IVernA==} + engines: {node: '>=18'} devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -17106,6 +17086,9 @@ packages: resolution: {integrity: sha512-So0Sqw869y/S2oE3Nuc0uT3Dhqgvsj8FSrwBdsuTosVsG8ME5/OcudU1GxsrIFdFABgy17GHnTVO9TYV/bLQcA==} engines: {node: '>=16.0.0'} + quickjs-wasi@3.4.0: + resolution: {integrity: sha512-ttKaBD8u0RXhz2UqDU8wOEruhxADt0WWHfMfnNR8aO0UyhlifFS6NvPYFbyhASjqIp2/1dpneoP1IzBUxION1w==} + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -17959,6 +17942,11 @@ packages: engines: {node: '>=20.16.0'} hasBin: true + srvx@0.12.8: + resolution: {integrity: sha512-7k9HoDhluTlD7UJ+F+OopZoPZXB2J8f/5nW2VMLaB8KsSlZlRQxyyoX0hWEQCxB+F+3ZvB5QX3LqB6xSBRfxQQ==} + engines: {node: '>=20.16.0'} + hasBin: true + stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -19577,8 +19565,8 @@ packages: engines: {node: '>=16'} hasBin: true - workflow@5.0.0-beta.35: - resolution: {integrity: sha512-TkD6ixUUk92CjeABWuy1KXa41W7JeAVXbhPnWKHsY4xjjAe4SEm+o2a3Baf4/di0uWYgdrJKgp2cMs9H5GKRkQ==} + workflow@5.2.2: + resolution: {integrity: sha512-dS0gjwH1uSiEgnTKwV2uyeE6Xbomep5X2wJAeR724vJs2t2tMDmH4FFlbZgXNGOAI3CmyoHGDL31nuo4wZe7pQ==} hasBin: true peerDependencies: '@opentelemetry/api': '1' @@ -19858,6 +19846,9 @@ packages: zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.5.4: + resolution: {integrity: sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==} + zustand@4.5.7: resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} engines: {node: '>=12.7.0'} @@ -19924,11 +19915,11 @@ snapshots: '@ai-sdk/provider-utils': 1.0.20(zod@3.25.76) zod: 3.25.76 - '@ai-sdk/openai@0.0.66(zod@4.3.6)': + '@ai-sdk/openai@0.0.66(zod@4.5.4)': dependencies: '@ai-sdk/provider': 0.0.24 - '@ai-sdk/provider-utils': 1.0.20(zod@4.3.6) - zod: 4.3.6 + '@ai-sdk/provider-utils': 1.0.20(zod@4.5.4) + zod: 4.5.4 '@ai-sdk/openai@3.0.30(zod@4.3.6)': dependencies: @@ -19945,14 +19936,14 @@ snapshots: optionalDependencies: zod: 3.25.76 - '@ai-sdk/provider-utils@1.0.20(zod@4.3.6)': + '@ai-sdk/provider-utils@1.0.20(zod@4.5.4)': dependencies: '@ai-sdk/provider': 0.0.24 eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 optionalDependencies: - zod: 4.3.6 + zod: 4.5.4 '@ai-sdk/provider-utils@2.2.8(zod@3.25.76)': dependencies: @@ -19968,12 +19959,12 @@ snapshots: secure-json-parse: 2.7.0 zod: 4.1.13 - '@ai-sdk/provider-utils@2.2.8(zod@4.3.6)': + '@ai-sdk/provider-utils@2.2.8(zod@4.5.4)': dependencies: '@ai-sdk/provider': 1.1.3 nanoid: 3.3.11 secure-json-parse: 2.7.0 - zod: 4.3.6 + zod: 4.5.4 '@ai-sdk/provider-utils@4.0.15(zod@4.3.6)': dependencies: @@ -20021,15 +20012,15 @@ snapshots: optionalDependencies: zod: 4.1.13 - '@ai-sdk/react@1.2.12(react@19.1.0)(zod@4.3.6)': + '@ai-sdk/react@1.2.12(react@19.1.0)(zod@4.5.4)': dependencies: - '@ai-sdk/provider-utils': 2.2.8(zod@4.3.6) - '@ai-sdk/ui-utils': 1.2.11(zod@4.3.6) + '@ai-sdk/provider-utils': 2.2.8(zod@4.5.4) + '@ai-sdk/ui-utils': 1.2.11(zod@4.5.4) react: 19.1.0 swr: 2.3.4(react@19.1.0) throttleit: 2.1.0 optionalDependencies: - zod: 4.3.6 + zod: 4.5.4 '@ai-sdk/ui-utils@1.2.11(zod@3.25.76)': dependencies: @@ -20045,12 +20036,12 @@ snapshots: zod: 4.1.13 zod-to-json-schema: 3.25.1(zod@4.1.13) - '@ai-sdk/ui-utils@1.2.11(zod@4.3.6)': + '@ai-sdk/ui-utils@1.2.11(zod@4.5.4)': dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@4.3.6) - zod: 4.3.6 - zod-to-json-schema: 3.25.1(zod@4.3.6) + '@ai-sdk/provider-utils': 2.2.8(zod@4.5.4) + zod: 4.5.4 + zod-to-json-schema: 3.25.1(zod@4.5.4) '@alloc/quick-lru@5.2.0': {} @@ -20222,17 +20213,6 @@ snapshots: '@smithy/util-utf8': 4.2.2 tslib: 2.8.1 - '@aws-sdk/core@3.977.4': - dependencies: - '@aws-sdk/types': 3.974.2 - '@aws-sdk/xml-builder': 3.972.37 - '@aws/lambda-invoke-store': 0.3.0 - '@smithy/core': 3.31.1 - '@smithy/signature-v4': 5.6.12 - '@smithy/types': 4.16.1 - bowser: 2.14.1 - tslib: 2.8.1 - '@aws-sdk/core@3.978.1': dependencies: '@aws-sdk/types': 3.974.6 @@ -20336,11 +20316,11 @@ snapshots: '@aws-sdk/credential-provider-web-identity@3.972.49': dependencies: - '@aws-sdk/core': 3.977.4 - '@aws-sdk/nested-clients': 3.997.39 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/types': 4.16.1 + '@aws-sdk/core': 3.978.1 + '@aws-sdk/nested-clients': 3.997.46 + '@aws-sdk/types': 3.974.6 + '@smithy/core': 3.35.0 + '@smithy/types': 4.19.0 tslib: 2.8.1 '@aws-sdk/credential-provider-web-identity@3.972.78': @@ -20437,17 +20417,6 @@ snapshots: '@smithy/types': 4.19.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.997.39': - dependencies: - '@aws-sdk/core': 3.977.4 - '@aws-sdk/signature-v4-multi-region': 3.996.43 - '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.1 - '@smithy/fetch-http-handler': 5.6.13 - '@smithy/node-http-handler': 4.12.1 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/nested-clients@3.997.46': dependencies: '@aws-sdk/core': 3.978.1 @@ -20467,13 +20436,6 @@ snapshots: '@smithy/types': 4.19.0 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.996.43': - dependencies: - '@aws-sdk/types': 3.974.6 - '@smithy/signature-v4': 5.7.4 - '@smithy/types': 4.19.0 - tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.996.47': dependencies: '@aws-sdk/types': 3.974.6 @@ -20514,11 +20476,6 @@ snapshots: '@smithy/types': 4.19.0 tslib: 2.8.1 - '@aws-sdk/types@3.974.2': - dependencies: - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@aws-sdk/types@3.974.6': dependencies: '@smithy/types': 4.19.0 @@ -20559,11 +20516,6 @@ snapshots: '@smithy/util-config-provider': 4.2.2 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.37': - dependencies: - '@smithy/types': 4.19.0 - tslib: 2.8.1 - '@aws-sdk/xml-builder@3.972.41': dependencies: '@smithy/types': 4.19.0 @@ -24301,7 +24253,7 @@ snapshots: destr: 2.0.5 errx: 0.1.2 exsolve: 1.1.1 - ignore: 7.0.5 + ignore: 7.0.8 jiti: 2.7.0 klona: 2.0.6 mlly: 1.8.2 @@ -26611,11 +26563,6 @@ snapshots: '@smithy/uuid': 1.1.2 tslib: 2.8.1 - '@smithy/core@3.31.1': - dependencies: - '@smithy/types': 4.16.1 - tslib: 2.8.1 - '@smithy/core@3.35.0': dependencies: '@smithy/types': 4.19.0 @@ -26665,12 +26612,6 @@ snapshots: '@smithy/util-base64': 4.3.2 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.6.13': - dependencies: - '@smithy/core': 3.35.0 - '@smithy/types': 4.19.0 - tslib: 2.8.1 - '@smithy/fetch-http-handler@5.8.0': dependencies: '@smithy/core': 3.35.0 @@ -26794,12 +26735,6 @@ snapshots: '@smithy/types': 4.19.0 tslib: 2.8.1 - '@smithy/signature-v4@5.6.12': - dependencies: - '@smithy/core': 3.35.0 - '@smithy/types': 4.19.0 - tslib: 2.8.1 - '@smithy/signature-v4@5.7.4': dependencies: '@smithy/core': 3.35.0 @@ -26820,10 +26755,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/types@4.16.1': - dependencies: - tslib: 2.8.1 - '@smithy/types@4.19.0': dependencies: tslib: 2.8.1 @@ -26970,6 +26901,8 @@ snapshots: transitivePeerDependencies: - typescript + '@sveltejs/load-config@0.2.3': {} + '@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) @@ -27885,19 +27818,35 @@ snapshots: xdg-app-paths: 5.5.1 zod: 4.1.11 + '@vercel/cli-config@0.3.1': + dependencies: + xdg-app-paths: 5.5.1 + zod: 4.1.11 + '@vercel/cli-exec@1.0.0': dependencies: execa: 5.1.1 + '@vercel/cli-exec@1.0.1': + dependencies: + execa: 5.1.1 + '@vercel/detect-agent@1.2.3': {} - '@vercel/functions@3.7.6(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0)': + '@vercel/functions@3.10.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0)': dependencies: - '@vercel/oidc': 3.8.1 + '@vercel/oidc': 4.0.1 optionalDependencies: '@aws-sdk/credential-provider-web-identity': 3.972.49 ws: 8.22.0 + '@vercel/functions@3.10.1(@aws-sdk/credential-provider-web-identity@3.972.78)(ws@8.22.0)': + dependencies: + '@vercel/oidc': 4.0.1 + optionalDependencies: + '@aws-sdk/credential-provider-web-identity': 3.972.78 + ws: 8.22.0 + '@vercel/oidc@3.1.0': {} '@vercel/oidc@3.2.0': {} @@ -27908,7 +27857,13 @@ snapshots: '@vercel/cli-exec': 1.0.0 jose: 5.10.0 - '@vercel/queue@0.4.0(@opentelemetry/api@1.9.1)': + '@vercel/oidc@4.0.1': + dependencies: + '@vercel/cli-config': 0.3.1 + '@vercel/cli-exec': 1.0.1 + jose: 5.10.0 + + '@vercel/queue@0.8.0(@opentelemetry/api@1.9.1)': dependencies: '@vercel/oidc': 3.8.1 minimatch: 10.2.6 @@ -28539,58 +28494,103 @@ snapshots: '@webgpu/types@0.1.69': {} - '@workflow/astro@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0)': + '@workflow/astro@5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/rollup': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/swc-plugin': 5.0.0-beta.5(@swc/core@1.15.3(@swc/helpers@0.5.17)) - '@workflow/vite': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/rollup': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/swc-plugin': 5.0.1(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/vite': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) exsolve: 1.1.1 pathe: 2.0.3 transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - supports-color + - utf-8-validate - ws - '@workflow/builders@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0)': + '@workflow/builders@5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/core': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(ws@8.22.0) - '@workflow/errors': 5.0.0-beta.11 - '@workflow/swc-plugin': 5.0.0-beta.5(@swc/core@1.15.3(@swc/helpers@0.5.17)) - '@workflow/utils': 5.0.0-beta.6 - '@workflow/world-local': 5.0.0-beta.29(@opentelemetry/api@1.9.1) - '@workflow/world-vercel': 5.0.0-beta.31(@opentelemetry/api@1.9.1) + '@workflow/core': 5.2.2(@opentelemetry/api@1.9.1)(ws@8.22.0) + '@workflow/errors': 5.0.4 + '@workflow/swc-plugin': 5.0.1(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/utils': 5.0.2 + acorn: 8.16.0 builtin-modules: 5.0.0 chalk: 5.6.2 enhanced-resolve: 5.19.0 - esbuild: 0.28.1 + esbuild: 0.28.2 find-up: 7.0.0 json5: 2.2.3 tinyglobby: 0.2.17 transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil + - supports-color + - utf-8-validate + - ws + + '@workflow/cli@5.0.5(@aws-sdk/credential-provider-web-identity@3.972.49)(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0)': + dependencies: + '@oclif/core': 4.11.4 + '@oclif/plugin-help': 6.2.37 + '@swc/core': 1.15.3(@swc/helpers@0.5.17) + '@vercel/cli-auth': 0.0.1 + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/core': 5.2.2(@opentelemetry/api@1.9.1)(ws@8.22.0) + '@workflow/errors': 5.0.4 + '@workflow/swc-plugin': 5.0.1(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/utils': 5.0.2 + '@workflow/web': 5.0.5(@opentelemetry/api@1.9.1)(react@19.1.0) + '@workflow/world': 5.0.4 + '@workflow/world-local': 5.1.1(@opentelemetry/api@1.9.1) + '@workflow/world-vercel': 5.2.2(@aws-sdk/credential-provider-web-identity@3.972.49)(@opentelemetry/api@1.9.1) + boxen: 8.0.1 + builtin-modules: 5.0.0 + chalk: 5.6.2 + chokidar: 4.0.3 + date-fns: 4.1.0 + dotenv: 17.4.2 + easy-table: 1.2.0 + enhanced-resolve: 5.19.0 + esbuild: 0.28.2 + find-up: 7.0.0 + mixpart: 0.0.4 + open: 10.2.0 + ora: 8.2.0 + terminal-link: 5.0.0 + tinyglobby: 0.2.17 + xdg-app-paths: 5.1.0 + zod: 4.5.4 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-web-identity' + - '@opentelemetry/api' + - '@swc/helpers' + - bufferutil + - react - supports-color + - utf-8-validate - ws - '@workflow/cli@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0)': + '@workflow/cli@5.0.5(@aws-sdk/credential-provider-web-identity@3.972.78)(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0)': dependencies: '@oclif/core': 4.11.4 '@oclif/plugin-help': 6.2.37 '@swc/core': 1.15.3(@swc/helpers@0.5.17) '@vercel/cli-auth': 0.0.1 - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/core': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(ws@8.22.0) - '@workflow/errors': 5.0.0-beta.11 - '@workflow/swc-plugin': 5.0.0-beta.5(@swc/core@1.15.3(@swc/helpers@0.5.17)) - '@workflow/utils': 5.0.0-beta.6 - '@workflow/web': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(react@19.1.0) - '@workflow/world': 5.0.0-beta.21 - '@workflow/world-local': 5.0.0-beta.29(@opentelemetry/api@1.9.1) - '@workflow/world-vercel': 5.0.0-beta.31(@opentelemetry/api@1.9.1) + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/core': 5.2.2(@opentelemetry/api@1.9.1)(ws@8.22.0) + '@workflow/errors': 5.0.4 + '@workflow/swc-plugin': 5.0.1(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/utils': 5.0.2 + '@workflow/web': 5.0.5(@opentelemetry/api@1.9.1)(react@19.1.0) + '@workflow/world': 5.0.4 + '@workflow/world-local': 5.1.1(@opentelemetry/api@1.9.1) + '@workflow/world-vercel': 5.2.2(@aws-sdk/credential-provider-web-identity@3.972.78)(@opentelemetry/api@1.9.1) boxen: 8.0.1 builtin-modules: 5.0.0 chalk: 5.6.2 @@ -28599,7 +28599,7 @@ snapshots: dotenv: 17.4.2 easy-table: 1.2.0 enhanced-resolve: 5.19.0 - esbuild: 0.28.1 + esbuild: 0.28.2 find-up: 7.0.0 mixpart: 0.0.4 open: 10.2.0 @@ -28607,259 +28607,319 @@ snapshots: terminal-link: 5.0.0 tinyglobby: 0.2.17 xdg-app-paths: 5.1.0 - zod: 4.3.6 + zod: 4.5.4 transitivePeerDependencies: + - '@aws-sdk/credential-provider-web-identity' - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - react - supports-color + - utf-8-validate - ws - '@workflow/core@5.0.0-beta.35(@opentelemetry/api@1.9.1)(ws@8.22.0)': + '@workflow/core@5.2.2(@opentelemetry/api@1.9.1)(ws@8.22.0)': dependencies: '@aws-sdk/credential-provider-web-identity': 3.972.49 '@jridgewell/trace-mapping': 0.3.31 '@standard-schema/spec': 1.0.0 '@types/ms': 2.1.0 - '@vercel/functions': 3.7.6(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0) - '@workflow/errors': 5.0.0-beta.11 - '@workflow/serde': 5.0.0-beta.2 - '@workflow/utils': 5.0.0-beta.6 - '@workflow/world': 5.0.0-beta.21 - '@workflow/world-local': 5.0.0-beta.29(@opentelemetry/api@1.9.1) - '@workflow/world-vercel': 5.0.0-beta.31(@opentelemetry/api@1.9.1) + '@vercel/functions': 3.10.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0) + '@workflow/errors': 5.0.4 + '@workflow/serde': 5.0.0 + '@workflow/utils': 5.0.2 + '@workflow/world': 5.0.4 + '@workflow/world-local': 5.1.1(@opentelemetry/api@1.9.1) + '@workflow/world-vercel': 5.2.2(@aws-sdk/credential-provider-web-identity@3.972.49)(@opentelemetry/api@1.9.1) + acorn: 8.15.0 debug: 4.4.3(supports-color@8.1.1) - devalue: 5.8.1 + devalue: 6.0.3 ms: 2.1.3 nanoid: 5.1.6 + quickjs-wasi: 3.4.0 seedrandom: 3.0.5 semver: 7.7.4 ulid: 3.0.2 - zod: 4.3.6 + zod: 4.5.4 optionalDependencies: '@opentelemetry/api': 1.9.1 transitivePeerDependencies: + - bufferutil - supports-color + - utf-8-validate - ws - '@workflow/errors@5.0.0-beta.11': + '@workflow/errors@5.0.4': dependencies: - '@workflow/utils': 5.0.0-beta.6 + '@workflow/utils': 5.0.2 + '@workflow/world': 5.0.4 ms: 2.1.3 - '@workflow/nest@5.0.0-beta.35(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.1)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(ws@8.22.0)': + '@workflow/nest@5.1.3(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.1)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(ws@8.22.0)': dependencies: '@nestjs/common': 11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2) '@swc/cli': 0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0) '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/swc-plugin': 5.0.0-beta.5(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/swc-plugin': 5.0.1(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/utils': 5.0.2 + esbuild: 0.28.2 pathe: 2.0.3 transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - supports-color + - utf-8-validate - ws - '@workflow/nest@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(ws@8.22.0)': + '@workflow/nest@5.1.3(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(ws@8.22.0)': dependencies: '@swc/core': 1.15.11(@swc/helpers@0.5.17) - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/swc-plugin': 5.0.0-beta.5(@swc/core@1.15.11(@swc/helpers@0.5.17)) + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/swc-plugin': 5.0.1(@swc/core@1.15.11(@swc/helpers@0.5.17)) + '@workflow/utils': 5.0.2 + esbuild: 0.28.2 pathe: 2.0.3 transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - supports-color + - utf-8-validate - ws - '@workflow/next@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(next@16.1.1(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2))(ws@8.22.0)': + '@workflow/next@5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(next@16.1.1(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2))(ws@8.22.0)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/core': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(ws@8.22.0) - '@workflow/swc-plugin': 5.0.0-beta.5(@swc/core@1.15.3(@swc/helpers@0.5.17)) - chokidar: 4.0.3 + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/core': 5.2.2(@opentelemetry/api@1.9.1)(ws@8.22.0) + '@workflow/swc-plugin': 5.0.1(@swc/core@1.15.3(@swc/helpers@0.5.17)) + ignore: 7.0.5 semver: 7.7.4 + watchpack: 2.5.1 optionalDependencies: next: 16.1.1(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2) transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - supports-color + - utf-8-validate - ws - '@workflow/nitro@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0)': + '@workflow/nitro@5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/core': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(ws@8.22.0) - '@workflow/rollup': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/swc-plugin': 5.0.0-beta.5(@swc/core@1.15.3(@swc/helpers@0.5.17)) - '@workflow/vite': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/web': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(react@19.1.0) + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/core': 5.2.2(@opentelemetry/api@1.9.1)(ws@8.22.0) + '@workflow/rollup': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/swc-plugin': 5.0.1(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/vite': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/web': 5.0.5(@opentelemetry/api@1.9.1)(react@19.1.0) exsolve: 1.0.8 pathe: 2.0.3 transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - react - supports-color + - utf-8-validate - ws - '@workflow/nuxt@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(magicast@0.5.5)(react@19.1.0)(ws@8.22.0)': + '@workflow/nuxt@5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(magicast@0.5.5)(react@19.1.0)(ws@8.22.0)': dependencies: '@nuxt/kit': 4.4.8(magicast@0.5.5) - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/nitro': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) + '@workflow/nitro': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - magicast - react - supports-color + - utf-8-validate - ws - '@workflow/rollup@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0)': + '@workflow/rollup@5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0)': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/swc-plugin': 5.0.0-beta.5(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/swc-plugin': 5.0.1(@swc/core@1.15.3(@swc/helpers@0.5.17)) exsolve: 1.0.7 transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - supports-color + - utf-8-validate - ws - '@workflow/serde@5.0.0-beta.2': {} + '@workflow/serde@5.0.0': {} - '@workflow/sveltekit@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0)': + '@workflow/sveltekit@5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0)': dependencies: + '@sveltejs/load-config': 0.2.3 '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/rollup': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/swc-plugin': 5.0.0-beta.5(@swc/core@1.15.3(@swc/helpers@0.5.17)) - '@workflow/vite': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/rollup': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/swc-plugin': 5.0.1(@swc/core@1.15.3(@swc/helpers@0.5.17)) + '@workflow/vite': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) exsolve: 1.1.1 fs-extra: 11.3.4 pathe: 2.0.3 transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - supports-color + - utf-8-validate - ws - '@workflow/swc-plugin@5.0.0-beta.5(@swc/core@1.15.11(@swc/helpers@0.5.17))': + '@workflow/swc-plugin@5.0.1(@swc/core@1.15.11(@swc/helpers@0.5.17))': dependencies: '@swc/core': 1.15.11(@swc/helpers@0.5.17) - '@workflow/swc-plugin@5.0.0-beta.5(@swc/core@1.15.3(@swc/helpers@0.5.17))': + '@workflow/swc-plugin@5.0.1(@swc/core@1.15.3(@swc/helpers@0.5.17))': dependencies: '@swc/core': 1.15.3(@swc/helpers@0.5.17) - '@workflow/typescript-plugin@5.0.0-beta.5(typescript@5.9.3)': + '@workflow/typescript-plugin@5.0.0(typescript@5.9.3)': optionalDependencies: typescript: 5.9.3 - '@workflow/utils@5.0.0-beta.6': + '@workflow/utils@5.0.2': dependencies: ms: 2.1.3 - '@workflow/vite@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0)': + '@workflow/vite@5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0)': dependencies: - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - supports-color + - utf-8-validate - ws - '@workflow/vitest@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.7.1)(msw@2.14.6(@types/node@24.7.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0)))(ws@8.22.0)': + '@workflow/vitest@5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0))(vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.7.1)(msw@2.14.6(@types/node@24.7.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0)))(ws@8.22.0)': dependencies: - '@workflow/builders': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/core': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(ws@8.22.0) - '@workflow/rollup': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/world': 5.0.0-beta.21 - '@workflow/world-local': 5.0.0-beta.29(@opentelemetry/api@1.9.1) + '@workflow/builders': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/core': 5.2.2(@opentelemetry/api@1.9.1)(ws@8.22.0) + '@workflow/rollup': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/world': 5.0.4 + '@workflow/world-local': 5.1.1(@opentelemetry/api@1.9.1) vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.7.1)(msw@2.14.6(@types/node@24.7.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0)) optionalDependencies: vite: 7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0) transitivePeerDependencies: - '@opentelemetry/api' - '@swc/helpers' + - bufferutil - supports-color + - utf-8-validate - ws - '@workflow/web@5.0.0-beta.35(@opentelemetry/api@1.9.1)(react@19.1.0)': + '@workflow/web@5.0.5(@opentelemetry/api@1.9.1)(react@19.1.0)': dependencies: - '@workflow/world-local': 5.0.0-beta.29(@opentelemetry/api@1.9.1) - express: 5.2.1 + '@workflow/world-local': 5.1.1(@opentelemetry/api@1.9.1) + srvx: 0.12.8 swr: 2.4.2(react@19.1.0) transitivePeerDependencies: - '@opentelemetry/api' - react - - supports-color - '@workflow/world-local@5.0.0-beta.29(@opentelemetry/api@1.9.1)': + '@workflow/world-local@5.1.1(@opentelemetry/api@1.9.1)': dependencies: - '@vercel/queue': 0.4.0(@opentelemetry/api@1.9.1) - '@workflow/errors': 5.0.0-beta.11 - '@workflow/utils': 5.0.0-beta.6 - '@workflow/world': 5.0.0-beta.21 + '@vercel/queue': 0.8.0(@opentelemetry/api@1.9.1) + '@workflow/errors': 5.0.4 + '@workflow/utils': 5.0.2 + '@workflow/world': 5.0.4 async-sema: 3.1.1 + proper-lockfile: 4.1.2 ulid: 3.0.2 - undici: 7.28.0 - zod: 4.3.6 + undici: 7.30.0 + zod: 4.5.4 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@workflow/world-testing@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(react@19.1.0)(typescript@5.9.3)(vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.7.1)(msw@2.14.6(@types/node@24.7.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0)))(ws@8.22.0)': + '@workflow/world-testing@5.0.5(@aws-sdk/credential-provider-web-identity@3.972.78)(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(react@19.1.0)(typescript@5.9.3)(vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.7.1)(msw@2.14.6(@types/node@24.7.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0)))(ws@8.22.0)': dependencies: '@hono/node-server': 1.19.13(hono@4.12.25) - '@workflow/cli': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) - '@workflow/core': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(ws@8.22.0) - '@workflow/utils': 5.0.0-beta.6 - '@workflow/world': 5.0.0-beta.21 - '@workflow/world-local': 5.0.0-beta.29(@opentelemetry/api@1.9.1) + '@workflow/cli': 5.0.5(@aws-sdk/credential-provider-web-identity@3.972.78)(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) + '@workflow/core': 5.2.2(@opentelemetry/api@1.9.1)(ws@8.22.0) + '@workflow/world': 5.0.4 chalk: 5.6.2 hono: 4.12.25 jsonlines: 0.1.1 + ulid: 3.0.2 vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.7.1)(msw@2.14.6(@types/node@24.7.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0)) - workflow: 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(react@19.1.0)(typescript@5.9.3)(ws@8.22.0) - zod: 4.3.6 + workflow: 5.2.2(@aws-sdk/credential-provider-web-identity@3.972.78)(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(react@19.1.0)(typescript@5.9.3)(ws@8.22.0) + zod: 4.5.4 transitivePeerDependencies: + - '@aws-sdk/credential-provider-web-identity' - '@nestjs/common' - '@nestjs/core' - '@opentelemetry/api' - '@swc/cli' - '@swc/core' - '@swc/helpers' + - bufferutil - magicast - next - react - supports-color - typescript + - utf-8-validate - ws - '@workflow/world-vercel@5.0.0-beta.31(@opentelemetry/api@1.9.1)': + '@workflow/world-vercel@5.2.2(@aws-sdk/credential-provider-web-identity@3.972.49)(@opentelemetry/api@1.9.1)': dependencies: + '@vercel/functions': 3.10.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0) '@vercel/oidc': 3.2.0 - '@vercel/queue': 0.4.0(@opentelemetry/api@1.9.1) - '@workflow/errors': 5.0.0-beta.11 - '@workflow/world': 5.0.0-beta.21 + '@vercel/queue': 0.8.0(@opentelemetry/api@1.9.1) + '@workflow/errors': 5.0.4 + '@workflow/utils': 5.0.2 + '@workflow/world': 5.0.4 cbor-x: 1.6.0 ulid: 3.0.2 - undici: 7.28.0 - zod: 4.3.6 + undici: 7.30.0 + ws: 8.22.0 + zod: 4.5.4 + optionalDependencies: + '@opentelemetry/api': 1.9.1 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-web-identity' + - bufferutil + - utf-8-validate + + '@workflow/world-vercel@5.2.2(@aws-sdk/credential-provider-web-identity@3.972.78)(@opentelemetry/api@1.9.1)': + dependencies: + '@vercel/functions': 3.10.1(@aws-sdk/credential-provider-web-identity@3.972.78)(ws@8.22.0) + '@vercel/oidc': 3.2.0 + '@vercel/queue': 0.8.0(@opentelemetry/api@1.9.1) + '@workflow/errors': 5.0.4 + '@workflow/utils': 5.0.2 + '@workflow/world': 5.0.4 + cbor-x: 1.6.0 + ulid: 3.0.2 + undici: 7.30.0 + ws: 8.22.0 + zod: 4.5.4 optionalDependencies: '@opentelemetry/api': 1.9.1 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-web-identity' + - bufferutil + - utf-8-validate - '@workflow/world@5.0.0-beta.21': + '@workflow/world@5.0.4': dependencies: ulid: 3.0.2 - zod: 4.3.6 + zod: 4.5.4 '@xhmikosr/archive-type@8.1.0': dependencies: @@ -29071,15 +29131,15 @@ snapshots: optionalDependencies: react: 19.1.0 - ai@4.3.19(react@19.1.0)(zod@4.3.6): + ai@4.3.19(react@19.1.0)(zod@4.5.4): dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.8(zod@4.3.6) - '@ai-sdk/react': 1.2.12(react@19.1.0)(zod@4.3.6) - '@ai-sdk/ui-utils': 1.2.11(zod@4.3.6) + '@ai-sdk/provider-utils': 2.2.8(zod@4.5.4) + '@ai-sdk/react': 1.2.12(react@19.1.0)(zod@4.5.4) + '@ai-sdk/ui-utils': 1.2.11(zod@4.5.4) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 - zod: 4.3.6 + zod: 4.5.4 optionalDependencies: react: 19.1.0 @@ -30668,7 +30728,7 @@ snapshots: detect-node-es@1.1.0: {} - devalue@5.8.1: {} + devalue@6.0.3: {} devlop@1.1.0: dependencies: @@ -31150,7 +31210,6 @@ snapshots: '@esbuild/win32-arm64': 0.28.2 '@esbuild/win32-ia32': 0.28.2 '@esbuild/win32-x64': 0.28.2 - optional: true escalade@3.2.0: {} @@ -31946,8 +32005,7 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-to-regexp@0.4.1: - optional: true + glob-to-regexp@0.4.1: {} glob@10.5.0: dependencies: @@ -34499,7 +34557,7 @@ snapshots: nf3@0.3.23: {} - nitro@3.0.260610-beta(@vercel/functions@3.7.6(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0))(better-sqlite3@12.8.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.8.0)(bun-types@1.3.11)(kysely@0.29.5)(pg@8.17.2)(postgres@3.4.9)(sql.js@1.14.2))(giget@3.3.1)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.6)(miniflare@4.20260611.0)(rollup@4.62.3)(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0))(wrangler@4.100.0)(xml2js@0.6.2): + nitro@3.0.260610-beta(@vercel/functions@3.10.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0))(better-sqlite3@12.8.0)(chokidar@5.0.0)(dotenv@17.4.2)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.8.0)(bun-types@1.3.11)(kysely@0.29.5)(pg@8.17.2)(postgres@3.4.9)(sql.js@1.14.2))(giget@3.3.1)(ioredis@5.10.1)(jiti@2.7.0)(lru-cache@11.2.6)(miniflare@4.20260611.0)(rollup@4.62.3)(vite@7.3.1(@types/node@24.7.1)(jiti@2.7.0)(less@4.4.1)(lightningcss@1.33.0)(sass@1.93.2)(stylus@0.62.0)(terser@5.46.0)(tsx@4.23.1)(yaml@2.9.0))(wrangler@4.100.0)(xml2js@0.6.2): dependencies: consola: 3.4.2 crossws: 0.4.10(srvx@0.11.22) @@ -34514,7 +34572,7 @@ snapshots: rolldown: 1.2.1 srvx: 0.11.22 unenv: 2.0.0-rc.24 - unstorage: 2.0.0-alpha.7(@vercel/functions@3.7.6(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0))(chokidar@5.0.0)(db0@0.3.4(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.8.0)(bun-types@1.3.11)(kysely@0.29.5)(pg@8.17.2)(postgres@3.4.9)(sql.js@1.14.2)))(ioredis@5.10.1)(lru-cache@11.2.6)(ofetch@2.0.0-alpha.3) + unstorage: 2.0.0-alpha.7(@vercel/functions@3.10.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0))(chokidar@5.0.0)(db0@0.3.4(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.8.0)(bun-types@1.3.11)(kysely@0.29.5)(pg@8.17.2)(postgres@3.4.9)(sql.js@1.14.2)))(ioredis@5.10.1)(lru-cache@11.2.6)(ofetch@2.0.0-alpha.3) optionalDependencies: dotenv: 17.4.2 giget: 3.3.1 @@ -35573,6 +35631,8 @@ snapshots: '@jitl/quickjs-wasmfile-release-sync': 0.32.0 quickjs-emscripten-core: 0.32.0 + quickjs-wasi@3.4.0: {} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -36755,6 +36815,8 @@ snapshots: srvx@0.11.22: {} + srvx@0.12.8: {} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -37806,9 +37868,9 @@ snapshots: picomatch: 4.0.5 webpack-virtual-modules: 0.6.2 - unstorage@2.0.0-alpha.7(@vercel/functions@3.7.6(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0))(chokidar@5.0.0)(db0@0.3.4(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.8.0)(bun-types@1.3.11)(kysely@0.29.5)(pg@8.17.2)(postgres@3.4.9)(sql.js@1.14.2)))(ioredis@5.10.1)(lru-cache@11.2.6)(ofetch@2.0.0-alpha.3): + unstorage@2.0.0-alpha.7(@vercel/functions@3.10.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0))(chokidar@5.0.0)(db0@0.3.4(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.8.0)(bun-types@1.3.11)(kysely@0.29.5)(pg@8.17.2)(postgres@3.4.9)(sql.js@1.14.2)))(ioredis@5.10.1)(lru-cache@11.2.6)(ofetch@2.0.0-alpha.3): optionalDependencies: - '@vercel/functions': 3.7.6(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0) + '@vercel/functions': 3.10.1(@aws-sdk/credential-provider-web-identity@3.972.49)(ws@8.22.0) chokidar: 5.0.0 db0: 0.3.4(better-sqlite3@12.8.0)(drizzle-orm@0.45.2(@opentelemetry/api@1.9.1)(@types/better-sqlite3@7.6.13)(@types/pg@8.16.0)(@types/sql.js@1.4.9)(better-sqlite3@12.8.0)(bun-types@1.3.11)(kysely@0.29.5)(pg@8.17.2)(postgres@3.4.9)(sql.js@1.14.2)) ioredis: 5.10.1 @@ -38783,7 +38845,6 @@ snapshots: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - optional: true wcwidth@1.0.1: dependencies: @@ -38922,64 +38983,70 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20260730.1 '@cloudflare/workerd-windows-64': 1.20260730.1 - workflow@5.0.0-beta.35(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.1)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(magicast@0.5.5)(next@16.1.1(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2))(react@19.1.0)(typescript@5.9.3)(ws@8.22.0): - dependencies: - '@workflow/astro': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/cli': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) - '@workflow/core': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(ws@8.22.0) - '@workflow/errors': 5.0.0-beta.11 - '@workflow/nest': 5.0.0-beta.35(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.1)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/next': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(next@16.1.1(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2))(ws@8.22.0) - '@workflow/nitro': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) - '@workflow/nuxt': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(magicast@0.5.5)(react@19.1.0)(ws@8.22.0) - '@workflow/rollup': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/sveltekit': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/typescript-plugin': 5.0.0-beta.5(typescript@5.9.3) - '@workflow/utils': 5.0.0-beta.6 + workflow@5.2.2(@aws-sdk/credential-provider-web-identity@3.972.49)(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.1)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(magicast@0.5.5)(next@16.1.1(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2))(react@19.1.0)(typescript@5.9.3)(ws@8.22.0): + dependencies: + '@workflow/astro': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/cli': 5.0.5(@aws-sdk/credential-provider-web-identity@3.972.49)(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) + '@workflow/core': 5.2.2(@opentelemetry/api@1.9.1)(ws@8.22.0) + '@workflow/errors': 5.0.4 + '@workflow/nest': 5.1.3(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.28(@nestjs/common@11.1.28(reflect-metadata@0.2.2)(rxjs@7.8.2))(reflect-metadata@0.2.2)(rxjs@7.8.2))(@opentelemetry/api@1.9.1)(@swc/cli@0.8.1(@swc/core@1.15.3(@swc/helpers@0.5.17))(chokidar@5.0.0))(@swc/core@1.15.3(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/next': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(next@16.1.1(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2))(ws@8.22.0) + '@workflow/nitro': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) + '@workflow/nuxt': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(magicast@0.5.5)(react@19.1.0)(ws@8.22.0) + '@workflow/rollup': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/sveltekit': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/typescript-plugin': 5.0.0(typescript@5.9.3) + '@workflow/utils': 5.0.2 ms: 2.1.3 optionalDependencies: '@opentelemetry/api': 1.9.1 transitivePeerDependencies: + - '@aws-sdk/credential-provider-web-identity' - '@nestjs/common' - '@nestjs/core' - '@swc/cli' - '@swc/core' - '@swc/helpers' + - bufferutil - magicast - next - react - supports-color - typescript + - utf-8-validate - ws - workflow@5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(react@19.1.0)(typescript@5.9.3)(ws@8.22.0): - dependencies: - '@workflow/astro': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/cli': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) - '@workflow/core': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(ws@8.22.0) - '@workflow/errors': 5.0.0-beta.11 - '@workflow/nest': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/next': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(next@16.1.1(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2))(ws@8.22.0) - '@workflow/nitro': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) - '@workflow/nuxt': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(magicast@0.5.5)(react@19.1.0)(ws@8.22.0) - '@workflow/rollup': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/sveltekit': 5.0.0-beta.35(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) - '@workflow/typescript-plugin': 5.0.0-beta.5(typescript@5.9.3) - '@workflow/utils': 5.0.0-beta.6 + workflow@5.2.2(@aws-sdk/credential-provider-web-identity@3.972.78)(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(react@19.1.0)(typescript@5.9.3)(ws@8.22.0): + dependencies: + '@workflow/astro': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/cli': 5.0.5(@aws-sdk/credential-provider-web-identity@3.972.78)(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) + '@workflow/core': 5.2.2(@opentelemetry/api@1.9.1)(ws@8.22.0) + '@workflow/errors': 5.0.4 + '@workflow/nest': 5.1.3(@opentelemetry/api@1.9.1)(@swc/core@1.15.11(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/next': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(next@16.1.1(@opentelemetry/api@1.9.1)(@playwright/test@1.57.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.93.2))(ws@8.22.0) + '@workflow/nitro': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(react@19.1.0)(ws@8.22.0) + '@workflow/nuxt': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(magicast@0.5.5)(react@19.1.0)(ws@8.22.0) + '@workflow/rollup': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/sveltekit': 5.0.5(@opentelemetry/api@1.9.1)(@swc/helpers@0.5.17)(ws@8.22.0) + '@workflow/typescript-plugin': 5.0.0(typescript@5.9.3) + '@workflow/utils': 5.0.2 ms: 2.1.3 optionalDependencies: '@opentelemetry/api': 1.9.1 transitivePeerDependencies: + - '@aws-sdk/credential-provider-web-identity' - '@nestjs/common' - '@nestjs/core' - '@swc/cli' - '@swc/core' - '@swc/helpers' + - bufferutil - magicast - next - react - supports-color - typescript + - utf-8-validate - ws wrangler@4.100.0: @@ -39182,9 +39249,9 @@ snapshots: dependencies: zod: 4.1.13 - zod-to-json-schema@3.25.1(zod@4.3.6): + zod-to-json-schema@3.25.1(zod@4.5.4): dependencies: - zod: 4.3.6 + zod: 4.5.4 zod@3.25.76: {} @@ -39194,6 +39261,8 @@ snapshots: zod@4.3.6: {} + zod@4.5.4: {} + zustand@4.5.7(@types/react@19.2.13)(react@19.1.0): dependencies: use-sync-external-store: 1.6.0(react@19.1.0)