libfx 0.0.13-dev.1427.gff3b8d33c9ac → 0.0.13-dev.1432.g1df91f0b4ebf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -5
- package/durable/local.mjs +1 -1
- package/durable/vercel.mjs +1 -1
- package/durable/world.mjs +1 -1
- package/durable.js +83 -29
- package/fx-harness.js +31 -3
- package/fx-sdk.js +28 -19
- package/fx-term.wasm +0 -0
- package/node.cjs +105 -40
- package/package.json +1 -1
- package/types/durable-vercel.d.ts +3 -1
- package/types/durable-world.d.ts +3 -1
- package/types/libfx.d.cts +6 -2
package/README.md
CHANGED
|
@@ -92,6 +92,18 @@ running turn. Pass `context` to hand JSON to the session's tools:
|
|
|
92
92
|
`session()` call whose prompt or steer started it, and a call without
|
|
93
93
|
`context` gives its turns none.
|
|
94
94
|
|
|
95
|
+
A conversation can also choose its own model and instructions.
|
|
96
|
+
`agent.session(id, { model, instructions })` runs the turns it starts with
|
|
97
|
+
that model, a model ID or a model object such as `{ id, effort, fast }`, in
|
|
98
|
+
place of the agent's whole model choice, and with those instructions in place
|
|
99
|
+
of the agent's. They follow the rule `context` follows: a turn keeps the
|
|
100
|
+
settings of the `session()` call that started it, also when another process
|
|
101
|
+
continues it, and a call without them runs with the agent's. Pass a
|
|
102
|
+
conversation's settings on each call; a change applies from its next turn.
|
|
103
|
+
When a session's next turn runs under another model than the one its last
|
|
104
|
+
checkpoint was saved under, the session continues and `onEvent` receives a
|
|
105
|
+
`checkpoint.mismatch` event.
|
|
106
|
+
|
|
95
107
|
### Turns
|
|
96
108
|
|
|
97
109
|
`session.prompt(input)` queues `input` as the session's next turn and returns
|
|
@@ -205,7 +217,8 @@ one bundles.
|
|
|
205
217
|
| Option | Default | Meaning |
|
|
206
218
|
| --- | --- | --- |
|
|
207
219
|
| `queueDurable` | `false` | The queue keeps a message until a delivery acknowledges it, across crashes. When `false`, `prompt()` stores the prompt in the session before it queues it. |
|
|
208
|
-
| `livenessKnown`, `alive(lease)`, `holderInfo()` | `false` | `alive(lease)` answers whether the holder of a lease still runs, from what `holderInfo()` put in it, so a crashed worker's session frees at once. Without it, a session
|
|
220
|
+
| `livenessKnown`, `alive(lease)`, `holderInfo()` | `false` | `alive(lease)` answers whether the holder of a lease still runs, from what `holderInfo()` put in it, so a crashed worker's session frees at once. Without it, a worker renews its lease while it runs, and the session of one that died frees `leaseMs` after its last renewal. |
|
|
221
|
+
| `leaseMs` | 15000 | Without liveness, how long a lease lasts after its worker took or last renewed it. The worker renews it every third of that, and never past its deadline. |
|
|
209
222
|
| `maxDurationMs`, `reserveMs` | no limit, 30000 | Each delivery stops `reserveMs` before `maxDurationMs`, or before the World's `getRuntimeDeadline()` when it has one. |
|
|
210
223
|
| `pollMs` | 1000 | How often a waiting worker reads the session again. |
|
|
211
224
|
| `gatewayKey()` | none | The AI Gateway credential when the agent has no `apiKey`. |
|
|
@@ -241,7 +254,10 @@ When the process running a turn stops, the next process to receive work for
|
|
|
241
254
|
the session continues the turn from its last record:
|
|
242
255
|
|
|
243
256
|
- On `local()`, a session held by a process that died is free at once.
|
|
244
|
-
- On `vercel()`,
|
|
257
|
+
- On `vercel()`, where libfx cannot tell whether a function still runs, a
|
|
258
|
+
worker renews a 15 second lease while it runs. When its function dies, its
|
|
259
|
+
session frees 15 seconds after the last renewal, and the next delivery for
|
|
260
|
+
it continues the turn. When
|
|
245
261
|
the deadline is near, libfx stops before the next model request and saves
|
|
246
262
|
the turn, and the next invocation continues it. A model request or tool
|
|
247
263
|
call still running shortly before the deadline is cut off: `onEvent`
|
|
@@ -252,8 +268,9 @@ the session continues the turn from its last record:
|
|
|
252
268
|
again: a call is answered as possibly run, so the model decides what to do
|
|
253
269
|
next, and a model request cancels the turn. So a process never runs on
|
|
254
270
|
after the deadline its hold ends at. A
|
|
255
|
-
process that freezes
|
|
256
|
-
at its next write,
|
|
271
|
+
process that freezes, or whose renewals stall for a lease, and wakes after
|
|
272
|
+
another took its session over stops at its next write, a renewal included,
|
|
273
|
+
and `onEvent` receives `session.fenced`. Until then it
|
|
257
274
|
can finish a model request or a call to an idempotent tool; it never starts
|
|
258
275
|
a tool with effects, because that waits for its record to be stored. A
|
|
259
276
|
process that started a new turn on an idle session and was taken over
|
|
@@ -1121,7 +1138,9 @@ turn 30 seconds before the deadline, at its next model request, and cuts off a
|
|
|
1121
1138
|
call still running 2 seconds before it; either way the same queue message runs
|
|
1122
1139
|
the rest of the turn in a new invocation. Pass
|
|
1123
1140
|
`durability: vercel({ reserveMs })` from `libfx/durable-vercel` to change that
|
|
1124
|
-
margin.
|
|
1141
|
+
margin. A function that dies mid-turn holds its session for at most
|
|
1142
|
+
`leaseMs` after its last renewal, 15 seconds unless you pass
|
|
1143
|
+
`vercel({ leaseMs })`. libfx authenticates to the AI Gateway with the deployment's OIDC token
|
|
1125
1144
|
unless you pass `apiKey` or set `AI_GATEWAY_API_KEY`.
|
|
1126
1145
|
|
|
1127
1146
|
Use the application's normal authentication and request limits around the
|
package/durable/local.mjs
CHANGED
|
@@ -187,4 +187,4 @@ GFS4: `),console.error(e)};if(!Ze[Dt]){if(Wp=global[Dt]||[],FL(Ze,Wp),Ze.close=f
|
|
|
187
187
|
Caused by: ${t.cause.stack}`}static is(e){return Lt(e)&&e.name==="WorkflowError"}}class st extends ro{status;code;url;retryAfter;field;constructor(e,t){super(e,{cause:t?.cause});this.name="WorkflowWorldError",this.status=t?.status,this.code=t?.code,this.url=t?.url,this.retryAfter=t?.retryAfter,this.field=t?.field}static is(e){return Lt(e)&&e.name==="WorkflowWorldError"}}class eS extends ro{constructor(e,t){super(e,{...t});this.name="WorkflowRuntimeError"}static is(e){return Lt(e)&&e.name==="WorkflowRuntimeError"}}class tS extends eS{constructor(e,t){super(e,{cause:t?.cause,slug:Ad.RUNTIME_DECRYPTION_FAILED});if(this.name="RuntimeDecryptionError",t?.context!==void 0)this.context=t.context}static is(e){return Lt(e)&&e.name==="RuntimeDecryptionError"}}class no extends ro{runId;constructor(e){super(`Workflow run "${e}" not found`,{});this.name="WorkflowRunNotFoundError",this.runId=e}static is(e){return Lt(e)&&e.name==="WorkflowRunNotFoundError"}}class rS extends ro{token;conflictingRunId;constructor(e,t){super(`Hook token "${e}" is already in use by another workflow${t?` (run "${t}")`:""}`,{slug:Ad.HOOK_CONFLICT});if(this.name="HookConflictError",this.token=e,t!==void 0)this.conflictingRunId=t}static is(e){return Lt(e)&&e.name==="HookConflictError"}}class wu extends ro{token;claimedByRunId;claimedByHookId;constructor(e,t,r){super(`Hook token "${e}" was force-claimed by another workflow (run "${t}")`,{slug:Ad.HOOK_FORCE_CLAIMED});if(this.name="HookForceClaimedError",this.token=e,this.claimedByRunId=t,r!==void 0)this.claimedByHookId=r}static is(e){return Lt(e)&&e.name==="HookForceClaimedError"}}class Vr extends ro{token;constructor(e){super("Hook not found",{});this.name="HookNotFoundError",this.token=e}static is(e){return Lt(e)&&e.name==="HookNotFoundError"}}class Le extends st{constructor(e){super(e);this.name="EntityConflictError"}static is(e){return Lt(e)&&e.name==="EntityConflictError"}}class Pr extends st{runId;runStatus;expiredAt;constructor(e,t,r,n){super(e,{status:410,code:"run-expired"});this.runId=t,this.runStatus=r,this.expiredAt=n,this.name="RunExpiredError"}static is(e){return Lt(e)&&e.name==="RunExpiredError"}}class nS extends st{constructor(e,t){super(e,{code:od.STREAM_ERROR,cause:t?.cause,url:t?.url,status:t?.status});this.name="StreamError"}static is(e){return Lt(e)&&e.name==="StreamError"}}class sd extends st{constructor(e,t){super(e,{retryAfter:t?.retryAfter});this.name="TooEarlyError"}static is(e){return Lt(e)&&e.name==="TooEarlyError"}}class id extends ro{runSpecVersion;worldSpecVersion;constructor(e,t){super(`Run requires spec version ${e}, but world supports version ${t}. Please upgrade 'workflow' package.`);this.name="RunNotSupportedError",this.runSpecVersion=e,this.worldSpecVersion=t}static is(e){return Lt(e)&&e.name==="RunNotSupportedError"}}class oS extends Error{fatal=!0;constructor(e){super(e);this.name="FatalError"}static is(e){if(!Lt(e))return!1;if(e.name==="FatalError")return!0;return e.fatal===!0}}class AS extends Error{retryAfter;constructor(e,t={}){super(e);if(this.name="RetryableError",t.retryAfter!==void 0)this.retryAfter=td(t.retryAfter);else this.retryAfter=new Date(Date.now()+1000)}static is(e){return Lt(e)&&e.name==="RetryableError"}}var zD=Symbol.for("@workflow/errors//FatalError"),qD=Symbol.for("@workflow/errors//RetryableError"),ZD=Symbol.for("@workflow/errors//HookConflictError"),jD=Symbol.for("@workflow/errors//HookForceClaimedError"),KD=Symbol.for("@workflow/errors//RuntimeDecryptionError"),XD=Symbol.for("@workflow/errors//StreamError");if(typeof globalThis<"u"){if(!Object.hasOwn(globalThis,zD))Object.defineProperty(globalThis,zD,{value:oS,writable:!1,enumerable:!1,configurable:!1});if(!Object.hasOwn(globalThis,qD))Object.defineProperty(globalThis,qD,{value:AS,writable:!1,enumerable:!1,configurable:!1});if(!Object.hasOwn(globalThis,ZD))Object.defineProperty(globalThis,ZD,{value:rS,writable:!1,enumerable:!1,configurable:!1});if(!Object.hasOwn(globalThis,jD))Object.defineProperty(globalThis,jD,{value:wu,writable:!1,enumerable:!1,configurable:!1});if(!Object.hasOwn(globalThis,KD))Object.defineProperty(globalThis,KD,{value:tS,writable:!1,enumerable:!1,configurable:!1});if(!Object.hasOwn(globalThis,XD))Object.defineProperty(globalThis,XD,{value:nS,writable:!1,enumerable:!1,configurable:!1})}var aS="The world is selected from the environment when the process starts: the Vercel world is used when VERCEL_DEPLOYMENT_ID is set, unless WORKFLOW_TARGET_WORLD says otherwise. Unset WORKFLOW_TARGET_WORLD in this deployment, or set WORKFLOW_TARGET_WORLD=vercel, to use the Vercel world.";class Du extends st{dataDir;constructor(e,t){super(`[workflow] The local (filesystem) world cannot create its data directory "${e}" (${t}). Workflow runs cannot be stored, so every run will fail before its first step. If this is a Vercel deployment, its filesystem is read-only and the local world cannot work there. ${aS} Otherwise point WORKFLOW_LOCAL_DATA_DIR at a writable directory.`,{code:t});this.name="UnwritableDataDirError",this.dataDir=e}static is(e){return e instanceof Error&&e.name==="UnwritableDataDirError"}}var iV=new Set(["EROFS","EACCES","EPERM"]);function cS(e){return e!==void 0&&iV.has(e)}var iS=Bt("@workflow/world-local//buildTargetWarnings",1,()=>({warnedAboutVercelDeployment:!1}));function uS(e){if(iS.warnedAboutVercelDeployment||!process.env.VERCEL_DEPLOYMENT_ID)return;let t=sS.resolve(e),r=sV();if(t===r||t.startsWith(`${r}${sS.sep}`))return;iS.warnedAboutVercelDeployment=!0,console.warn(`[workflow] Warning: the local (filesystem) world is running inside a Vercel deployment, writing to ${t}. That filesystem is read-only, so workflow runs will fail before their first step. `+aS)}import{execFile as cV}from"node:child_process";import{readdir as uV,readFile as lV,readlink as gV}from"node:fs/promises";import{promisify as fV}from"node:util";function aV(e,t=10){let r=parseInt(e,t);if(!Number.isNaN(r)&&r>=0&&r<=65535)return r;return}function lS(e,t){let r=[],n=e.trim().split(`
|
|
188
188
|
`);for(let o of n){let A=o.trim().split(/\s+/);if(A.length<5||A[0]?.toUpperCase()!=="TCP")continue;let[,s,,i,a]=A;if(i?.toUpperCase()!=="LISTENING"||a!==t.toString())continue;let c=s.lastIndexOf(":");if(c===-1)continue;let u=aV(s.slice(c+1));if(u!==void 0)r.push(u)}return r}var gS=fV(cV);function fS(e,t=10){let r=parseInt(e,t);if(!Number.isNaN(r)&&r>=0&&r<=65535)return r;return}var hV=(e,t)=>e.join(t),ad=hV(["","proc"],"/");async function dV(e){let r=[`${ad}/net/tcp`,`${ad}/net/tcp6`],n=[],o=new Set,A=`${ad}/${e}/fd`;try{let c=(await uV(A)).sort((l,g)=>{let f=Number.parseInt(l,10),h=Number.parseInt(g,10);return f-h}),u=await Promise.allSettled(c.map(async(l)=>(await gV(`${A}/${l}`)).match(/^socket:\[(\d+)\]$/)?.[1]??null));for(let l of u)if(l.status==="fulfilled"&&l.value)n.push(l.value),o.add(l.value)}catch{return[]}if(n.length===0)return[];let s=new Map;for(let a of r)try{let u=(await lV(a,"utf8")).split(`
|
|
189
189
|
`).slice(1);for(let l of u){if(!l.trim())continue;let g=l.trim().split(/\s+/);if(g.length<10)continue;let f=g[1],h=g[3],d=g[9];if(!f||h!=="0A"||!d)continue;if(!o.has(d))continue;let I=f.indexOf(":");if(I===-1)continue;let C=f.slice(I+1);if(!C)continue;let p=fS(C,16);if(p!==void 0)s.set(d,p)}}catch{}let i=[];for(let a of n){let c=s.get(a);if(c!==void 0)i.push(c)}return i}async function EV(e){try{let{stdout:t}=await gS("lsof",["-a","-i","-P","-n","-p",e.toString()]),r=[],n=t.split(`
|
|
190
|
-
`);for(let o of n)if(o.includes("LISTEN")){let s=o.trim().split(/\s+/)[8];if(s){let i=s.lastIndexOf(":");if(i!==-1){let a=fS(s.slice(i+1));if(a!==void 0)r.push(a)}}}return r}catch{return[]}}async function IV(e){try{let{stdout:t}=await gS("cmd",["/c","netstat -ano -p tcp | findstr LISTENING"]);return lS(t,e)}catch{return[]}}async function pV(){let{pid:e,platform:t}=process;try{switch(t){case"linux":return await dV(e);case"darwin":return await EV(e);case"win32":return await IV(e);default:return[]}}catch(r){return ps("[getAllPorts] Detection failed:",r),[]}}var CV=500,QV=`${rd}/flow?__health`;async function BV(e,t={}){let{endpoint:r=QV,timeout:n=CV}=t,o=new AbortController,A=setTimeout(()=>o.abort(),n);try{return(await fetch(`http://localhost:${e}${r}`,{method:"HEAD",signal:o.signal})).status===200}catch{return!1}finally{clearTimeout(A)}}async function hS(e){let t=await pV();if(t.length===0)return;if(t.length===1)return t[0];let n=(await Promise.all(t.map(async(o)=>({port:o,isWorkflow:await BV(o,e)})))).find((o)=>o.isWorkflow);if(n)return n.port;return ps("[getWorkflowPort] Probing failed, falling back to first port:",t[0]),t[0]}function dS(e){let t={get value(){let r=e();return Object.defineProperty(t,"value",{value:r}),r}};return t}var mV=()=>process.env.WORKFLOW_LOCAL_DATA_DIR||".workflow-data",gt="all",yV=()=>process.env.WORKFLOW_LOCAL_BASE_URL,ES=dS(()=>{let e=mV(),t=yV();return{dataDir:e,baseUrl:t}});function IS(e){if(e.recoverActiveRuns!==void 0)return e.recoverActiveRuns;let t=process.env.WORKFLOW_LOCAL_RECOVER_ACTIVE_RUNS?.toLowerCase();if(t==="0"||t==="false")return!1;if(t==="1"||t==="true")return!0;return!0}function pS(e){return e.baseUrl??process.env.WORKFLOW_LOCAL_BASE_URL??ms("http://localhost")}async function CS(e){if(e.baseUrl)return e.baseUrl;if(process.env.WORKFLOW_LOCAL_BASE_URL)return process.env.WORKFLOW_LOCAL_BASE_URL;if(typeof e.port==="number")return ms(`http://localhost:${e.port}`);if(process.env.PORT)return ms(`http://localhost:${process.env.PORT}`);let t=await hS({endpoint:nd()});if(t)return ms(`http://localhost:${t}`);throw Error("Unable to resolve base URL for workflow queue.")}import{promises as mt}from"node:fs";import rn from"node:path";Is();ut();St();var tn=Bt("@workflow/world-local//fs",1,()=>({ulid:eo(()=>Math.random()),createdFilesCache:new Set,createdDirectoriesCache:new Set}));function wV(e){let t=typeof e==="string"?e:String(e),r=48;return t.length>48?`${t.slice(0,48)}…`:t}class ys extends st{constructor(e,t){super(`Unsafe ${e} "${wV(t)}": must not be empty, contain ".", "/", "\\", or null bytes`);this.name="UnsafeEntityIdError"}static is(e){return e instanceof Error&&e.name==="UnsafeEntityIdError"}}function fe(e,t){if(t.length===0||t.startsWith(".")||t.includes("/")||t.includes("\\")||t.includes("\x00")||t.includes("."))throw new ys(e,t)}function Pe(e,...t){let r=rn.resolve(e),n=rn.resolve(e,...t);if(n!==r&&!n.startsWith(r+rn.sep))throw new ys("path",t.join("/"));return n}var DV=process.platform==="win32";async function Gr(e,t=5){if(!DV)return e();let r=["EPERM","EBUSY","EACCES"],n=10;for(let o=0;o<=t;o++)try{return await e()}catch(A){if(!(o<t&&r.includes(A.code)))throw A;let i=n*2**o+Math.random()*n;await new Promise((a)=>setTimeout(a,i))}throw Error("Retry loop exited unexpectedly")}function cd(){tn.createdFilesCache.clear(),tn.createdDirectoriesCache.clear()}var QS=/\.[a-zA-Z][a-zA-Z0-9-]*$/;function nn(e){return e.replace(QS,"")}function ws(e,t){return e.endsWith(`.${t}`)}function oA(e){return!QS.test(e)}function ge(e,t,r,n){if(fe("fileId",r),n!==void 0)fe("tag",n);let o=n?`${r}.${n}.json`:`${r}.json`;return Pe(e,t,o)}async function ye(e,t,r,n,o){if(fe("fileId",r),o!==void 0)fe("tag",o);if(o){let A=await Oe(Pe(e,t,`${r}.${o}.json`),n);if(A!==null)return A}return Oe(Pe(e,t,`${r}.json`),n)}async function Nu(e,t){let r=`.${t}.json`;try{return(await mt.readdir(e)).filter((o)=>o.endsWith(r))}catch(n){if(n.code==="ENOENT")return[];throw n}}async function BS(e,t,r){let n=`.${t}${r}`;try{return(await mt.readdir(e)).filter((A)=>A.endsWith(n))}catch(o){if(o.code==="ENOENT")return[];throw o}}async function Su(e){let t=rn.resolve(e);if(tn.createdDirectoriesCache.has(t))return;try{await mt.mkdir(t,{recursive:!0}),tn.createdDirectoriesCache.add(t)}catch(r){let n=r.code;if(cS(n)&&!await SV(t))throw new Du(t,n)}}async function SV(e){try{return(await mt.stat(e)).isDirectory()}catch{return!1}}async function ud(e,t){await Su(e);try{return await t()}catch(r){if(r.code!=="ENOENT")throw r;return tn.createdDirectoriesCache.delete(rn.resolve(e)),await Su(e),t()}}function vt(e,t){if(t instanceof Uint8Array)return{__type:"Uint8Array",data:Buffer.from(t).toString("base64")};return t}function ia(e,t){if(t!==null&&typeof t==="object"&&t.__type==="Uint8Array"&&typeof t.data==="string")return new Uint8Array(Buffer.from(t.data,"base64"));return t}async function We(e,t,r){return Br(e,JSON.stringify(t,vt,2),r)}async function Br(e,t,r){if(!r?.overwrite){if(tn.createdFilesCache.has(e))throw new Le(`File ${e} already exists and 'overwrite' is false`);try{throw await mt.access(e),tn.createdFilesCache.add(e),new Le(`File ${e} already exists and 'overwrite' is false`)}catch(A){if(A.code!=="ENOENT")throw A}}let n=`${e}.tmp.${tn.ulid()}`,o=!1;try{await ud(rn.dirname(e),async()=>{await mt.writeFile(n,t),o=!0,await Gr(()=>mt.rename(n,e))}),tn.createdFilesCache.add(e)}catch(A){if(o)await Gr(()=>mt.unlink(n),3).catch(()=>{});throw A}}async function Oe(e,t){try{let r=await Gr(()=>mt.readFile(e,"utf-8"));return t.parse(JSON.parse(r,ia))}catch(r){if(r.code==="ENOENT")return null;throw r}}async function Ds(e){return await mt.readFile(e)}async function aa(e){let t=await mt.open(e,"r");try{let r=Buffer.allocUnsafe(1),{bytesRead:n}=await t.read(r,0,1,0);return n===0?void 0:r[0]}finally{await t.close()}}async function ze(e){try{await Gr(()=>mt.unlink(e))}catch(t){if(t.code!=="ENOENT")throw t}}async function we(e,t){let r=`${e}.tmp.${tn.ulid()}`,n=!1;try{return await ud(rn.dirname(e),async()=>{await mt.writeFile(r,t,{flag:"wx"}),n=!0;try{return await Gr(()=>mt.link(r,e)),!0}catch(o){if(o.code==="EEXIST")return!1;throw o}})}finally{if(n)await Gr(()=>mt.unlink(r),3).catch(()=>{})}}async function Ru(e,t){try{return await ud(rn.dirname(t),()=>Gr(()=>mt.link(e,t))),"linked"}catch(r){if(r.code==="EEXIST")return"exists";if(r.code==="ENOENT")return"missing";throw r}}async function mr(e){return NV(e,".json")}async function NV(e,t){try{return(await mt.readdir(e)).filter((n)=>n.endsWith(t)).map((n)=>n.slice(0,-t.length))}catch(r){if(r.code==="ENOENT")return[];throw r}}var sa="key:";function RV(e){if(!e)return null;if(e.startsWith(sa))return{timestamp:new Date(0),id:null,sortKey:e.slice(sa.length)};let t=e.split("|");return{timestamp:new Date(t[0]),id:t[1]||null,sortKey:null}}function kV(e,t,r){if(r)return`${sa}${r}`;return t?`${e.toISOString()}|${t}`:e.toISOString()}async function on(e){let{directory:t,schema:r,cachedItems:n,filePrefix:o,fileIdFilter:A,filter:s,sortOrder:i="desc",limit:a=20,cursor:c,getCreatedAt:u,getId:l,getSortKey:g,getSortKeyFromFileId:f}=e;if(o!==void 0)fe("filePrefix",o);let h=rn.resolve(t),d=await mr(h),I=o?d.filter((y)=>y.startsWith(o)):d,C=A?I.filter(A):I,p=RV(c),w=C;if(p?.sortKey&&f){let y=p.sortKey;w=C.filter((Y)=>{let O=f(Y);if(O===null)return!0;let M=O.localeCompare(y);return i==="desc"?M<0:M>0})}else if(p&&!p.sortKey)w=C.filter((y)=>{let Y=u(`${y}.json`);if(Y){let O=p.timestamp.getTime(),M=Y.getTime();if(p.id)return i==="desc"?M<=O:M>=O;else return i==="desc"?M<O:M>O}return!0});let x=32,b=[];for(let y=0;y<w.length;y+=x){let Y=w.slice(y,y+x),O=await Promise.all(Y.map(async(M)=>{let S=rn.join(h,`${M}.json`),E;try{let m=n?.get(S);E=m===void 0?await Oe(S,r):structuredClone(m)}catch(m){if(m instanceof Zn)return console.warn(`Skipping item ${M} due to malformed JSON: ${m.message}`),null;throw m}return E&&s&&!await s(E)?null:E}));for(let M of O){if(!M)continue;let S=g?.(M)??null;if(p?.sortKey){if(S){let E=S.localeCompare(p.sortKey);if(i==="desc"?E>=0:E<=0)continue}b.push(M);continue}if(p){let E=M.createdAt.getTime(),m=p.timestamp.getTime();if(i==="desc"){if(E>m)continue;if(E===m&&p.id&&l){if(l(M)>=p.id)continue}}else{if(E<m)continue;if(E===m&&p.id&&l){if(l(M)<=p.id)continue}}}b.push(M)}}b.sort((y,Y)=>{if(g){let E=g(y),m=g(Y);if(E!==null&&m!==null)return i==="asc"?E.localeCompare(m):m.localeCompare(E)}let O=y.createdAt.getTime(),M=Y.createdAt.getTime(),S=i==="asc"?O-M:M-O;if(S===0&&l){let E=l(y),m=l(Y);return i==="asc"?E.localeCompare(m):m.localeCompare(E)}return S});let _=b.length>a,V=_?b.slice(0,a):b,F=V.length>0?kV(V[V.length-1].createdAt,l?.(V[V.length-1]),g?.(V[V.length-1])):null;return{data:V,cursor:F,hasMore:_}}import{access as bV,constants as TV,mkdir as xV,readFile as yS,unlink as FV,writeFile as wS}from"node:fs/promises";import Ao from"node:path";import{fileURLToPath as UV}from"node:url";var MV="@workflow/world-local",Ss=Bt("@workflow/world-local//packageInfo",1,()=>({cached:null}));function _V(){if(typeof import.meta.url==="string"&&import.meta.url)return Ao.dirname(UV(import.meta.url));return null}async function ku(){return{name:"@workflow/world-local",version:"5.0.2"}}var DS="version.txt";class ca extends Error{dataDir;code;constructor(e,t,r){super(e);this.name="DataDirAccessError",this.dataDir=t,this.code=r}}class ld extends Error{oldVersion;newVersion;suggestedVersion;constructor(e,t,r,n){super(e);this.name="DataDirVersionError",this.oldVersion=t,this.newVersion=r,this.suggestedVersion=n}}function gd(e){let t=e.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/);if(!t)throw Error(`Invalid version string: "${e}"`);return{major:parseInt(t[1],10),minor:parseInt(t[2],10),patch:parseInt(t[3],10),prerelease:t[4],raw:e}}function oo(e){let t=`${e.major}.${e.minor}.${e.patch}`;return e.prerelease?`${t}-${e.prerelease}`:t}function LV(e){let t=e.trim(),r=t.lastIndexOf("@");if(r<=0)throw Error(`Invalid version file content: "${e}"`);let n=t.substring(0,r),o=t.substring(r+1);return{packageName:n,version:gd(o)}}function vV(e,t){return`${e}@${oo(t)}`}function OV(e,t){console.log(`[world-local] Upgrading from version ${oo(e)} to ${oo(t)}`)}async function SS(e){let t=Ao.resolve(e);try{await xV(t,{recursive:!0})}catch(n){let o=n;if(o.code!=="EEXIST")throw new ca(`Failed to create data directory "${t}": ${o.message}`,t,o.code)}try{await bV(t,TV.R_OK)}catch(n){let o=n;throw new ca(`Data directory "${t}" is not readable: ${o.message}`,t,o.code)}let r=Ao.join(t,`.workflow-write-test-${Date.now()}`);try{await wS(r,""),await FV(r).catch((n)=>{if(n.code!=="ENOENT")throw n})}catch(n){let o=n;throw new ca(`Data directory "${t}" is not writable: ${o.message}`,t,o.code)}}async function HV(e){let t=Ao.join(Ao.resolve(e),DS);try{let r=await yS(t,"utf-8");return LV(r)}catch(r){if(r.code==="ENOENT")return null;throw r}}async function mS(e,t){let r=Ao.join(Ao.resolve(e),DS),n=await ku(),o=vV(n.name,t);await wS(r,o)}function YV(e,t){if(t)return t;return oo(e)}async function bu(e){await SS(e);let t=await ku(),r=gd(t.version),n=await HV(e);if(n===null){await mS(e,r);return}let{version:o}=n;if(oo(o)===oo(r))return;try{OV(o,r),await mS(e,r)}catch(A){let s=A instanceof ld?A.suggestedVersion:void 0,i=YV(o,s);throw console.error(`[world-local] Failed to upgrade data directory from version ${oo(o)} to ${oo(r)}:`,A instanceof Error?A.message:A),console.error(`[world-local] Data is not compatible with the current version. Please downgrade to ${t.name}@${i}`),A}}var Ns=Bt("@workflow/world-local//telemetry",1,()=>({apiPromise:null,tracerPromise:null}));async function fd(){if(!Ns.apiPromise)Ns.apiPromise=import("@opentelemetry/api").catch(()=>null);return Ns.apiPromise}async function VV(){if(!Ns.tracerPromise)Ns.tracerPromise=fd().then((e)=>e?e.trace.getTracer("workflow"):null);return Ns.tracerPromise}async function NS(e,...t){let[r,n]=await Promise.all([VV(),fd()]),{fn:o,opts:A}=typeof t[0]==="function"?{fn:t[0],opts:{}}:{fn:t[1],opts:t[0]};if(!o)throw Error("Function to trace must be provided");if(!r||!n)return await o();return r.startActiveSpan(e,A,async(s)=>{try{let i=await o(s);return s.setStatus({code:n.SpanStatusCode.OK}),i}catch(i){throw s.setStatus({code:n.SpanStatusCode.ERROR,message:i.message}),i}finally{s.end()}})}async function RS(e){let t=await fd();if(!t)return;return t.SpanKind[e]}function Rs(...e){return(t)=>Object.fromEntries(e.map((r)=>[r,t]))}var kS=Rs("peer.service"),bS=Rs("rpc.system"),TS=Rs("rpc.service"),xS=Rs("rpc.method"),hd=Rs("workflow.run.id"),FS=Rs("step.id");var dd={peerService:"world-local",rpcSystem:"local",rpcService:"world-local"},PV={"world.runs.get":0,"world.runs.experimentalSetAttributes":0,"world.steps.get":0,"world.events.create":0,"world.events.get":0},GV=new Set(["world.steps.list","world.events.list","world.hooks.list"]);function $V(e){if(e.length>=2&&typeof e[1]==="object"&&e[1]!==null){let t=e[1];if(typeof t.eventType==="string")return t.eventType}return}function US(e,t){return typeof e[t]==="string"?e[t]:void 0}function JV(e){if(typeof e!=="object"||e===null)return;let t=e.runId;return typeof t==="string"?t:void 0}function WV(e){if(typeof e!=="object"||e===null)return;let t=e;if(typeof t.runId==="string")return t.runId;for(let r of["run","step","hook","wait"]){let n=t[r];if(typeof n==="object"&&n!==null){let o=n.runId;if(typeof o==="string")return o}}return}function zV(e,t,r){let n=`${e}.${t}`,o={},A=PV[n],s=A===void 0?GV.has(n)?JV(r[0]):void 0:US(r,A);if(s)Object.assign(o,hd(s));if(n==="world.steps.get"){let i=US(r,1);if(i)Object.assign(o,FS(i))}return o}function so(e,t){let r={};for(let n of Object.keys(t))if(typeof t[n]!=="function")r[n]=t[n];else{let o=t[n],A=String(n);r[n]=async(...s)=>{let i=`${e}.${A}`;if(e==="world.events"&&A==="create"){let a=$V(s);if(a)i=`${e}.${A} ${a}`}return NS(i,{kind:await RS("INTERNAL")},async(a)=>{a?.setAttributes({...kS(dd.peerService),...bS(dd.rpcSystem),...TS(dd.rpcService),...xS(i),...zV(e,A,s)});let c=await o(...s),u=WV(c);if(u)a?.setAttributes(hd(u));return c})}}return r}import{setTimeout as lg}from"node:timers/promises";St();import{Buffer as MS}from"node:buffer";import LS from"node:http";import vS from"node:https";import{Transform as qV}from"node:stream";import io from"node:zlib";function OS(e){let t={keepAlive:!0,keepAliveMsecs:e.keepAliveMs,maxSockets:e.maxSockets};return{http:new LS.Agent(t),https:new vS.Agent(t)}}function HS(e){e.http.destroy(),e.https.destroy()}var ZV=new Set([204,205,304]),jV="gzip, deflate, br",_S="ETIMEDOUT";function ua(e,t){return Object.assign(Error(e),{code:t})}function KV(e){let t={};return e?.forEach((r,n)=>{t[n]=r}),t}function XV(e){let t=new Headers;for(let[r,n]of Object.entries(e.headers)){if(n===void 0)continue;if(Array.isArray(n))for(let o of n)t.append(r,o);else t.append(r,n)}return t}var Ed={flush:io.constants.Z_SYNC_FLUSH,finishFlush:io.constants.Z_SYNC_FLUSH},eP={flush:io.constants.BROTLI_OPERATION_FLUSH,finishFlush:io.constants.BROTLI_OPERATION_FLUSH};class YS extends qV{inner;_transform(e,t,r){if(!this.inner){if(e.length===0){r();return}let n=(e[0]&15)===8?io.createInflate(Ed):io.createInflateRaw(Ed);n.on("data",(o)=>this.push(o)),n.on("end",()=>this.push(null)),n.on("error",(o)=>this.destroy(o)),this.inner=n}this.inner.write(e,r)}_final(e){if(this.inner)this.inner.end();else this.push(null);e()}_destroy(e,t){this.inner?.destroy(),t(e)}}function tP(e){let t=e.headers["content-encoding"]?.toLowerCase().trim();if(!t||t==="identity")return e;let r;if(t==="gzip"||t==="x-gzip")r=io.createGunzip(Ed);else if(t==="deflate")r=new YS;else if(t==="br")r=io.createBrotliDecompress(eP);else return e;return e.on("error",(n)=>r.destroy(n)),e.on("close",()=>{if(e.complete)return;r.destroy(ua("socket hang up","ECONNRESET"))}),r.on("close",()=>{if(!e.complete)e.destroy()}),e.pipe(r)}function rP(e,t){let r=!1,n=(o)=>{if(r)return;r=!0,t.done(),o()};return new ReadableStream({start(o){e.on("data",(A)=>{if(t.progress(),o.enqueue(new Uint8Array(A)),(o.desiredSize??1)<=0)e.pause()}),e.on("end",()=>n(()=>o.close())),e.on("error",(A)=>n(()=>o.error(t.failure(A)))),e.on("close",()=>n(()=>o.error(t.failure())))},pull(){e.resume()},cancel(o){n(()=>{}),e.destroy?.(o instanceof Error?o:void 0)}})}function VS(e,t={}){let{method:r="GET",headers:n,body:o,signal:A,agents:s,headersTimeoutMs:i,bodyTimeoutMs:a}=t,c=new URL(e),u=c.protocol==="https:";if(!u&&c.protocol!=="http:")return Promise.reject(TypeError(`node:http transport cannot request ${c.protocol}// URLs`));let l=KV(n),g=o==null?void 0:typeof o==="string"?MS.from(o,"utf8"):MS.from(o.buffer,o.byteOffset,o.byteLength);if(g)l["content-length"]=String(g.byteLength);if(!("accept-encoding"in l))l["accept-encoding"]=jV;return new Promise((f,h)=>{if(A?.aborted){h(A.reason);return}let d=!1,I,C,p,w=()=>{clearTimeout(I),clearTimeout(C),I=void 0,C=void 0},x=(u?vS:LS).request(c,{method:r,headers:l,agent:s?u?s.https:s.http:void 0}),b=()=>{if(A?.reason instanceof Error)p=A.reason;x.destroy(A?.reason)};A?.addEventListener("abort",b,{once:!0});let _=()=>{A?.removeEventListener("abort",b)},V=(F)=>{if(w(),_(),d)return;d=!0,h(F)};if(i)x.on("socket",()=>{I=setTimeout(()=>{x.destroy(ua(`no response headers within ${i}ms`,_S))},i)});if(x.on("error",V),x.on("response",(F)=>{clearTimeout(I),I=void 0;let y=F.statusCode??0;if(y<200||y>599){x.destroy(),V(ua(`origin returned an unusable status line (${y})`,"UNSUPPORTED_STATUS"));return}let Y=XV(F),O=F.statusMessage??"";if(ZV.has(y)||r.toUpperCase()==="HEAD"){F.resume(),w(),_(),d=!0,f(new Response(null,{status:y,statusText:O,headers:Y}));return}let S=()=>{if(!a)return;clearTimeout(C),C=setTimeout(()=>{p=ua(`no response body progress for ${a}ms`,_S),x.destroy(p)},a)};S();let E=tP(F);if(E!==F)Y.delete("content-encoding"),Y.delete("content-length");let m=rP(E,{progress:S,done:()=>{w(),_()},failure:(v)=>p??v??ua("socket hang up","ECONNRESET")});d=!0,f(new Response(m,{status:y,statusText:O,headers:Y}))}),g)x.write(g);x.end()})}Is();var mL=Wg(WS(),1);var __filename="/home/runner/work/fx/fx/sdk/durable/node_modules/undici/index.js",zse=Co(),h3=da(),qse=QA(),Zse=Eb(),jse=Bb(),d3=yA(),Kse=tI(),Xse=XE(),eie=gT(),tie=BT(),rie=DT(),E3=se(),EL=ae(),{InvalidArgumentError:ug}=E3,Ii=fx(),nie=aA(),oie=RI(),{MockCallHistory:Aie,MockCallHistoryLog:sie}=TI(),iie=vI(),aie=UI(),cie=QF(),uie=fI(),lie=dl(),{getGlobalDispatcher:I3,setGlobalDispatcher:gie}=Rl(),fie=Xs(),hie=$I();Object.assign(h3.prototype,Ii);var $p=d3;var B3={redirect:TF(),responseError:UF(),retry:_F(),dump:HF(),dns:WF(),cache:RU(),decompress:_U(),deduplicate:YU()},IL={MemoryCacheStore:KI()};var p3=PU();IL.SqliteCacheStore=p3;function mc(e){return(t,r,n)=>{if(typeof r==="function")n=r,r=null;if(!t||typeof t!=="string"&&typeof t!=="object"&&!(t instanceof URL))throw new ug("invalid url");if(r!=null&&typeof r!=="object")throw new ug("invalid opts");if(r&&r.path!=null){if(typeof r.path!=="string")throw new ug("invalid opts.path");let s=r.path;if(!r.path.startsWith("/"))s=`/${s}`;t=new URL(EL.parseOrigin(t).origin+s)}else{if(!r)r=typeof t==="object"?t:{};t=EL.parseURL(t)}let{agent:o,dispatcher:A=I3()}=r;if(o)throw new ug("unsupported opts.agent. Did you mean opts.client?");return e.call(A,{...r,origin:t.origin,path:t.search?`${t.pathname}${t.search}`:t.pathname,method:r.method||(r.body?"PUT":"GET")},n)}}var die=fc().fetch;var m3=OA().Headers,y3=uc().Response,w3=Ai().Request,D3=Ju().FormData;var{setGlobalOrigin:Eie,getGlobalOrigin:Iie}=Xd();var{CacheStorage:C3}=XM(),{kConstruct:Q3}=Ue();var S3=new C3(Q3);var{deleteCookie:pie,getCookies:Cie,getSetCookies:Qie,setCookie:Bie,parseCookie:mie}=l_();var{parseMIMEType:yie,serializeAMimeType:wie}=wr();var{CloseEvent:Die,ErrorEvent:Sie,MessageEvent:Nie}=eg(),{WebSocket:Rie,ping:kie}=z_();var N3=rL().WebSocketStream,R3=Hp().WebSocketError,k3=mc(Ii.request),b3=mc(Ii.stream),T3=mc(Ii.pipeline),x3=mc(Ii.connect),F3=mc(Ii.upgrade);var{EventSource:bie}=dL();Lh();class Jp{contentType="application/json";serialize(e){return Buffer.from(JSON.stringify(e,vt))}async deserialize(e){let t=[],r=e.getReader();while(!0){let{done:o,value:A}=await r.read();if(o)break;if(A)t.push(A)}let n=Buffer.concat(t).toString();return JSON.parse(n,ia)}}var U3=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_MAX_VISIBILITY??"0",10)||1/0,pL=2147483647,M3=1000,CL=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_CONCURRENCY??"0",10)||M3,_3=0,L3=0;function QL(e,t){let r=process.env[e];if(r===void 0||r==="")return t;let n=Number.parseInt(r,10);return Number.isFinite(n)&&n>=0?n:t}function v3(){return{bodyTimeout:QL("WORKFLOW_LOCAL_BODY_TIMEOUT_MS",L3),connections:1000,headersTimeout:QL("WORKFLOW_LOCAL_HEADERS_TIMEOUT_MS",_3),keepAliveTimeout:30000}}var yL="Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer",O3="https://workflow-sdk.dev/docs/getting-started/next#configure-proxy-handler";function BL(e){let t=e,r=new Set;while(t&&typeof t==="object"&&!r.has(t)){if(r.add(t),"message"in t&&typeof t.message==="string"&&t.message.includes(yL))return!0;t="cause"in t?t.cause:void 0}return!1}function wL(e){let t=v3(),r=Ph()?OS({maxSockets:t.connections,keepAliveMs:t.keepAliveTimeout}):void 0,n=r?void 0:new $p(t),o=new Jp,A=eo(),s=new mL.Sema(CL),i=new AbortController,a=i.signal,c=new Map,u=new Map,l=async(d,I,C)=>{let p=[];if(C?.idempotencyKey){let y=c.get(C.idempotencyKey);if(y)return{messageId:y}}let w=o.serialize(I),{prefix:x}=Yh(d),b=Iu.parse(`msg_${A()}`),_=I,V=_.runId??void 0,F=_.stepId??void 0;if(C?.idempotencyKey){let y=C.idempotencyKey;c.set(y,b),p.push(()=>{c.delete(y)})}return(async()=>{if(C?.delaySeconds&&C.delaySeconds>0){let M=Math.min(C.delaySeconds*1000,pL);await lg(M,void 0,{signal:a})}if(!s.tryAcquire())ps(`[world-local]: concurrency limit (${CL}) reached, waiting for queue to free up`),await s.acquire();let Y=256,O=0;try{for(let M=0;M<Y;M++){let S={...C?.headers,"content-type":"application/json","x-vqs-queue-name":d,"x-vqs-message-id":b,"x-vqs-message-attempt":String(O+1)},E=u.get(x),m,v;try{if(E){let N=new Request(yu(pS(e),{type:"flow"}),{method:"POST",headers:S,body:w});m=await E(N)}else{let N=await CS(e),Ae=yu(N,{type:"flow"});m=r?await VS(Ae,{method:"POST",headers:new Headers(S),body:w,agents:r,signal:a,headersTimeoutMs:t.headersTimeout,bodyTimeoutMs:t.bodyTimeout}):await fetch(Ae,{method:"POST",duplex:"half",dispatcher:n,headers:S,body:w,signal:a})}O++,v=await m.text()}catch(N){let Ae=N?.name;if(a.aborted||Ae==="AbortError"||Ae==="ResponseAborted")return;if(BL(N))throw N;console.error(`[world-local] Queue delivery failed at the transport (loop ${M+1}), retrying`,{queueName:d,messageId:b,...V&&{runId:V},...F&&{stepId:F},error:String(N)}),await lg(5000,void 0,{signal:a});continue}if(m.ok){try{let N=Number(JSON.parse(v).timeoutSeconds);if(Number.isFinite(N)&&N>=0){if(N>0){let Ae=Math.min(N*1000,pL);await lg(Ae,void 0,{signal:a})}continue}}catch{}return}console.error(`[world-local] Queue message failed (attempt ${O}, HTTP ${m.status})`,{queueName:d,messageId:b,...V&&{runId:V},...F&&{stepId:F},handlerError:v}),await lg(5000,void 0,{signal:a})}console.error(`[world-local] Queue message exhausted safety limit (${Y} attempts)`,{queueName:d,messageId:b,...V&&{runId:V},...F&&{stepId:F}})}finally{s.release()}})().catch((y)=>{if(!(y?.name==="AbortError"||y?.name==="ResponseAborted"))if(BL(y))console.error(`[local world] Queue operation failed: detected "${yL}". This usually means a Next.js proxy/middleware consumed Workflow's internal request before the executor could read it. Exclude \`/.well-known/workflow/*\` from your matcher. See ${O3}`,{queueName:d,messageId:b,...V&&{runId:V},...F&&{stepId:F},originalError:y});else console.error("[local world] Queue operation failed:",y)}).finally(()=>{for(let y of p)y()}),{messageId:b}},g=H(W({"x-vqs-queue-name":vh,"x-vqs-message-id":Iu,"x-vqs-message-attempt":he.number()}));return{queue:l,createQueueHandler:(d,I)=>async(C)=>{let p=g.safeParse(Object.fromEntries(C.headers));if(!p.success||!C.body)return Response.json({error:!C.body?"Missing request body":"Missing required headers"},{status:400});let w=p.data["x-vqs-queue-name"],x=p.data["x-vqs-message-id"],b=p.data["x-vqs-message-attempt"];if(!w.startsWith(d))return Response.json({error:"Unhandled queue"},{status:400});let _=await new Jp().deserialize(C.body);try{let V=await I(_,{attempt:b,queueName:w,messageId:x});if(typeof _==="object"&&_!==null&&"invoke"in _&&_.invoke===!0)return Response.json({result:V});let F=null;if(typeof V==="object"&&V!==null&&"timeoutSeconds"in V&&typeof V.timeoutSeconds==="number")F=Math.min(V.timeoutSeconds,U3);if(F!=null)return Response.json({timeoutSeconds:F});return Response.json({ok:!0})}catch(V){return Response.json(String(V),{status:500})}},getDeploymentId:async()=>`dpl_local@${(await ku()).version}`,registerHandler(d,I){u.set(d,I)},async close(){if(a.aborted)return;if(i.abort(),r)HS(r);await n?.close()}}}import{createHash as uC}from"node:crypto";import vo from"node:fs/promises";import XA from"node:path";St();Is();ut();var jL=Wg(ZL(),1);function Rc(e){return uC("sha256").update(e).digest("hex")}function KA(e,t,r){let n=r?`${t}.disposed.${r}`:`${t}.disposed`;return Pe(e,".locks","hooks",n)}async function kc(e,t,r){let n=[KA(e,t)];if(r)n.push(KA(e,t,r));for(let o of n){let A;try{A=await vo.readFile(o,"utf8")}catch{continue}if(A.trim()==="")return{committed:!0};try{let i=JSON.parse(A).forceClaimedBy;if(i&&typeof i.runId==="string"&&typeof i.hookId==="string")return{committed:!0,forceClaimedBy:{runId:i.runId,hookId:i.hookId}}}catch{}return{committed:!0}}return{committed:!1}}async function bc(e,t,r){let n=[KA(e,t)];if(r)n.push(KA(e,t,r));for(let o of n)try{return await vo.access(o),!0}catch{}return!1}function mi(e,t,r){let n=r?`${t}.terminal.${r}`:`${t}.terminal`;return Pe(e,".locks","runs",n)}async function yi(e,t,r){let n=[mi(e,t)];if(r)n.push(mi(e,t,r));for(let o of n)try{return await vo.access(o),!0}catch(A){if(A.code!=="ENOENT")throw A}return!1}function cC(e,t,r){let n=r?`${t}.pending.${r}`:`${t}.pending`;return Pe(e,".locks","runs",n)}function yg(e,t,r,n){return XA.join(cC(e,t,n),`${r}.json`)}async function wg(e,t,r){let n=[cC(e,t)];if(r)n.push(cC(e,t,r));for(let o of n){let A;try{A=await vo.readdir(o)}catch(s){if(s.code==="ENOENT")continue;throw s}for(let s of A)try{await Gr(()=>vo.unlink(XA.join(o,s)))}catch(i){if(i.code!=="ENOENT")throw i}await vo.rmdir(o).catch(()=>{})}}async function KL(e,t,r){let n=await Dg(e,t,r),o=Date.now();if(n.maxId)try{let A=Bu(n.maxId.replace(/^evnt_/,""));if(o<=A)o=A+1}catch{}return{eventId:`evnt_${ts(o)}`,createdAt:new Date(o)}}async function Dg(e,t,r){let n=[];try{n=await vo.readdir(XA.join(e,"events"))}catch(u){if(u.code!=="ENOENT")throw u}let o=`${t}-`,A=[],s=null,i=0,a=!1,c=0;for(let u of n){if(!u.startsWith(o)||!u.endsWith(".json"))continue;let l=u.slice(0,-5);if(!oA(l)&&!(r&&ws(l,r)))continue;let g=nn(l).slice(o.length);if(c+=1,A.push(g),!s||g>s)s=g;let f=Kn(g);if(f!==null){if(a=!0,f>i)i=f}}return{maxId:s,usesSlots:a,maxSlot:i,count:c,ids:A}}function es(e,t){return XA.join(e,"hooks","tokens",`${Rc(t)}.json`)}var S6=H(W({hookId:B().optional(),runId:B(),eventId:B().optional(),tokenRetentionUntil:he.date().optional(),claimedFrom:W({runId:B(),hookId:B(),workflowName:B().optional(),deploymentId:B().optional(),runSpecVersion:oe().optional()}).optional()}));async function wi(e){try{return await Oe(e,S6)}catch(t){if(t instanceof SyntaxError||t instanceof Zn)return null;throw t}}async function lC(e,t,r){let n=es(e,t);await vo.mkdir(XA.dirname(n),{recursive:!0});let o=new AbortController,A;try{A=await jL.lock(n,{realpath:!1,stale:30000,update:1000,retries:{retries:350,factor:1,minTimeout:100,maxTimeout:100},onCompromised(i){o.abort(new st("Hook token claim lock was compromised",{cause:i}))}})}catch(i){throw new st("Could not acquire Hook token claim lock",{cause:i})}let s;try{s=await r(o.signal),o.signal.throwIfAborted()}catch(i){if(!o.signal.aborted)await A().catch(()=>{});throw i}try{await A()}catch(i){throw new st("Could not release Hook token claim lock",{cause:i})}return s}function Sg(e,t,r){let n=uC("sha256").update(`${t}\x00${r}`).digest("hex");return XA.join(e,"hooks","resumes",`${n}.json`)}async function Ng(e,t,r,n){await lC(e,t,async(o)=>{let A=es(e,t),s=await wi(A);if(!s)return;if(s.runId===r&&s.hookId===n)o.throwIfAborted(),await ze(A)})}function Oo(e,t,r,n){let o=uC("sha256").update(`${t}\x00${r}\x00${n}`).digest("hex");return XA.join(e,"hooks","tokens",`${o}.recovery.json`)}var N6=Bt("@workflow/world-local//storageMonotonicUlid",1,()=>({next:eo(()=>Math.random())})),ts=(e)=>N6.next(e),Ho=(e)=>{let t=new RegExp(`^${e}_`,"g");return(r)=>{let n=nn(r.replace(/\.json$/,""))+".json",o=n.indexOf("-");if(o===-1){let i=n.replace(/\.json$/,"").replace(t,"");return to(i)}if(e==="step")return null;let s=n.substring(o+1).replace(/\.json$/,"").replace(t,"");return to(s)}};import R6 from"node:fs/promises";import Zr from"node:path";St();ut();var k6=H(W({runId:B()})),b6=H(W({hookId:B(),tag:B().optional()})),T6=".hook-index-complete";function ev(e,t){return Pe(e,"hooks","token-index",Rc(t))}function tv(e,t){return fe("hookId",t),Pe(e,"hooks","id-index",t)}function rv(e){return Pe(e,"hooks","by-run")}function gC(e){let t=nn(e);return t===e?void 0:e.slice(t.length+1)}function x6(e,t){return t?oA(e)||ws(e,t):oA(e)}async function nv(e){try{return await Oe(e,Zi)}catch(t){if(t instanceof SyntaxError||t instanceof Zn)return null;throw t}}async function kg(e,t,r,n,o,A){if(fe("runId",r),fe("eventId",o),A!==void 0)fe("tag",A);let s=A?`${r}-${o}.${A}.json`:`${r}-${o}.json`,i=JSON.stringify({runId:r});await Promise.all([we(Zr.join(ev(e,t),s),i),we(Zr.join(tv(e,n),s),i)])}function fC(e,t,r,n){return ge(e,"hooks/by-run",`${t}-${r}`,n)}async function rs(e,t,r,n){await we(fC(e,t,r,n),JSON.stringify(n?{hookId:r,tag:n}:{hookId:r}))}async function hC(e,t,r,n){if(await ze(fC(e,t,r,n)),n)await ze(fC(e,t,r))}async function bg(e,t){fe("runId",t);let r=rv(e),n=`${t}-`,o=[];for(let A of await mr(r)){if(!A.startsWith(n))continue;let s=null;try{s=await Oe(Zr.join(r,`${A}.json`),b6)}catch(i){if(!(i instanceof SyntaxError||i instanceof Zn))throw i}o.push({fileId:A,hookId:s?.hookId??null,tag:s?.tag})}return o}async function ov(e,t){await ze(Zr.join(rv(e),`${t}.json`))}var Rg=Bt("@workflow/world-local//hookIndexEnsureCache",1,()=>({ensuredBasedirs:new Map}));function Av(){Rg.ensuredBasedirs.clear()}async function Tc(e){let t=Zr.resolve(e),r=Rg.ensuredBasedirs.get(t);if(!r)r=F6(t).catch((n)=>{throw Rg.ensuredBasedirs.delete(t),n}),Rg.ensuredBasedirs.set(t,r);return r}async function XL(e,t,r){for(let n=0;n<e.length;n+=t)await Promise.all(e.slice(n,n+t).map(r))}async function F6(e){let t=Zr.join(e,"hooks",T6);try{await R6.access(t);return}catch{}let r=Zr.join(e,"events");await XL(await mr(r),32,async(o)=>{let A=await nv(Zr.join(r,`${o}.json`));if(!A||A.eventType!=="hook_created")return;if(typeof A.correlationId!=="string")return;let s=A.eventData?.token;if(typeof s!=="string")return;try{await kg(e,s,A.runId,A.correlationId,A.eventId,gC(o))}catch{}});let n=Zr.join(e,"hooks");await XL(await mr(n),32,async(o)=>{let A=null;try{A=await Oe(Zr.join(n,`${o}.json`),_t)}catch(s){if(!(s instanceof SyntaxError||s instanceof Zn))throw s}if(!A)return;try{await rs(e,A.runId,A.hookId,gC(o))}catch{}}),await we(t,"")}async function sv(e,t,r,n){await Tc(e);let o;try{o=t.kind==="token"?ev(e,t.token):tv(e,t.hookId)}catch{return null}let A=(i,a)=>{let c=nn(i);return c.startsWith(`${a}-`)?c.slice(a.length+1):c},s=(await mr(o)).filter((i)=>x6(i,n)).sort((i,a)=>nn(a).localeCompare(nn(i)));for(let i of s){let a=null;try{a=await Oe(Zr.join(o,`${i}.json`),k6)}catch(g){if(!(g instanceof SyntaxError||g instanceof Zn))throw g}if(!a)continue;let c=A(i,a.runId),u;try{u=ge(e,"events",`${a.runId}-${c}`,gC(i))}catch{continue}let l=await nv(u);if(!l)continue;if(l.eventType!=="hook_created")continue;if(typeof l.correlationId!=="string")continue;if(!await r(l))continue;return l}return null}import DC from"node:assert";import Dv from"node:fs/promises";import Mc from"node:path";St();ut();St();function xc(e,t){if(t==="none"){let{dynamicWorkflowCode:r,...n}=e;return{...n,input:void 0,output:void 0}}return e}function iv(e,t){if(t==="none")return{...e,input:void 0,output:void 0};return e}function dC(e,t){if(t==="none"){let{metadata:r,...n}=e;return n}return e}import EC from"node:path";St();ut();function U6(e){if(e.eventType!=="hook_created")return;let t=e.eventData.token;return typeof t==="string"?t:void 0}function IC(e){let{token:t,metadata:r,isWebhook:n,isSystem:o,tokenRetentionUntil:A,forceClaimedFrom:s}=e.eventData;return{runId:e.runId,hookId:e.correlationId,token:t,...s!==void 0&&{claimedFrom:s},metadata:r,ownerId:"local-owner",projectId:"local-project",environment:"local",createdAt:e.createdAt,specVersion:e.specVersion,isWebhook:n??!0,isSystem:o??!1,tokenRetentionUntil:A}}function av(e,t){return e.eventType==="hook_created"&&typeof e.correlationId==="string"&&t(e)}async function cv(e,t,r){let n=await ye(e,"runs",t,Mt,r);return n?Ut(n.status):!1}async function uv(e,t,r,n){let o=async(s)=>{if(await cv(e,s.runId,n)){let i=s.eventData.tokenRetentionUntil;if(!i||i.getTime()<=Date.now())return!1}return!await bc(e,s.correlationId,n)},A=await sv(e,t,(s)=>av(s,r)&&o(s),n);return A&&av(A,r)?A:null}async function lv(e,t,r){let n=IC(t),o=es(e,n.token);return await we(o,JSON.stringify({token:n.token,hookId:n.hookId,runId:n.runId,eventId:t.eventId,tokenRetentionUntil:t.eventData.tokenRetentionUntil,...n.claimedFrom&&{claimedFrom:n.claimedFrom}})),await rs(e,n.runId,n.hookId,r),await we(ge(e,"hooks",n.hookId,r),JSON.stringify(n,vt,2)),n}async function pC(e,t,r){let n=await uv(e,{kind:"token",token:t},(o)=>U6(o)===t,r);return n?lv(e,n,r):null}async function M6(e,t,r){let n=await uv(e,{kind:"id",hookId:t},(o)=>o.correlationId===t,r);return n?lv(e,n,r):null}function gv(e,t){async function r(a){if(await bc(e,a.hookId,t))return!1;if(a.tokenRetentionUntil&&a.tokenRetentionUntil.getTime()>Date.now())return!0;return!await cv(e,a.runId,t)}async function n(a){let c=await kc(e,a.hookId,t);return c.committed&&c.forceClaimedBy!==void 0}async function o(a){let c=await wi(es(e,a));if(c?.hookId)try{let f=await ye(e,"hooks",c.hookId,_t,t);if(f?.token===a){if(await r(f))return{...f,isWebhook:f.isWebhook??!0};if(!await n(f))throw new Vr(a)}else if(f)return null}catch(f){if(!ys.is(f))throw f;return null}let u=EC.join(e,"hooks"),l=await mr(u),g=!1;for(let f of l){let h=EC.join(u,`${f}.json`),d=await Oe(h,_t);if(d?.token===a){if(await r(d))return{...d,isWebhook:d.isWebhook??!0};if(await n(d)){g=!0;continue}throw new Vr(a)}}if(g)throw new Vr(a);return null}async function A(a,c){fe("hookId",a);let u=await ye(e,"hooks",a,_t,t);if(u&&!await r(u))throw new Vr(a);let l=u??await M6(e,a,t);if(!l)throw new Vr(a);let g=c?.resolveData||gt;return dC({...l,isWebhook:l.isWebhook??!0},g)}async function s(a){let c=await o(a)??await pC(e,a,t);if(!c)throw new Vr(a);return c}async function i(a){let c=EC.join(e,"hooks"),u=a.resolveData||gt,l=await on({directory:c,schema:_t,sortOrder:a.pagination?.sortOrder??"asc",limit:a.pagination?.limit,cursor:a.pagination?.cursor,filePrefix:void 0,filter:async(g)=>{if(a.runId&&g.runId!==a.runId)return!1;return r(g)},getCreatedAt:()=>null,getId:(g)=>g.hookId});return{...l,data:l.data.map((g)=>dC(g,u))}}return{get:A,getByToken:s,list:i}}async function Di(e,t){await Tc(e);for(let r of await bg(e,t)){if(r.hookId){let n=null,o=null;try{o=ge(e,"hooks",r.hookId,r.tag),n=await Oe(o,_t)}catch(A){if(!ys.is(A)&&!(A instanceof SyntaxError||A instanceof Zn))throw A}if(n&&o&&n.runId===t){if(n.tokenRetentionUntil&&n.tokenRetentionUntil.getTime()>Date.now())continue;await Ng(e,n.token,n.runId,n.hookId),await ze(Oo(e,n.token,n.runId,n.hookId)),await ze(o)}}await ov(e,r.fileId)}}import V6 from"node:fs/promises";St();St();ut();import wC from"node:path";import{EventEmitter as _6}from"node:events";import hv from"node:fs/promises";import pt from"node:path";Is();ut();var L6=Bt("@workflow/world-local//streamerMonotonicUlid",1,()=>({next:eo(()=>Math.random())})),CC=(e)=>L6.next(e),yC=H(W({streams:Sn(B())})),dv=1;function Fc(e){return e===dv}function xg(e){let t=Buffer.from([e.eof?dv:0]);return Buffer.concat([t,e.chunk])}function v6(e){return Fc(e[0])}function QC(e){let t=v6(e),r=Buffer.from(e.subarray(1));return{eof:t,chunk:r}}async function Ev(e){try{return await hv.readdir(e)}catch(t){if(t.code==="ENOENT")return[];throw t}}function BC(e,t,r,n=r,o=()=>!0){for(let A of t){if(!A.endsWith(r))continue;let s=A.slice(0,-r.length);if(o(s))e.set(s,n)}}function Uc(e,t){return fe("streamName",t),pt.join(e,t)}async function Tg(e,t,r){let n=Uc(e,t),o=await Ev(n),A=new Map;if(BC(A,o,".json"),BC(A,o,".bin",".bin",r?(i)=>!i.endsWith(`.${r}`):void 0),r){let i=`.${r}.bin`;BC(A,o,i)}return{files:[...A.keys()].sort(),extMap:A,dir:n}}var fv=`chnk_${"0".repeat(26)}`;async function Iv(e,t,r){let n=pt.join(e,"streams","chunks"),o=r?`.${r}`:"",A;try{fe("runId",t),A=(await ye(e,"streams/runs",t,yC,r))?.streams??[]}catch(s){mC(`streams of ${t}`,s);return}for(let s of A)try{let i=Uc(n,s);await Br(pt.join(i,`${fv}${o}.bin`),xg({chunk:Buffer.from([]),eof:!0}),{overwrite:!0});for(let a of await Ev(i)){if(a.startsWith(fv))continue;if(!a.endsWith(".bin")&&!a.endsWith(".json"))continue;await Gr(()=>hv.unlink(pt.join(i,a))).catch((c)=>{if(c.code!=="ENOENT")mC(a,c)})}}catch(i){mC(s,i)}}function mC(e,t){console.warn(`[world-local] Failed to purge stream data for ${e}:`,t instanceof Error?t.message:t)}function pv(e,t){let r=t?`.${t}`:"",n=new _6,o=new Set;async function A(i,a){fe("runId",i),fe("streamName",a);let c=`${i}:${a}`;if(o.has(c))return;let u=ge(e,"streams/runs",i,t),g=(await ye(e,"streams/runs",i,yC,t))?.streams??[];if(!g.includes(a))g.push(a),await We(u,{streams:g},{overwrite:!0});o.add(c)}function s(i){if(typeof i==="string")return Buffer.from(new TextEncoder().encode(i));else if(i instanceof Buffer)return i;else return Buffer.from(i)}return{streams:{async write(i,a,c){let u=`chnk_${CC()}`,l=await i;await A(l,a);let g=s(c),f=xg({chunk:g,eof:!1}),h=pt.join(Uc(pt.join(e,"streams","chunks"),a),`${u}${r}.bin`);await Br(h,f);let d=Uint8Array.from(g);n.emit(`chunk:${a}`,{streamName:a,chunkData:d,chunkId:u})},async writeMulti(i,a,c){if(c.length===0)return;let u=c.map(()=>`chnk_${CC()}`),l=await i;await A(l,a);let f=c.map((h)=>s(h)).map(async(h,d)=>{let I=u[d],C=xg({chunk:h,eof:!1}),p=pt.join(Uc(pt.join(e,"streams","chunks"),a),`${I}${r}.bin`);return await Br(p,C),{chunkId:I,chunkData:Uint8Array.from(h)}});for(let h of f){let{chunkId:d,chunkData:I}=await h;n.emit(`chunk:${a}`,{streamName:a,chunkData:I,chunkId:d})}},async close(i,a){let c=`chnk_${CC()}`,u=await i;await A(u,a);let l=pt.join(Uc(pt.join(e,"streams","chunks"),a),`${c}${r}.bin`);await Br(l,xg({chunk:Buffer.from([]),eof:!0})),n.emit(`close:${a}`,{streamName:a})},async list(i){return fe("runId",i),(await ye(e,"streams/runs",i,yC,t))?.streams??[]},async getChunks(i,a,c){let u=c?.limit??100,l=pt.join(e,"streams","chunks"),{files:g,extMap:f,dir:h}=await Tg(l,a,t),d=0;if(c?.cursor)try{d=JSON.parse(Buffer.from(c.cursor,"base64").toString("utf-8")).i}catch{d=0}let I=!1,C=[],p=0;for(let _ of g){let V=f.get(_)??".bin",F=pt.join(h,`${_}${V}`);if(p<d){if(Fc(await aa(F))){I=!0;break}p++;continue}if(C.length>=u){if(Fc(await aa(F)))I=!0;else p++;break}let y=QC(await Ds(F));if(y.eof){I=!0;break}C.push({index:p,data:Uint8Array.from(y.chunk)}),p++}let w=!I&&p>d+C.length,x=d+C.length,b=w?Buffer.from(JSON.stringify({i:x})).toString("base64"):null;return{data:C,cursor:b,hasMore:w,done:I}},async getInfo(i,a){let c=pt.join(e,"streams","chunks"),{files:u,extMap:l,dir:g}=await Tg(c,a,t),f=!1,h=0;for(let d of u){let I=l.get(d)??".bin";if(Fc(await aa(pt.join(g,`${d}${I}`)))){f=!0;break}h++}return{tailIndex:h-1,done:f}},async get(i,a,c=0){let u=pt.join(e,"streams","chunks"),l=()=>{},g=null,f=!1;return new ReadableStream({async start(h){let d=new Set,I=[],C=!0,p=!1,w=(M)=>{if(M.chunkData.byteLength===0){d.add(M.chunkId);return}if(C)d.add(M.chunkId),I.push({chunkId:M.chunkId,chunkData:Uint8Array.from(M.chunkData)});else if(!d.has(M.chunkId))d.add(M.chunkId),h.enqueue(Uint8Array.from(M.chunkData))},x=()=>{if(C){p=!0;return}f=!0,l();try{h.close()}catch{}};l=()=>{if(n.off(`chunk:${a}`,w),n.off(`close:${a}`,x),g)clearInterval(g),g=null},n.on(`chunk:${a}`,w),n.on(`close:${a}`,x);let{files:b,extMap:_,dir:V}=await Tg(u,a,t),F=b.length;if(typeof c==="number"&&c<0&&b.length>0){let M=b[b.length-1],S=_.get(M)??".bin";if(Fc(await aa(pt.join(V,`${M}${S}`))))F--}let y=typeof c==="number"&&c<0?Math.max(0,F+c):c,Y=!1;for(let M=y;M<b.length;M++){let S=b[M],E=S;if(d.has(E))continue;let m=_.get(S)??".bin",v=QC(await Ds(pt.join(V,`${S}${m}`)));if(v?.eof===!0){Y=!0;break}if(d.add(E),v.chunk.byteLength)h.enqueue(Uint8Array.from(v.chunk))}C=!1,I.sort((M,S)=>M.chunkId.localeCompare(S.chunkId));for(let M of I)h.enqueue(Uint8Array.from(M.chunkData));if(Y){f=!0,l();try{h.close()}catch{}return}if(p){f=!0,l();try{h.close()}catch{}return}for(let M=0;M<y&&M<b.length;M++)d.add(b[M]);if(f){l();return}let O=!1;g=setInterval(async()=>{if(O)return;O=!0;try{let{files:M,extMap:S}=await Tg(u,a,t);for(let E of M){let m=E;if(d.has(m))continue;d.add(m);let v=S.get(E)??".bin",N=QC(await Ds(pt.join(V,`${E}${v}`)));if(N?.eof===!0){f=!0,l();try{h.close()}catch{}return}if(f)return;if(N.chunk.byteLength)h.enqueue(Uint8Array.from(N.chunk))}}catch(M){if(!(M instanceof Error&&("code"in M)))console.error("[world-local] Unexpected polling error:",M)}finally{O=!1}},100)},cancel(){f=!0,l()}})}}}}function Ug(e){let t=mh(e);if(t.unsupported)console.warn(`[world-local] Ignoring unrecognized ${Bh} value ${JSON.stringify(t.raw)}; keeping the run's data.`);return t.mode==="none"}function Mg(e,t){return{...e,input:void 0,output:void 0,error:void 0,dynamicWorkflowCode:void 0,expiredAt:t}}async function _g(e,t,r){await Promise.all([Cv(wC.join(e,"steps"),t,(n)=>{n.input=void 0,n.output=void 0,n.error=void 0}),Cv(wC.join(e,"events"),t,(n)=>{let o=n.eventData;if(!o||typeof o!=="object")return;for(let A of hs(String(n.eventType)))delete o[A];if(n.eventType==="run_created"||n.eventType==="run_started")delete o.dynamicWorkflowCode,delete o.dynamicWorkflowCodeRef}),O6(e,t),Iv(e,t,r)])}var Qv=pr(B(),ls()),Ur=Rw((e)=>{if(e&&typeof e==="object"&&"eventType"in e&&"eventData"in e){let t=e.eventData;if(t&&typeof t==="object"){for(let r of hs(String(e.eventType)))if(!(r in t))t[r]=void 0}}return e},Zi);async function Cv(e,t,r){let n;try{n=await mr(e)}catch(o){Fg(e,o);return}for(let o of n){if(!o.startsWith(`${t}-`))continue;let A=wC.join(e,`${o}.json`);try{let s=await Oe(A,Qv);if(!s)continue;r(s),await We(A,s,{overwrite:!0})}catch(s){Fg(A,s)}}}async function O6(e,t){let r;try{await Tc(e),r=await bg(e,t)}catch(n){Fg(`hooks of ${t}`,n);return}for(let n of r){if(!n.hookId)continue;try{let o=ge(e,"hooks",n.hookId,n.tag),A=await Oe(o,Qv);if(!A||A.runId!==t)continue;A.metadata=void 0,await We(o,A,{overwrite:!0})}catch(o){Fg(n.hookId,o)}}}function Fg(e,t){console.warn(`[world-local] Failed to purge user data for ${e}:`,t instanceof Error?t.message:t)}St();import{EventEmitter as H6}from"node:events";var Lg=new H6;Lg.setMaxListeners(0);var Y6=100;function Bv(){return du("WORKFLOW_LOCAL_RUN_STATUS_POLL_INTERVAL_MS",Y6,{integer:!0,min:1})}function vg(e){Lg.emit(`run:${e}`)}function mv(e,t,r){if(t<=0||r?.aborted)return Promise.resolve();return new Promise((n)=>{let o=`run:${e}`,A=!1,s=()=>{if(A)return;A=!0,clearTimeout(i),Lg.off(o,s),r?.removeEventListener("abort",s),n()},i=setTimeout(s,t);Lg.once(o,s),r?.addEventListener("abort",s,{once:!0})})}async function P6(e,t,r,n,o,A){if(Ut(A.status)||await yi(e,t))throw new Pr(`Workflow run "${t}" is already in a terminal state`);let s=yg(e,t,r);await we(s,n);try{if(await yi(e,t))throw new Pr(`Workflow run "${t}" is already in a terminal state`);if(await Ru(s,o)!=="linked")throw new Pr(`Workflow run "${t}" is already in a terminal state`)}finally{await V6.unlink(s).catch(()=>{})}}async function yv(e,t,r,n,o){fe("runId",t);let A=o?.resolveData??gt;switch(r.eventType){case"run_cancelled":{await we(mi(e,t),""),await wg(e,t);let s=new Date,i={runId:n.runId,deploymentId:n.deploymentId,workflowName:n.workflowName,specVersion:n.specVersion,executionContext:n.executionContext,input:n.input,createdAt:n.createdAt,expiredAt:n.expiredAt,startedAt:n.startedAt,status:"cancelled",output:void 0,error:void 0,completedAt:s,updatedAt:s,attributes:n.attributes},a=Ug(i.attributes),c=a?Mg(i,s):i,u=Pe(e,"runs",`${t}.json`);if(await We(u,c,{overwrite:!0}),vg(t),await Di(e,t),a)await _g(e,t,void 0);return{event:void 0,run:xc(c,A)}}case"wait_completed":case"hook_received":{let s=`evnt_${ts()}`,a={...r,runId:t,eventId:s,createdAt:new Date,specVersion:rA},c=`${t}-${s}`,u=Pe(e,"events",`${c}.json`);if(r.eventType==="hook_received")await P6(e,t,s,JSON.stringify(a,vt,2),u,n);else await We(u,a);return{event:nr(a,A)}}default:throw Error(`Event type '${r.eventType}' not supported for legacy runs (specVersion: ${n.specVersion||"undefined"}). Please upgrade 'workflow' package.`)}}import G6 from"node:path";St();var Og=Bt("@workflow/world-local//runFileLocks",1,()=>({byKey:new Map}));function Hg(e,t){let r=Og.byKey.get(e),n={},o=(async()=>{if(r)await r.catch(()=>{return});try{return await t()}finally{if(Og.byKey.get(e)===n.task)Og.byKey.delete(e)}})();return n.task=o,Og.byKey.set(e,o),o}function wv(e,t){let r=async(n,o)=>{fe("runId",n);let A=await ye(e,"runs",n,Mt,t);if(!A)throw new no(n);let s=o?.resolveData??gt;return xc(A,s)};return{get:r,waitForTerminalStatus:async(n,o)=>{let A=Date.now()+(o?.timeoutMs??0);while(!0){let s=await r(n,o);if(Ut(s.status))return s;let i=A-Date.now();if(i<=0||o?.signal?.aborted)return s;await mv(n,Math.min(i,Bv()),o?.signal)}},getMany:async(n,o)=>{let A=[...new Set(n)],s=await Promise.all(A.map(async(a)=>{try{return await r(a,o)}catch(c){if(c instanceof no)return null;throw c}})),i=new Map(A.map((a,c)=>[a,s[c]]));return n.map((a)=>i.get(a)??null)},list:async(n)=>{let o=n?.resolveData??gt,A=await on({directory:G6.join(e,"runs"),schema:Mt,fileIdFilter:n?.fileIdFilter,filter:(s)=>{if(n?.workflowName&&s.workflowName!==n.workflowName)return!1;if(n?.status!==void 0){if(!(Array.isArray(n.status)?n.status:[n.status]).includes(s.status))return!1}return!0},sortOrder:n?.pagination?.sortOrder??"desc",limit:n?.pagination?.limit??200,cursor:n?.pagination?.cursor,getCreatedAt:Ho("wrun"),getId:(s)=>s.runId});if(o==="none")return{...A,data:A.data.map((s)=>xc(s,"none"))};return A},experimentalSetAttributes:async(n,o,A)=>(fe("runId",n),Hg(n,async()=>{let s=await ye(e,"runs",n,Mt,t);if(!s)throw new no(n);try{Xo(o,{existingKeys:Object.keys(s.attributes??{}),allowReservedAttributes:A?.allowReservedAttributes})}catch(c){if(c instanceof $t)throw c;throw c}let i=zi(s.attributes,o),a={...s,attributes:i,updatedAt:new Date};return await We(ge(e,"runs",n,t),a,{overwrite:!0}),{attributes:i}}))}}var xv=86400000,$6=1000;function J6(){let e=Number(process.env.WORKFLOW_LOCAL_HOOK_RETENTION_LIMIT_DAYS??30);if(!Number.isFinite(e)||e<=0)throw new st("WORKFLOW_LOCAL_HOOK_RETENTION_LIMIT_DAYS must be a positive number",{status:400});return e*xv}var W6=H(W({eventId:B()})),SC=H(W({runId:B(),resumeId:B(),hookId:B(),eventId:B(),payloadDigest:B().optional()}));function Vg(e,t){return e.eventType==="hook_received"&&e.correlationId===t.hookId&&(e.resumeId===void 0||e.resumeId===t.resumeId)}async function Sv(e,t,r,n){let o=await Dg(e,t,n);for(let A of o.ids){let s=await ye(e,"events",`${t}-${A}`,Ur,n);if(s&&s.resumeId===r.resumeId&&Vg(s,r))return s}return null}async function z6(e,t,r){if(t.hookId&&await bc(e,t.hookId,r))return!0;let n=await ye(e,"runs",t.runId,Mt,r);if(!n)return!0;if(!Ut(n.status))return!1;return!t.tokenRetentionUntil||t.tokenRetentionUntil.getTime()<=Date.now()}async function q6(e){try{return await Oe(e,W6)}catch(t){if(t instanceof SyntaxError||t instanceof Zn)return null;throw t}}function Nv(e){return na(e.eventId)?e.eventId:null}function Rv(e,t){let r=nn(t).slice(e.length+1);return na(r)?r:null}async function kv(e,t,r){return(await on({directory:Mc.join(e,"events"),schema:Ur,filePrefix:`${t}-`,filter:(o)=>o.eventType==="hook_created"&&o.correlationId===r,limit:1,getCreatedAt:Ho("evnt"),getId:(o)=>o.eventId})).data[0]?.eventId??null}async function bv(e,t,r,n,o){let A=`${t}-${n}`,s=await ye(e,"events",A,Ur,o);if(!s||s.eventType!=="hook_created"||s.correlationId!==r)return;if(await ye(e,"hooks",r,_t,o))return;let a=IC(s);await kg(e,a.token,t,r,n,o),await rs(e,t,r,o),await we(ge(e,"hooks",r,o),JSON.stringify(a,vt,2))}async function Z6(e,t,r,n,o){let A=Oo(e,t,r,n),s=JSON.stringify({eventId:o});if(await we(A,s))return o;return(await q6(A))?.eventId??null}function Tv(e,t,r){let n=e.get(t),o={},A=(async()=>{if(n)await n.catch(()=>{return});try{return await r()}finally{if(e.get(t)===o.task)e.delete(t)}})();return o.task=A,e.set(t,A),A}async function NC(e,t){let r=Mc.join(e,"waits"),n=await mr(r);for(let o of n)if(o.startsWith(`${t}-`)){let A=Mc.join(r,`${o}.json`);await ze(A)}}async function Yg(e,t,r,n){return Hg(t,async()=>{let A=(await Oe(ge(e,"runs",t,r),Mt))?.attributes??n.attributes,s={...n,attributes:A},i=Ut(s.status)&&Ug(A);if(i)s=Mg(s,new Date);if(await We(ge(e,"runs",t,r),s,{overwrite:!0}),Ut(s.status))vg(t);return{run:s,purged:i}})}function Fv(e,t){let r=J6(),n=4194304,o=$6,A=new Map,s=new Map,i=new Map,a=0;function c(S){let E=A.get(S);if(!E)return;A.delete(S),a-=s.get(S)??0,s.delete(S);let m=i.get(E.runId);if(m?.delete(S),m?.size===0)i.delete(E.runId)}function u(S){for(let E of i.get(S)??[])c(E)}function l(){A.clear(),s.clear(),i.clear(),a=0,g.clear()}let g=new Map;function f(S){return t?`${S}.${t}`:S}async function h(S,E){let m=`${S}-${jn(E)}`;for(let v of t?[ge(e,"events",m,t),ge(e,"events",m)]:[ge(e,"events",m)])try{return await Dv.stat(v),!0}catch(N){if(N.code!=="ENOENT")throw N}return!1}async function d(S,E){let m=f(S),v=g.get(m);if(v===void 0||E?.rescan){let Ae=await Dg(e,S,t);if(v===void 0)v=Ae.count>0&&!Ae.usesSlots?null:{published:Ae.maxSlot},g.set(m,v);else if(v!==null)v.published=Math.max(v.published,Ae.maxSlot)}if(v===null)return null;let N=Math.max(v.published+1,ta,E?.atLeast??ta);while(await h(S,N))v.published=Math.max(v.published,N),N+=1;return N}function I(S,E){let m=Kn(E);if(m===null)return;let v=g.get(f(S));if(v)v.published=Math.max(v.published,m)}async function C(S){let E=await d(S);return E===null?`evnt_${ts()}`:jn(E)}async function p(S){let E=await d(S,{rescan:!0});if(E!==null)return{eventId:jn(E),createdAt:new Date};return KL(e,S,t)}function w(S,E,m){if(m>4194304)return;while(A.size>0&&(A.size>=o||a+m>4194304)){let N=A.keys().next().value;c(N)}A.set(S,E),s.set(S,m),a+=m;let v=i.get(E.runId)??new Set;v.add(S),i.set(E.runId,v)}function x(S,E,m){if(qi(S.eventType)){u(S.runId);return}let v=Buffer.byteLength(m);if(v>4194304)return;let N=Ur.safeParse(JSON.parse(m,ia));if(N.success)w(E,N.data,v)}async function b(S){let E=S;for(let m=0;;m++){let v=ge(e,"events",`${E.runId}-${E.eventId}`,t),N=JSON.stringify(E,vt,2),Ae=Kn(E.eventId);if(Ae===null)return await Br(v,N),x(E,v,N),E;if(await we(v,N))return I(E.runId,E.eventId),x(E,v,N),E;let Ie=await d(E.runId,{rescan:m>0&&m%8===0,atLeast:Ae+1});DC(Ie!==null),E={...E,eventId:jn(Ie)}}}async function _(S,E){let m=await kc(e,S,t);if(!m.committed)return;if(m.forceClaimedBy)throw new wu(typeof E==="string"?E:"",m.forceClaimedBy.runId,m.forceClaimedBy.hookId);throw new Vr(S)}let V=(S,E)=>on({directory:Mc.join(e,"events"),schema:Ur,cachedItems:A,filePrefix:`${S}-`,sortOrder:E.sortOrder??"asc",limit:E.limit,cursor:E.cursor,getCreatedAt:Ho("evnt"),getId:(m)=>m.eventId,getSortKey:Nv,getSortKeyFromFileId:(m)=>Rv(S,m)}),F=new Map,y=new Map,Y={clearCache:l,async create(S,E,m){if(E.eventType==="hook_created"&&E.eventData.tokenRetentionUntil!==void 0&&E.eventData.tokenRetentionUntil.getTime()>Date.now()+r)throw new st(`Hook minimum retention cannot exceed ${r/xv} days in the Local World.`,{status:400});if(S!=null&&S!=="")fe("runId",S);if("correlationId"in E&&typeof E.correlationId==="string")fe("correlationId",E.correlationId);if(lu(E.eventType)&&S&&E.correlationId){let N=t?`${S}-${E.correlationId}.${t}`:`${S}-${E.correlationId}`;return Tv(F,N,v)}if(Rh(E.eventType)&&S&&E.correlationId){let N=t?`${S}-${E.correlationId}.hook.${t}`:`${S}-${E.correlationId}.hook`;return Tv(y,N,v)}return v();async function v(){let N="",Ae=!1,Ie=null,le=new Date,U;if(E.eventType==="run_created"&&(!S||S===""))U=`wrun_${ts()}`;else if(!S)throw Error("runId is required for non-run_created events");else U=S;if(E.eventType==="run_created"&&S&&S!==""){let T=ed(U,"wrun_");if(T)throw new st(T)}let Xt=E.specVersion??rA,G=null,Ov=["step_completed","step_retrying"];if(E.eventType!=="run_created"&&!Ov.includes(E.eventType)){if(G=await ye(e,"runs",U,Mt,t),E.eventType==="run_started"&&!G&&"eventData"in E&&E.eventData){let T=E.eventData;if(T.deploymentId&&T.workflowName&&T.input!==void 0){Xo(Object.entries(T.attributes??{}).map(([ce,Ke])=>({key:ce,value:Ke})),{allowReservedAttributes:T.allowReservedAttributes===!0});let P={runId:U,deploymentId:T.deploymentId,status:"pending",workflowName:T.workflowName,specVersion:Xt,executionContext:T.executionContext,input:T.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:T.attributes??{},encryptionPublicKey:T.encryptionPublicKey,dynamicWorkflowCode:T.dynamicWorkflowCode,createdAt:le,updatedAt:le},ie=ge(e,"runs",U,t);if(await we(ie,JSON.stringify(P,vt))){let ce=await C(U),Ke={eventType:"run_created",runId:U,eventId:ce,createdAt:le,specVersion:Xt,eventData:{deploymentId:T.deploymentId,workflowName:T.workflowName,input:T.input,executionContext:T.executionContext,attributes:T.attributes,allowReservedAttributes:T.allowReservedAttributes,encryptionPublicKey:T.encryptionPublicKey}};await b(Ke),G=P}else G=await ye(e,"runs",U,Mt,t)}}}if(N=await C(U),!G&&(E.eventType==="run_failed"||E.eventType==="attr_set"||E.eventType==="run_started"))throw new no(U);if(G){if(Kh(G.specVersion))throw new id(G.specVersion,rA);if(jh(G.specVersion))return yv(e,U,E,G,m&&{resolveData:$h(m.resolveData)})}let kC=Th(E),_c=kC&&E.eventType==="step_started";if(G&&Ut(G.status)){if(E.eventType==="run_cancelled"&&G.status==="cancelled"){let T=await b({...E,runId:U,eventId:N,createdAt:le,specVersion:Xt}),P=m?.resolveData??gt;return{event:nr(T,P),run:G,...G?{maxEvents:Rn()}:{}}}if(E.eventType==="run_started")throw new Pr(`Workflow run "${U}" is already in terminal state "${G.status}"`);if(qi(E.eventType))throw new Le(`Cannot transition run from terminal state "${G.status}"`);if(kC)throw new Le(`Cannot create new entities on run in terminal state "${G.status}"`);if(E.eventType==="attr_set")throw new Le(`Cannot set attributes on run in terminal state "${G.status}"`)}let je=null;if(lu(E.eventType)&&E.eventType!=="step_created"&&E.correlationId){let T=`${U}-${E.correlationId}`;if(je=await ye(e,"steps",T,tA,t),!je&&!_c)throw new st(`Step "${E.correlationId}" not found`);if(_c&&je)throw new Le(`Step "${E.correlationId}" already created`);if(je){if(gu(je.status))throw new Le(`Cannot modify step in terminal state "${je.status}"`);if(G&&Ut(G.status)){if(je.status!=="running"||E.eventType==="step_started")throw new Pr(`Cannot ${E.eventType==="step_started"?"start":"modify non-running"} step on run in terminal state "${G.status}"`)}}}if(kh(E.eventType)&&E.correlationId){if(E.eventType==="hook_received"&&m?.resumeId){let P=await Oe(Sg(e,U,m.resumeId),SC);if(P&&P.hookId===E.correlationId&&(!m.resumePayloadDigest||!P.payloadDigest||P.payloadDigest===m.resumePayloadDigest)){let ie=await ye(e,"events",`${U}-${P.eventId}`,Ur,t),Ee=ie&&Vg(ie,P)?ie:await Sv(e,U,P,t);if(Ee)return{event:Ee}}}if(E.eventType==="hook_received")await _(E.correlationId,E.eventData?.token);if(!await ye(e,"hooks",E.correlationId,_t,t))throw new Vr(E.correlationId);if(E.eventType==="hook_received"&&m?.resumeId){let P=Sg(e,U,m.resumeId),ie=async(ce)=>{if(ce.hookId!==E.correlationId)throw new Le(`hook_received resumeId "${m.resumeId}" already recorded for a different hook`);if(m.resumePayloadDigest&&ce.payloadDigest&&ce.payloadDigest!==m.resumePayloadDigest)throw new Le(`hook_received resumeId "${m.resumeId}" already recorded with a different payload`);let Ke=await ye(e,"events",`${U}-${ce.eventId}`,Ur,t);if(Ke&&Vg(Ke,ce))return{event:Ke};let ct=await Sv(e,U,ce,t);if(ct)return{event:ct};if(Ie=ce.eventId,!Ke)N=ce.eventId,Ae=!0;return null},Ee=await Oe(P,SC);if(Ee){let ce=await ie(Ee);if(ce)return ce}else if(Ae=!na(N),Ie=N,!await we(P,JSON.stringify({runId:U,resumeId:m.resumeId,hookId:E.correlationId,eventId:N,...m.resumePayloadDigest?{payloadDigest:m.resumePayloadDigest}:{}}))){Ie=null;let Ke=await Oe(P,SC);if(Ke){let ct=await ie(Ke);if(ct)return ct}}}}let Si,Re={...E,runId:U,eventId:N,createdAt:le,specVersion:Xt,...E.eventType==="hook_received"&&m?.resumeId?{resumeId:m.resumeId}:{}};if(E.eventType==="run_started"&&"eventData"in Re)delete Re.eventData;if(Re.eventType==="run_created"&&Re.eventData){let{dynamicWorkflowCode:T,dynamicWorkflowCodeRef:P,...ie}=Re.eventData;Re={...Re,eventData:ie}}if(_c&&Re.eventType==="step_started"&&Re.eventData){let{input:T,...P}=Re.eventData;Re={...Re,eventData:P}}let _r,Ni=!1,hr,Yo,Ri,bC=!1,TC;if(qi(E.eventType)&&G){await we(mi(e,U,t),""),await wg(e,U,t);let T=await p(U);N=T.eventId,Re={...Re,eventId:N,createdAt:T.createdAt}}if(E.eventType==="run_created"&&"eventData"in E){let T=E.eventData;Xo(Object.entries(T.attributes??{}).map(([Ee,ce])=>({key:Ee,value:ce})),{allowReservedAttributes:T.allowReservedAttributes===!0}),_r={runId:U,deploymentId:T.deploymentId,status:"pending",workflowName:T.workflowName,specVersion:Xt,executionContext:T.executionContext,input:T.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:T.attributes??{},encryptionPublicKey:T.encryptionPublicKey,dynamicWorkflowCode:T.dynamicWorkflowCode,createdAt:le,updatedAt:le};let P=ge(e,"runs",U,t);if(!await we(P,JSON.stringify(_r,vt,2)))throw new Le(`Workflow run "${U}" already exists`)}else if(E.eventType==="run_started"){if(G){if(G.status==="running"){if(m?.skipPreload)return{run:G,maxEvents:Rn()};let P=await V(U,{limit:Rn()});return{run:G,events:P.data,cursor:P.cursor,hasMore:P.hasMore,maxEvents:Rn()}}let T=await Yg(e,U,t,{runId:G.runId,deploymentId:G.deploymentId,workflowName:G.workflowName,specVersion:G.specVersion,executionContext:G.executionContext,input:G.input,createdAt:G.createdAt,expiredAt:G.expiredAt,status:"running",output:void 0,error:void 0,completedAt:void 0,startedAt:G.startedAt??le,updatedAt:le,attributes:G.attributes,encryptionPublicKey:G.encryptionPublicKey,dynamicWorkflowCode:G.dynamicWorkflowCode});_r=T.run,Ni=T.purged}}else if(E.eventType==="run_completed"&&"eventData"in E){let T=E.eventData;if(G){let P=await Yg(e,U,t,{runId:G.runId,deploymentId:G.deploymentId,workflowName:G.workflowName,specVersion:G.specVersion,executionContext:G.executionContext,input:G.input,createdAt:G.createdAt,expiredAt:G.expiredAt,startedAt:G.startedAt,status:"completed",output:T.output,error:void 0,completedAt:le,updatedAt:le,attributes:G.attributes,encryptionPublicKey:G.encryptionPublicKey,dynamicWorkflowCode:G.dynamicWorkflowCode});_r=P.run,Ni=P.purged,await Promise.all([Di(e,U),NC(e,U)])}}else if(E.eventType==="run_failed"&&"eventData"in E){let T=E.eventData;if(G){let P=await Yg(e,U,t,{runId:G.runId,deploymentId:G.deploymentId,workflowName:G.workflowName,specVersion:G.specVersion,executionContext:G.executionContext,input:G.input,createdAt:G.createdAt,expiredAt:G.expiredAt,startedAt:G.startedAt,status:"failed",output:void 0,error:T.error,errorCode:T.errorCode,completedAt:le,updatedAt:le,attributes:G.attributes,encryptionPublicKey:G.encryptionPublicKey,dynamicWorkflowCode:G.dynamicWorkflowCode});_r=P.run,Ni=P.purged,await Promise.all([Di(e,U),NC(e,U)])}}else if(E.eventType==="run_cancelled"){if(G){let T=await Yg(e,U,t,{runId:G.runId,deploymentId:G.deploymentId,workflowName:G.workflowName,specVersion:G.specVersion,executionContext:G.executionContext,input:G.input,createdAt:G.createdAt,expiredAt:G.expiredAt,startedAt:G.startedAt,status:"cancelled",output:void 0,error:void 0,completedAt:le,updatedAt:le,attributes:G.attributes,encryptionPublicKey:G.encryptionPublicKey,dynamicWorkflowCode:G.dynamicWorkflowCode});_r=T.run,Ni=T.purged,await Promise.all([Di(e,U),NC(e,U)])}}else if(E.eventType==="attr_set"&&G)_r=await Hg(U,async()=>{let T=await Oe(ge(e,"runs",U,t),Mt);if(!T)throw new no(U);if(Xo(E.eventData.changes,{existingKeys:Object.keys(T.attributes),allowReservedAttributes:E.eventData.allowReservedAttributes===!0}),E.correlationId&&E.eventData.writer.type==="workflow"){let ie=t?`${U}-${E.correlationId}.created.${t}`:`${U}-${E.correlationId}.created`,Ee=Pe(e,".locks","attributes",ie);if(!await we(Ee,""))throw new Le(`Attribute event "${E.correlationId}" already exists`)}let P={...T,attributes:zi(T.attributes,E.eventData.changes),updatedAt:le};return await We(ge(e,"runs",U,t),P,{overwrite:!0}),P});else if(E.eventType==="step_created"&&"eventData"in E){let T=t?`${U}-${E.correlationId}.created.${t}`:`${U}-${E.correlationId}.created`,P=Pe(e,".locks","steps",T);if(!await we(P,""))throw new Le(`Step "${E.correlationId}" already created`);let Ee=E.eventData;hr={runId:U,stepId:E.correlationId,stepName:Ee.stepName,status:"pending",input:Ee.input,output:void 0,error:void 0,attempt:0,startedAt:void 0,completedAt:void 0,createdAt:le,updatedAt:le,specVersion:Xt};let ce=`${U}-${E.correlationId}`;await We(ge(e,"steps",ce,t),hr)}else if(E.eventType==="step_started"){if(!je&&_c){let T=E.eventData,P=t?`${U}-${E.correlationId}.created.${t}`:`${U}-${E.correlationId}.created`,ie=Pe(e,".locks","steps",P);if(!await we(ie,""))throw new Le(`Step "${E.correlationId}" already created`);else{let ce={runId:U,stepId:E.correlationId,stepName:T.stepName,status:"pending",input:T.input,output:void 0,error:void 0,attempt:0,startedAt:void 0,completedAt:void 0,createdAt:le,updatedAt:le,specVersion:Xt};await We(ge(e,"steps",`${U}-${E.correlationId}`,t),ce);let Ke=await C(U),ct={eventType:"step_created",runId:U,eventId:Ke,createdAt:le,specVersion:Xt,correlationId:E.correlationId,eventData:{stepName:T.stepName,input:T.input}};await b(ct),je=ce,bC=!0}}if(je){if(je.retryAfter&&je.retryAfter.getTime()>Date.now())throw new sd(`Cannot start step "${E.correlationId}": retryAfter timestamp has not been reached yet`,{retryAfter:Math.ceil((je.retryAfter.getTime()-Date.now())/1000)});let T=`${U}-${E.correlationId}`,P=await ye(e,"steps",T,tA,t);if(P&&gu(P.status))throw new Le(`Cannot modify step in terminal state "${P.status}"`);hr={...je,status:"running",startedAt:je.startedAt??le,attempt:je.attempt+1,retryAfter:void 0,updatedAt:le},await We(ge(e,"steps",T,t),hr,{overwrite:!0})}}else if(E.eventType==="step_completed"&&"eventData"in E){let T=E.eventData;if(je){let P=`${U}-${E.correlationId}`,ie=t?`${P}.terminal.${t}`:`${P}.terminal`,Ee=Pe(e,".locks","steps",ie);if(!await we(Ee,""))throw new Le("Cannot modify step in terminal state");hr={...je,status:"completed",output:T.result,completedAt:le,updatedAt:le},await We(ge(e,"steps",P,t),hr,{overwrite:!0})}}else if(E.eventType==="step_failed"&&"eventData"in E){let T=E.eventData;if(je){let P=`${U}-${E.correlationId}`,ie=t?`${P}.terminal.${t}`:`${P}.terminal`,Ee=Pe(e,".locks","steps",ie);if(!await we(Ee,""))throw new Le("Cannot modify step in terminal state");hr={...je,status:"failed",error:T.error,completedAt:le,updatedAt:le},await We(ge(e,"steps",P,t),hr,{overwrite:!0})}}else if(E.eventType==="step_retrying"&&"eventData"in E){let T=E.eventData;if(je){let P=`${U}-${E.correlationId}`;hr={...je,status:"pending",error:T.error,retryAfter:T.retryAfter,updatedAt:le},await We(ge(e,"steps",P,t),hr,{overwrite:!0})}}else if(E.eventType==="hook_created"&&"eventData"in E){let T=E.eventData,P=es(e,T.token),ie,Ee=()=>JSON.stringify({token:T.token,hookId:E.correlationId,runId:U,eventId:N,tokenRetentionUntil:T.tokenRetentionUntil,...ie&&{claimedFrom:ie}}),ce=await lC(e,T.token,async(ct)=>{let Fe=await wi(P);if(!Fe)ct.throwIfAborted(),await ze(P),await pC(e,T.token,t),Fe=await wi(P);if(!Fe)return ct.throwIfAborted(),DC(await we(P,Ee())),{status:"claimed"};if(Fe.runId===U&&Fe.hookId===E.correlationId)return{status:"owned",claim:Fe};if(!await z6(e,Fe,t)){if(T.force!==!0||!Fe.hookId)return{status:"conflict",claim:Fe};ct.throwIfAborted();let Lr=await ye(e,"runs",Fe.runId,Mt,t),jr=Lr!==null&&!Ut(Lr.status);if(ie={runId:Fe.runId,hookId:Fe.hookId,...jr&&{workflowName:Lr.workflowName,deploymentId:Lr.deploymentId,runSpecVersion:Lr.specVersion}},jr&&(Lr.specVersion??Cu)<oa)return{status:"conflict",claim:Fe,forceRefusedReason:"victim-spec-version"};let vr=await kv(e,U,E.correlationId);if(vr)N=vr,Si={...Re,eventId:N};else Si=await b({...Re,eventData:{...Re.eventData,forceClaimedFrom:ie}}),N=Si.eventId;await rs(e,U,E.correlationId,t),await We(ge(e,"hooks",E.correlationId,t),{runId:U,hookId:E.correlationId,token:T.token,metadata:T.metadata,ownerId:"local-owner",projectId:"local-project",environment:"local",createdAt:le,specVersion:Xt,isWebhook:T.isWebhook??!1,isSystem:T.isSystem??!1,tokenRetentionUntil:T.tokenRetentionUntil,claimedFrom:ie},{overwrite:!0});let Lc=await we(KA(e,Fe.hookId,t),JSON.stringify({forceClaimedBy:{runId:U,hookId:E.correlationId}}));if(jr){if(Lc){let $g={eventType:"hook_disposed",correlationId:Fe.hookId,eventData:{token:T.token,forceClaimedBy:{runId:U,hookId:E.correlationId}},runId:Fe.runId,eventId:await C(Fe.runId),createdAt:new Date,specVersion:Lr.specVersion};await b($g)}}}if(ct.throwIfAborted(),ie)await Br(P,Ee(),{overwrite:!0});else await ze(P);if(Fe.hookId)await ze(ge(e,"hooks",Fe.hookId,t)),await ze(Oo(e,T.token,Fe.runId,Fe.hookId)),await hC(e,Fe.runId,Fe.hookId,t);if(ct.throwIfAborted(),!ie)DC(await we(P,Ee()));return{status:"claimed"}});if(ce.status==="owned"&&ce.claim.claimedFrom)ie=ce.claim.claimedFrom;if(ce.status==="owned"){let ct=ce.claim,Fe;if(ct.eventId)Fe=ct.eventId;else{let jr=await kv(e,U,E.correlationId);if(jr!==null)throw await bv(e,U,E.correlationId,jr,t),new Le(`Hook "${E.correlationId}" already created`);let vr=await Z6(e,T.token,U,E.correlationId,N);if(vr===null)throw new Le(`Hook "${E.correlationId}" already created`);Fe=vr}N=Fe,Ae=!0;let Lr=to(N.replace(/^evnt_/,""))??le;Re={...E,eventData:{...E.eventData,tokenRetentionUntil:ct.tokenRetentionUntil},runId:U,eventId:N,createdAt:Lr,specVersion:Xt}}if(ce.status==="conflict"){let ct=ce.claim,Fe={eventType:"hook_conflict",correlationId:E.correlationId,eventData:{token:T.token,conflictingRunId:ct.runId,...ce.forceRefusedReason!==void 0&&{forceRefusedReason:ce.forceRefusedReason}},runId:U,eventId:N,createdAt:le,specVersion:Xt},Lr=await b(Fe),jr=m?.resolveData??gt,vr=typeof m?.sinceCursor==="string"?await V(U,{sortOrder:"asc",cursor:m.sinceCursor}):void 0,Lc={event:nr(Lr,jr),run:_r,step:hr,hook:void 0};if(!vr)return Lc;return{...Lc,events:jr==="none"?vr.data.map(($g)=>nr($g,jr)):vr.data,cursor:vr.cursor,hasMore:vr.hasMore}}if(ie)Re={...Re,eventData:{...Re.eventData,forceClaimedFrom:ie}};let Ke=Re.eventData;Yo={runId:U,hookId:E.correlationId,token:Ke.token,metadata:Ke.metadata,ownerId:"local-owner",projectId:"local-project",environment:"local",createdAt:Re.createdAt,specVersion:Xt,isWebhook:Ke.isWebhook??!1,isSystem:Ke.isSystem??!1,tokenRetentionUntil:Ke.tokenRetentionUntil,...ie&&{claimedFrom:ie}},TC=ce.status==="owned"||ie?{overwrite:!0}:void 0,await kg(e,T.token,U,E.correlationId,N,t)}else if(E.eventType==="hook_disposed"){let T=KA(e,E.correlationId,t);if(!await we(T,""))throw new Le(`Hook "${E.correlationId}" already disposed`);let ie=ge(e,"hooks",E.correlationId,t),Ee=await ye(e,"hooks",E.correlationId,_t,t);if(Ee)await Ng(e,Ee.token,Ee.runId,Ee.hookId),await ze(Oo(e,Ee.token,Ee.runId,Ee.hookId));await ze(ie),await hC(e,U,E.correlationId,t)}else if(E.eventType==="wait_created"&&"eventData"in E){let T=`${U}-${E.correlationId}`,P=t?`${T}.created.${t}`:`${T}.created`,ie=Pe(e,".locks","waits",P);if(!await we(ie,""))throw new Le(`Wait "${E.correlationId}" already exists`);let ce=E.eventData;Ri={waitId:T,runId:U,status:"waiting",resumeAt:ce.resumeAt,completedAt:void 0,createdAt:le,updatedAt:le,specVersion:Xt},await We(ge(e,"waits",T,t),Ri)}else if(E.eventType==="wait_completed"){let T=`${U}-${E.correlationId}`,P=t?`${T}.completed.${t}`:`${T}.completed`,ie=Pe(e,".locks","waits",P);if(!await we(ie,""))throw new Le(`Wait "${E.correlationId}" already completed`);let ce=await ye(e,"waits",T,Mh,t);if(!ce)throw await Dv.unlink(ie).catch(()=>{}),new st(`Wait "${E.correlationId}" not found`);Ri={...ce,status:"completed",completedAt:le,updatedAt:le},await We(ge(e,"waits",T,t),Ri,{overwrite:!0})}if(E.eventType==="hook_received"&&E.correlationId)await _(E.correlationId,E.eventData?.token);if(E.eventType==="hook_created"&&E.correlationId){let T=await kc(e,E.correlationId,t);if(T.committed&&T.forceClaimedBy)throw new Le(`Hook "${E.correlationId}" was force-claimed by another run before its creation was journaled`)}let ki=ge(e,"events",`${U}-${N}`,t),bi=JSON.stringify(Re,vt,2),Hv=async(T)=>{let P=Kn(N);if(Ae||P===null)return!1;let ie=await d(U,{rescan:T>0&&T%8===0,atLeast:P+1});if(ie===null)return!1;return N=jn(ie),Re={...Re,eventId:N},ki=ge(e,"events",`${U}-${N}`,t),bi=JSON.stringify(Re,vt,2),!0},ns=!1;if(Si)Re=Si,ki=ge(e,"events",`${U}-${N}`,t),bi=JSON.stringify(Re,vt,2),ns=!0;for(let T=0;!ns;T++){if(E.eventType==="hook_received"){let P=await yi(e,U,t),ie=P?null:await ye(e,"runs",U,Mt,t);if(P||ie&&Ut(ie.status))throw new Pr(`Workflow run "${U}" is already in a terminal state`);let Ee=yg(e,U,`${N}.${ts()}`,t);if(!await we(Ee,bi))throw new st(`Failed to stage event "${N}" for run "${U}": staging path already exists`);try{if(await yi(e,U,t))throw new Pr(`Workflow run "${U}" is already in a terminal state`);let Ke=await Ru(Ee,ki);if(Ke==="missing")throw new Pr(`Workflow run "${U}" is already in a terminal state`);ns=Ke==="linked"}finally{await ze(Ee).catch(()=>{})}}else ns=await we(ki,bi);if(ns){I(U,N);break}if(E.eventType==="hook_received"&&m?.resumeId){let P=await ye(e,"events",`${U}-${N}`,Ur,t);if(P&&Vg(P,{runId:U,resumeId:m.resumeId,hookId:E.correlationId,eventId:N}))return{event:P}}if(E.eventType==="hook_created"&&E.correlationId){let P=await ye(e,"events",`${U}-${N}`,Ur,t);if(P?.eventType==="hook_created"&&P.correlationId===E.correlationId)break}if(!await Hv(T))break}if(!ns){if(E.eventType==="hook_created"&&E.correlationId)await bv(e,U,E.correlationId,N,t);throw new Le(`Event "${N}" already exists for run "${U}"`)}if(x(Re,ki,bi),E.eventType==="hook_received"&&m?.resumeId&&Ie!==null&&Ie!==N)await Br(Sg(e,U,m.resumeId),JSON.stringify({runId:U,resumeId:m.resumeId,hookId:E.correlationId,eventId:N,...m.resumePayloadDigest?{payloadDigest:m.resumePayloadDigest}:{}}),{overwrite:!0});if(Yo&&E.eventType==="hook_created")await rs(e,Yo.runId,Yo.hookId,t),await We(ge(e,"hooks",Yo.hookId,t),Yo,TC);if(Ni)await _g(e,U,t),u(U);let Gg=m?.resolveData??gt,Yv=nr(Re,Gg),os;if(E.eventType==="run_started"&&_r&&!m?.skipPreload)os=await V(U,{limit:Rn()});if(typeof m?.sinceCursor==="string"){let T=await V(U,{sortOrder:"asc",cursor:m.sinceCursor});os=Gg==="none"?{...T,data:T.data.map((P)=>nr(P,Gg))}:T}let xC={event:Yv,run:_r,step:hr,hook:Yo,wait:Ri,...bC?{stepCreated:!0}:{},..._r?{maxEvents:Rn()}:{}};if(!os)return xC;return{...xC,events:os.data,cursor:os.cursor,hasMore:os.hasMore}}},async get(S,E,m){fe("runId",S),fe("eventId",E);let v=`${S}-${E}`,N=await ye(e,"events",v,Ur,t);if(!N)throw Error(`Event ${E} in run ${S} not found`);let Ae=m?.resolveData??gt;return nr(N,Ae)},async list(S){let{runId:E}=S;fe("runId",E);let m=S.resolveData??gt,v=await V(E,{...S.pagination,limit:S.pagination?.limit??Rn()});if(m==="none")return{...v,data:v.data.map((N)=>nr(N,m))};return v},async listByCorrelationId(S){let E=S.correlationId;fe("correlationId",E),fe("runId",S.runId);let m=S.resolveData??gt,v=await on({directory:Mc.join(e,"events"),schema:Ur,cachedItems:A,filePrefix:`${S.runId}-`,filter:(N)=>N.correlationId===E,sortOrder:S.pagination?.sortOrder??"asc",limit:S.pagination?.limit,cursor:S.pagination?.cursor,getCreatedAt:Ho("evnt"),getId:(N)=>N.eventId,getSortKey:Nv,getSortKeyFromFileId:(N)=>Rv(S.runId,N)});if(m==="none")return{...v,data:v.data.map((N)=>nr(N,m))};return v}};async function O(S,E,m){if(!S.event)return S;let v=Kn(S.event.eventId);if(v===null||E<ta||v<=E+1)return S;let N=v-E-1,Ae=await Y.list({runId:S.event.runId,pagination:{cursor:`${sa}${jn(E)}`,limit:N,sortOrder:"asc"},resolveData:m}),Ie=S.event.eventId,le=Ae.data.filter((U)=>U.eventId<Ie);return{...S,events:le,cursor:null,hasMore:le.length<v-E-1}}return{...Y,create:async(S,E,m)=>{if(m?.eventCount===void 0)return Y.create(S,E,m);let v=m.resolveData??gt,N=await Y.create(S,E,m);if(typeof m.sinceCursor==="string")return N;return O(N,m.eventCount,v)}}}St();import j6 from"node:fs/promises";import K6 from"node:path";function Uv(e){let t=K6.join(e,"snapshots");function r(n){return fe("runId",n),Pe(t,`${n}.snapshot`)}return{async save(n,o,A){await Su(t),await Br(r(n),Buffer.from(zh(A,o)),{overwrite:!0})},async load(n){let o;try{o=await Ds(r(n))}catch(A){if(A.code==="ENOENT")return null;throw A}return qh(new Uint8Array(o.buffer,o.byteOffset,o.byteLength))},async delete(n){await j6.rm(r(n),{force:!0})}}}St();import X6 from"node:path";function Mv(e,t){return{get:async(r,n,o)=>{fe("runId",r),fe("stepId",n);let A=`${r}-${n}`,s=await ye(e,"steps",A,tA,t);if(!s)throw Error(`Step ${n} in run ${r} not found`);let i=o?.resolveData??gt;return iv(s,i)},list:async(r)=>{fe("runId",r.runId);let n=r.resolveData??gt,o=await on({directory:X6.join(e,"steps"),schema:tA,filePrefix:`${r.runId}-`,sortOrder:r.pagination?.sortOrder??"desc",limit:r.pagination?.limit,cursor:r.pagination?.cursor,getCreatedAt:Ho("step"),getId:(A)=>A.stepId});if(n==="none")return{...o,data:o.data.map((A)=>({...A,input:void 0,output:void 0}))};return o}}}function RC(e,t){let r=wv(e,t),n=Mv(e,t),o=Fv(e,t),A=gv(e,t),s=Uv(e);return{runs:so("world.runs",r),steps:so("world.steps",n),events:so("world.events",o),hooks:so("world.hooks",A),experimental_snapshots:so("world.experimental_snapshots",s),clearCache:()=>o.clearCache()}}function _v(e){let t=e?Object.fromEntries(Object.entries(e).filter(([,a])=>a!==void 0)):{},r={...ES.value,...t};uS(r.dataDir);let n=r.tag,o=wL(r),{clearCache:A,...s}=RC(r.dataDir,n),i=IS(r);return{specVersion:Zh(),capabilities:{hookRetention:{active:!0},dynamicWorkflowCode:!0,hookResumeDedup:!0,hookForceClaim:!0},...o,...s,...so("world.streams",{...pv(r.dataDir,n),...r.streamFlushIntervalMs!==void 0&&{streamFlushIntervalMs:r.streamFlushIntervalMs}}),async start(){if(await bu(r.dataDir),!i)return;let a=n?(u)=>ws(u,n):oA,c={...s.runs,list:(u)=>s.runs.list({...u,fileIdFilter:a})};await Gh(c,o.queue,"world-local")},async close(){A(),await o.close()},async clear(){if(A(),n){let a=r.dataDir,c=Mr.join(a,"hooks"),u=await Nu(c,n);await Promise.resolve().then(() => St());await Promise.all(u.map(async(d)=>{let I=await Oe(Mr.join(c,d),_t);if(I?.token)await ze(Mr.join(c,"tokens",`${Rc(I.token)}.json`)),await ze(Oo(a,I.token,I.runId,I.hookId))})),await Promise.all(["runs","steps","events","hooks","hooks/by-run","waits","streams/runs"].map(async(d)=>{let I=Mr.join(a,d),C=await Nu(I,n);await Promise.all(C.map((p)=>ze(Mr.join(I,p))))}));for(let d of["token-index","id-index"]){let I=Mr.join(a,"hooks",d),C;try{C=await Pg.readdir(I,{withFileTypes:!0})}catch{C=[]}await Promise.all(C.filter((p)=>p.isDirectory()).map(async(p)=>{let w=Mr.join(I,p.name),x=await Nu(w,n);await Promise.all(x.map((b)=>ze(Mr.join(w,b))))}))}await Pg.rm(Mr.join(a,".locks"),{recursive:!0,force:!0}).catch(()=>{});let f=Mr.join(a,"streams","chunks"),h;try{h=await Pg.readdir(f,{withFileTypes:!0})}catch{h=[]}await Promise.all(h.filter((d)=>d.isDirectory()).map(async(d)=>{let I=Mr.join(f,d.name),C=await BS(I,n,".bin");await Promise.all(C.map((p)=>Pg.unlink(Mr.join(I,p)).catch(()=>{})))})),cd()}else cd(),Av(),await e7(r.dataDir,{recursive:!0,force:!0}),await bu(r.dataDir)}}}var t7=Symbol.for("libfx.durability");function Lv(e,t={}){let r=typeof e==="function";if(!r&&!(e&&typeof e==="object"))throw TypeError("world() takes a World or a function that creates one");if(!t||typeof t!=="object"||Array.isArray(t))throw TypeError("world() options must be an object");let{name:n="world",livenessKnown:o=!1,queueDurable:A=!1,pollMs:s,maxDurationMs:i,reserveMs:a,alive:c,holderInfo:u,gatewayKey:l}=t;if(typeof n!=="string"||n.length===0)throw TypeError("world() name must be a non-empty string");for(let[g,f]of Object.entries({livenessKnown:o,queueDurable:A}))if(typeof f!=="boolean")throw TypeError(`${n}() ${g} must be a boolean`);if(s!==void 0&&!(Number.isSafeInteger(s)&&s>0))throw TypeError(`${n}() pollMs must be a positive integer`);for(let[g,f]of Object.entries({maxDurationMs:i,reserveMs:a}))if(f!==void 0&&!(Number.isSafeInteger(f)&&f>=0))throw TypeError(`${n}() ${g} must be a non-negative integer`);for(let[g,f]of Object.entries({alive:c,holderInfo:u,gatewayKey:l}))if(f!==void 0&&typeof f!=="function")throw TypeError(`${n}() ${g} must be a function`);if(o&&!c)throw TypeError(`${n}() livenessKnown needs alive()`);return{[t7]:!0,name:n,world:r?e:()=>e,owned:r,livenessKnown:o,queueDurable:A,...s===void 0?{}:{pollMs:s},...i===void 0?{}:{maxDurationMs:i},...a===void 0?{}:{reserveMs:a},...c===void 0?{}:{alive:c},...u===void 0?{}:{holderInfo:u},...l===void 0?{}:{gatewayKey:l}}}var vv=r7();function Cue({dir:e,maxDurationMs:t,reserveMs:r}={}){if(e!==void 0&&(typeof e!=="string"||e.length===0))throw TypeError("local() dir must be a path");return Lv(()=>_v({...e===void 0?{}:{dataDir:e},recoverActiveRuns:!1}),{name:"local",livenessKnown:!0,queueDurable:!1,pollMs:250,maxDurationMs:t,reserveMs:r,holderInfo:()=>({pid:process.pid,host:vv}),alive(n){if(n.host!==vv||!Number.isSafeInteger(n.pid))return null;try{return process.kill(n.pid,0),!0}catch(o){return o?.code==="EPERM"}}})}export{Cue as local};
|
|
190
|
+
`);for(let o of n)if(o.includes("LISTEN")){let s=o.trim().split(/\s+/)[8];if(s){let i=s.lastIndexOf(":");if(i!==-1){let a=fS(s.slice(i+1));if(a!==void 0)r.push(a)}}}return r}catch{return[]}}async function IV(e){try{let{stdout:t}=await gS("cmd",["/c","netstat -ano -p tcp | findstr LISTENING"]);return lS(t,e)}catch{return[]}}async function pV(){let{pid:e,platform:t}=process;try{switch(t){case"linux":return await dV(e);case"darwin":return await EV(e);case"win32":return await IV(e);default:return[]}}catch(r){return ps("[getAllPorts] Detection failed:",r),[]}}var CV=500,QV=`${rd}/flow?__health`;async function BV(e,t={}){let{endpoint:r=QV,timeout:n=CV}=t,o=new AbortController,A=setTimeout(()=>o.abort(),n);try{return(await fetch(`http://localhost:${e}${r}`,{method:"HEAD",signal:o.signal})).status===200}catch{return!1}finally{clearTimeout(A)}}async function hS(e){let t=await pV();if(t.length===0)return;if(t.length===1)return t[0];let n=(await Promise.all(t.map(async(o)=>({port:o,isWorkflow:await BV(o,e)})))).find((o)=>o.isWorkflow);if(n)return n.port;return ps("[getWorkflowPort] Probing failed, falling back to first port:",t[0]),t[0]}function dS(e){let t={get value(){let r=e();return Object.defineProperty(t,"value",{value:r}),r}};return t}var mV=()=>process.env.WORKFLOW_LOCAL_DATA_DIR||".workflow-data",gt="all",yV=()=>process.env.WORKFLOW_LOCAL_BASE_URL,ES=dS(()=>{let e=mV(),t=yV();return{dataDir:e,baseUrl:t}});function IS(e){if(e.recoverActiveRuns!==void 0)return e.recoverActiveRuns;let t=process.env.WORKFLOW_LOCAL_RECOVER_ACTIVE_RUNS?.toLowerCase();if(t==="0"||t==="false")return!1;if(t==="1"||t==="true")return!0;return!0}function pS(e){return e.baseUrl??process.env.WORKFLOW_LOCAL_BASE_URL??ms("http://localhost")}async function CS(e){if(e.baseUrl)return e.baseUrl;if(process.env.WORKFLOW_LOCAL_BASE_URL)return process.env.WORKFLOW_LOCAL_BASE_URL;if(typeof e.port==="number")return ms(`http://localhost:${e.port}`);if(process.env.PORT)return ms(`http://localhost:${process.env.PORT}`);let t=await hS({endpoint:nd()});if(t)return ms(`http://localhost:${t}`);throw Error("Unable to resolve base URL for workflow queue.")}import{promises as mt}from"node:fs";import rn from"node:path";Is();ut();St();var tn=Bt("@workflow/world-local//fs",1,()=>({ulid:eo(()=>Math.random()),createdFilesCache:new Set,createdDirectoriesCache:new Set}));function wV(e){let t=typeof e==="string"?e:String(e),r=48;return t.length>48?`${t.slice(0,48)}…`:t}class ys extends st{constructor(e,t){super(`Unsafe ${e} "${wV(t)}": must not be empty, contain ".", "/", "\\", or null bytes`);this.name="UnsafeEntityIdError"}static is(e){return e instanceof Error&&e.name==="UnsafeEntityIdError"}}function fe(e,t){if(t.length===0||t.startsWith(".")||t.includes("/")||t.includes("\\")||t.includes("\x00")||t.includes("."))throw new ys(e,t)}function Pe(e,...t){let r=rn.resolve(e),n=rn.resolve(e,...t);if(n!==r&&!n.startsWith(r+rn.sep))throw new ys("path",t.join("/"));return n}var DV=process.platform==="win32";async function Gr(e,t=5){if(!DV)return e();let r=["EPERM","EBUSY","EACCES"],n=10;for(let o=0;o<=t;o++)try{return await e()}catch(A){if(!(o<t&&r.includes(A.code)))throw A;let i=n*2**o+Math.random()*n;await new Promise((a)=>setTimeout(a,i))}throw Error("Retry loop exited unexpectedly")}function cd(){tn.createdFilesCache.clear(),tn.createdDirectoriesCache.clear()}var QS=/\.[a-zA-Z][a-zA-Z0-9-]*$/;function nn(e){return e.replace(QS,"")}function ws(e,t){return e.endsWith(`.${t}`)}function oA(e){return!QS.test(e)}function ge(e,t,r,n){if(fe("fileId",r),n!==void 0)fe("tag",n);let o=n?`${r}.${n}.json`:`${r}.json`;return Pe(e,t,o)}async function ye(e,t,r,n,o){if(fe("fileId",r),o!==void 0)fe("tag",o);if(o){let A=await Oe(Pe(e,t,`${r}.${o}.json`),n);if(A!==null)return A}return Oe(Pe(e,t,`${r}.json`),n)}async function Nu(e,t){let r=`.${t}.json`;try{return(await mt.readdir(e)).filter((o)=>o.endsWith(r))}catch(n){if(n.code==="ENOENT")return[];throw n}}async function BS(e,t,r){let n=`.${t}${r}`;try{return(await mt.readdir(e)).filter((A)=>A.endsWith(n))}catch(o){if(o.code==="ENOENT")return[];throw o}}async function Su(e){let t=rn.resolve(e);if(tn.createdDirectoriesCache.has(t))return;try{await mt.mkdir(t,{recursive:!0}),tn.createdDirectoriesCache.add(t)}catch(r){let n=r.code;if(cS(n)&&!await SV(t))throw new Du(t,n)}}async function SV(e){try{return(await mt.stat(e)).isDirectory()}catch{return!1}}async function ud(e,t){await Su(e);try{return await t()}catch(r){if(r.code!=="ENOENT")throw r;return tn.createdDirectoriesCache.delete(rn.resolve(e)),await Su(e),t()}}function vt(e,t){if(t instanceof Uint8Array)return{__type:"Uint8Array",data:Buffer.from(t).toString("base64")};return t}function ia(e,t){if(t!==null&&typeof t==="object"&&t.__type==="Uint8Array"&&typeof t.data==="string")return new Uint8Array(Buffer.from(t.data,"base64"));return t}async function We(e,t,r){return Br(e,JSON.stringify(t,vt,2),r)}async function Br(e,t,r){if(!r?.overwrite){if(tn.createdFilesCache.has(e))throw new Le(`File ${e} already exists and 'overwrite' is false`);try{throw await mt.access(e),tn.createdFilesCache.add(e),new Le(`File ${e} already exists and 'overwrite' is false`)}catch(A){if(A.code!=="ENOENT")throw A}}let n=`${e}.tmp.${tn.ulid()}`,o=!1;try{await ud(rn.dirname(e),async()=>{await mt.writeFile(n,t),o=!0,await Gr(()=>mt.rename(n,e))}),tn.createdFilesCache.add(e)}catch(A){if(o)await Gr(()=>mt.unlink(n),3).catch(()=>{});throw A}}async function Oe(e,t){try{let r=await Gr(()=>mt.readFile(e,"utf-8"));return t.parse(JSON.parse(r,ia))}catch(r){if(r.code==="ENOENT")return null;throw r}}async function Ds(e){return await mt.readFile(e)}async function aa(e){let t=await mt.open(e,"r");try{let r=Buffer.allocUnsafe(1),{bytesRead:n}=await t.read(r,0,1,0);return n===0?void 0:r[0]}finally{await t.close()}}async function ze(e){try{await Gr(()=>mt.unlink(e))}catch(t){if(t.code!=="ENOENT")throw t}}async function we(e,t){let r=`${e}.tmp.${tn.ulid()}`,n=!1;try{return await ud(rn.dirname(e),async()=>{await mt.writeFile(r,t,{flag:"wx"}),n=!0;try{return await Gr(()=>mt.link(r,e)),!0}catch(o){if(o.code==="EEXIST")return!1;throw o}})}finally{if(n)await Gr(()=>mt.unlink(r),3).catch(()=>{})}}async function Ru(e,t){try{return await ud(rn.dirname(t),()=>Gr(()=>mt.link(e,t))),"linked"}catch(r){if(r.code==="EEXIST")return"exists";if(r.code==="ENOENT")return"missing";throw r}}async function mr(e){return NV(e,".json")}async function NV(e,t){try{return(await mt.readdir(e)).filter((n)=>n.endsWith(t)).map((n)=>n.slice(0,-t.length))}catch(r){if(r.code==="ENOENT")return[];throw r}}var sa="key:";function RV(e){if(!e)return null;if(e.startsWith(sa))return{timestamp:new Date(0),id:null,sortKey:e.slice(sa.length)};let t=e.split("|");return{timestamp:new Date(t[0]),id:t[1]||null,sortKey:null}}function kV(e,t,r){if(r)return`${sa}${r}`;return t?`${e.toISOString()}|${t}`:e.toISOString()}async function on(e){let{directory:t,schema:r,cachedItems:n,filePrefix:o,fileIdFilter:A,filter:s,sortOrder:i="desc",limit:a=20,cursor:c,getCreatedAt:u,getId:l,getSortKey:g,getSortKeyFromFileId:f}=e;if(o!==void 0)fe("filePrefix",o);let h=rn.resolve(t),d=await mr(h),I=o?d.filter((y)=>y.startsWith(o)):d,C=A?I.filter(A):I,p=RV(c),w=C;if(p?.sortKey&&f){let y=p.sortKey;w=C.filter((Y)=>{let O=f(Y);if(O===null)return!0;let M=O.localeCompare(y);return i==="desc"?M<0:M>0})}else if(p&&!p.sortKey)w=C.filter((y)=>{let Y=u(`${y}.json`);if(Y){let O=p.timestamp.getTime(),M=Y.getTime();if(p.id)return i==="desc"?M<=O:M>=O;else return i==="desc"?M<O:M>O}return!0});let x=32,b=[];for(let y=0;y<w.length;y+=x){let Y=w.slice(y,y+x),O=await Promise.all(Y.map(async(M)=>{let S=rn.join(h,`${M}.json`),E;try{let m=n?.get(S);E=m===void 0?await Oe(S,r):structuredClone(m)}catch(m){if(m instanceof Zn)return console.warn(`Skipping item ${M} due to malformed JSON: ${m.message}`),null;throw m}return E&&s&&!await s(E)?null:E}));for(let M of O){if(!M)continue;let S=g?.(M)??null;if(p?.sortKey){if(S){let E=S.localeCompare(p.sortKey);if(i==="desc"?E>=0:E<=0)continue}b.push(M);continue}if(p){let E=M.createdAt.getTime(),m=p.timestamp.getTime();if(i==="desc"){if(E>m)continue;if(E===m&&p.id&&l){if(l(M)>=p.id)continue}}else{if(E<m)continue;if(E===m&&p.id&&l){if(l(M)<=p.id)continue}}}b.push(M)}}b.sort((y,Y)=>{if(g){let E=g(y),m=g(Y);if(E!==null&&m!==null)return i==="asc"?E.localeCompare(m):m.localeCompare(E)}let O=y.createdAt.getTime(),M=Y.createdAt.getTime(),S=i==="asc"?O-M:M-O;if(S===0&&l){let E=l(y),m=l(Y);return i==="asc"?E.localeCompare(m):m.localeCompare(E)}return S});let _=b.length>a,V=_?b.slice(0,a):b,F=V.length>0?kV(V[V.length-1].createdAt,l?.(V[V.length-1]),g?.(V[V.length-1])):null;return{data:V,cursor:F,hasMore:_}}import{access as bV,constants as TV,mkdir as xV,readFile as yS,unlink as FV,writeFile as wS}from"node:fs/promises";import Ao from"node:path";import{fileURLToPath as UV}from"node:url";var MV="@workflow/world-local",Ss=Bt("@workflow/world-local//packageInfo",1,()=>({cached:null}));function _V(){if(typeof import.meta.url==="string"&&import.meta.url)return Ao.dirname(UV(import.meta.url));return null}async function ku(){return{name:"@workflow/world-local",version:"5.0.2"}}var DS="version.txt";class ca extends Error{dataDir;code;constructor(e,t,r){super(e);this.name="DataDirAccessError",this.dataDir=t,this.code=r}}class ld extends Error{oldVersion;newVersion;suggestedVersion;constructor(e,t,r,n){super(e);this.name="DataDirVersionError",this.oldVersion=t,this.newVersion=r,this.suggestedVersion=n}}function gd(e){let t=e.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/);if(!t)throw Error(`Invalid version string: "${e}"`);return{major:parseInt(t[1],10),minor:parseInt(t[2],10),patch:parseInt(t[3],10),prerelease:t[4],raw:e}}function oo(e){let t=`${e.major}.${e.minor}.${e.patch}`;return e.prerelease?`${t}-${e.prerelease}`:t}function LV(e){let t=e.trim(),r=t.lastIndexOf("@");if(r<=0)throw Error(`Invalid version file content: "${e}"`);let n=t.substring(0,r),o=t.substring(r+1);return{packageName:n,version:gd(o)}}function vV(e,t){return`${e}@${oo(t)}`}function OV(e,t){console.log(`[world-local] Upgrading from version ${oo(e)} to ${oo(t)}`)}async function SS(e){let t=Ao.resolve(e);try{await xV(t,{recursive:!0})}catch(n){let o=n;if(o.code!=="EEXIST")throw new ca(`Failed to create data directory "${t}": ${o.message}`,t,o.code)}try{await bV(t,TV.R_OK)}catch(n){let o=n;throw new ca(`Data directory "${t}" is not readable: ${o.message}`,t,o.code)}let r=Ao.join(t,`.workflow-write-test-${Date.now()}`);try{await wS(r,""),await FV(r).catch((n)=>{if(n.code!=="ENOENT")throw n})}catch(n){let o=n;throw new ca(`Data directory "${t}" is not writable: ${o.message}`,t,o.code)}}async function HV(e){let t=Ao.join(Ao.resolve(e),DS);try{let r=await yS(t,"utf-8");return LV(r)}catch(r){if(r.code==="ENOENT")return null;throw r}}async function mS(e,t){let r=Ao.join(Ao.resolve(e),DS),n=await ku(),o=vV(n.name,t);await wS(r,o)}function YV(e,t){if(t)return t;return oo(e)}async function bu(e){await SS(e);let t=await ku(),r=gd(t.version),n=await HV(e);if(n===null){await mS(e,r);return}let{version:o}=n;if(oo(o)===oo(r))return;try{OV(o,r),await mS(e,r)}catch(A){let s=A instanceof ld?A.suggestedVersion:void 0,i=YV(o,s);throw console.error(`[world-local] Failed to upgrade data directory from version ${oo(o)} to ${oo(r)}:`,A instanceof Error?A.message:A),console.error(`[world-local] Data is not compatible with the current version. Please downgrade to ${t.name}@${i}`),A}}var Ns=Bt("@workflow/world-local//telemetry",1,()=>({apiPromise:null,tracerPromise:null}));async function fd(){if(!Ns.apiPromise)Ns.apiPromise=import("@opentelemetry/api").catch(()=>null);return Ns.apiPromise}async function VV(){if(!Ns.tracerPromise)Ns.tracerPromise=fd().then((e)=>e?e.trace.getTracer("workflow"):null);return Ns.tracerPromise}async function NS(e,...t){let[r,n]=await Promise.all([VV(),fd()]),{fn:o,opts:A}=typeof t[0]==="function"?{fn:t[0],opts:{}}:{fn:t[1],opts:t[0]};if(!o)throw Error("Function to trace must be provided");if(!r||!n)return await o();return r.startActiveSpan(e,A,async(s)=>{try{let i=await o(s);return s.setStatus({code:n.SpanStatusCode.OK}),i}catch(i){throw s.setStatus({code:n.SpanStatusCode.ERROR,message:i.message}),i}finally{s.end()}})}async function RS(e){let t=await fd();if(!t)return;return t.SpanKind[e]}function Rs(...e){return(t)=>Object.fromEntries(e.map((r)=>[r,t]))}var kS=Rs("peer.service"),bS=Rs("rpc.system"),TS=Rs("rpc.service"),xS=Rs("rpc.method"),hd=Rs("workflow.run.id"),FS=Rs("step.id");var dd={peerService:"world-local",rpcSystem:"local",rpcService:"world-local"},PV={"world.runs.get":0,"world.runs.experimentalSetAttributes":0,"world.steps.get":0,"world.events.create":0,"world.events.get":0},GV=new Set(["world.steps.list","world.events.list","world.hooks.list"]);function $V(e){if(e.length>=2&&typeof e[1]==="object"&&e[1]!==null){let t=e[1];if(typeof t.eventType==="string")return t.eventType}return}function US(e,t){return typeof e[t]==="string"?e[t]:void 0}function JV(e){if(typeof e!=="object"||e===null)return;let t=e.runId;return typeof t==="string"?t:void 0}function WV(e){if(typeof e!=="object"||e===null)return;let t=e;if(typeof t.runId==="string")return t.runId;for(let r of["run","step","hook","wait"]){let n=t[r];if(typeof n==="object"&&n!==null){let o=n.runId;if(typeof o==="string")return o}}return}function zV(e,t,r){let n=`${e}.${t}`,o={},A=PV[n],s=A===void 0?GV.has(n)?JV(r[0]):void 0:US(r,A);if(s)Object.assign(o,hd(s));if(n==="world.steps.get"){let i=US(r,1);if(i)Object.assign(o,FS(i))}return o}function so(e,t){let r={};for(let n of Object.keys(t))if(typeof t[n]!=="function")r[n]=t[n];else{let o=t[n],A=String(n);r[n]=async(...s)=>{let i=`${e}.${A}`;if(e==="world.events"&&A==="create"){let a=$V(s);if(a)i=`${e}.${A} ${a}`}return NS(i,{kind:await RS("INTERNAL")},async(a)=>{a?.setAttributes({...kS(dd.peerService),...bS(dd.rpcSystem),...TS(dd.rpcService),...xS(i),...zV(e,A,s)});let c=await o(...s),u=WV(c);if(u)a?.setAttributes(hd(u));return c})}}return r}import{setTimeout as lg}from"node:timers/promises";St();import{Buffer as MS}from"node:buffer";import LS from"node:http";import vS from"node:https";import{Transform as qV}from"node:stream";import io from"node:zlib";function OS(e){let t={keepAlive:!0,keepAliveMsecs:e.keepAliveMs,maxSockets:e.maxSockets};return{http:new LS.Agent(t),https:new vS.Agent(t)}}function HS(e){e.http.destroy(),e.https.destroy()}var ZV=new Set([204,205,304]),jV="gzip, deflate, br",_S="ETIMEDOUT";function ua(e,t){return Object.assign(Error(e),{code:t})}function KV(e){let t={};return e?.forEach((r,n)=>{t[n]=r}),t}function XV(e){let t=new Headers;for(let[r,n]of Object.entries(e.headers)){if(n===void 0)continue;if(Array.isArray(n))for(let o of n)t.append(r,o);else t.append(r,n)}return t}var Ed={flush:io.constants.Z_SYNC_FLUSH,finishFlush:io.constants.Z_SYNC_FLUSH},eP={flush:io.constants.BROTLI_OPERATION_FLUSH,finishFlush:io.constants.BROTLI_OPERATION_FLUSH};class YS extends qV{inner;_transform(e,t,r){if(!this.inner){if(e.length===0){r();return}let n=(e[0]&15)===8?io.createInflate(Ed):io.createInflateRaw(Ed);n.on("data",(o)=>this.push(o)),n.on("end",()=>this.push(null)),n.on("error",(o)=>this.destroy(o)),this.inner=n}this.inner.write(e,r)}_final(e){if(this.inner)this.inner.end();else this.push(null);e()}_destroy(e,t){this.inner?.destroy(),t(e)}}function tP(e){let t=e.headers["content-encoding"]?.toLowerCase().trim();if(!t||t==="identity")return e;let r;if(t==="gzip"||t==="x-gzip")r=io.createGunzip(Ed);else if(t==="deflate")r=new YS;else if(t==="br")r=io.createBrotliDecompress(eP);else return e;return e.on("error",(n)=>r.destroy(n)),e.on("close",()=>{if(e.complete)return;r.destroy(ua("socket hang up","ECONNRESET"))}),r.on("close",()=>{if(!e.complete)e.destroy()}),e.pipe(r)}function rP(e,t){let r=!1,n=(o)=>{if(r)return;r=!0,t.done(),o()};return new ReadableStream({start(o){e.on("data",(A)=>{if(t.progress(),o.enqueue(new Uint8Array(A)),(o.desiredSize??1)<=0)e.pause()}),e.on("end",()=>n(()=>o.close())),e.on("error",(A)=>n(()=>o.error(t.failure(A)))),e.on("close",()=>n(()=>o.error(t.failure())))},pull(){e.resume()},cancel(o){n(()=>{}),e.destroy?.(o instanceof Error?o:void 0)}})}function VS(e,t={}){let{method:r="GET",headers:n,body:o,signal:A,agents:s,headersTimeoutMs:i,bodyTimeoutMs:a}=t,c=new URL(e),u=c.protocol==="https:";if(!u&&c.protocol!=="http:")return Promise.reject(TypeError(`node:http transport cannot request ${c.protocol}// URLs`));let l=KV(n),g=o==null?void 0:typeof o==="string"?MS.from(o,"utf8"):MS.from(o.buffer,o.byteOffset,o.byteLength);if(g)l["content-length"]=String(g.byteLength);if(!("accept-encoding"in l))l["accept-encoding"]=jV;return new Promise((f,h)=>{if(A?.aborted){h(A.reason);return}let d=!1,I,C,p,w=()=>{clearTimeout(I),clearTimeout(C),I=void 0,C=void 0},x=(u?vS:LS).request(c,{method:r,headers:l,agent:s?u?s.https:s.http:void 0}),b=()=>{if(A?.reason instanceof Error)p=A.reason;x.destroy(A?.reason)};A?.addEventListener("abort",b,{once:!0});let _=()=>{A?.removeEventListener("abort",b)},V=(F)=>{if(w(),_(),d)return;d=!0,h(F)};if(i)x.on("socket",()=>{I=setTimeout(()=>{x.destroy(ua(`no response headers within ${i}ms`,_S))},i)});if(x.on("error",V),x.on("response",(F)=>{clearTimeout(I),I=void 0;let y=F.statusCode??0;if(y<200||y>599){x.destroy(),V(ua(`origin returned an unusable status line (${y})`,"UNSUPPORTED_STATUS"));return}let Y=XV(F),O=F.statusMessage??"";if(ZV.has(y)||r.toUpperCase()==="HEAD"){F.resume(),w(),_(),d=!0,f(new Response(null,{status:y,statusText:O,headers:Y}));return}let S=()=>{if(!a)return;clearTimeout(C),C=setTimeout(()=>{p=ua(`no response body progress for ${a}ms`,_S),x.destroy(p)},a)};S();let E=tP(F);if(E!==F)Y.delete("content-encoding"),Y.delete("content-length");let m=rP(E,{progress:S,done:()=>{w(),_()},failure:(v)=>p??v??ua("socket hang up","ECONNRESET")});d=!0,f(new Response(m,{status:y,statusText:O,headers:Y}))}),g)x.write(g);x.end()})}Is();var mL=Wg(WS(),1);var __filename="/home/runner/work/fx/fx/sdk/durable/node_modules/undici/index.js",zse=Co(),h3=da(),qse=QA(),Zse=Eb(),jse=Bb(),d3=yA(),Kse=tI(),Xse=XE(),eie=gT(),tie=BT(),rie=DT(),E3=se(),EL=ae(),{InvalidArgumentError:ug}=E3,Ii=fx(),nie=aA(),oie=RI(),{MockCallHistory:Aie,MockCallHistoryLog:sie}=TI(),iie=vI(),aie=UI(),cie=QF(),uie=fI(),lie=dl(),{getGlobalDispatcher:I3,setGlobalDispatcher:gie}=Rl(),fie=Xs(),hie=$I();Object.assign(h3.prototype,Ii);var $p=d3;var B3={redirect:TF(),responseError:UF(),retry:_F(),dump:HF(),dns:WF(),cache:RU(),decompress:_U(),deduplicate:YU()},IL={MemoryCacheStore:KI()};var p3=PU();IL.SqliteCacheStore=p3;function mc(e){return(t,r,n)=>{if(typeof r==="function")n=r,r=null;if(!t||typeof t!=="string"&&typeof t!=="object"&&!(t instanceof URL))throw new ug("invalid url");if(r!=null&&typeof r!=="object")throw new ug("invalid opts");if(r&&r.path!=null){if(typeof r.path!=="string")throw new ug("invalid opts.path");let s=r.path;if(!r.path.startsWith("/"))s=`/${s}`;t=new URL(EL.parseOrigin(t).origin+s)}else{if(!r)r=typeof t==="object"?t:{};t=EL.parseURL(t)}let{agent:o,dispatcher:A=I3()}=r;if(o)throw new ug("unsupported opts.agent. Did you mean opts.client?");return e.call(A,{...r,origin:t.origin,path:t.search?`${t.pathname}${t.search}`:t.pathname,method:r.method||(r.body?"PUT":"GET")},n)}}var die=fc().fetch;var m3=OA().Headers,y3=uc().Response,w3=Ai().Request,D3=Ju().FormData;var{setGlobalOrigin:Eie,getGlobalOrigin:Iie}=Xd();var{CacheStorage:C3}=XM(),{kConstruct:Q3}=Ue();var S3=new C3(Q3);var{deleteCookie:pie,getCookies:Cie,getSetCookies:Qie,setCookie:Bie,parseCookie:mie}=l_();var{parseMIMEType:yie,serializeAMimeType:wie}=wr();var{CloseEvent:Die,ErrorEvent:Sie,MessageEvent:Nie}=eg(),{WebSocket:Rie,ping:kie}=z_();var N3=rL().WebSocketStream,R3=Hp().WebSocketError,k3=mc(Ii.request),b3=mc(Ii.stream),T3=mc(Ii.pipeline),x3=mc(Ii.connect),F3=mc(Ii.upgrade);var{EventSource:bie}=dL();Lh();class Jp{contentType="application/json";serialize(e){return Buffer.from(JSON.stringify(e,vt))}async deserialize(e){let t=[],r=e.getReader();while(!0){let{done:o,value:A}=await r.read();if(o)break;if(A)t.push(A)}let n=Buffer.concat(t).toString();return JSON.parse(n,ia)}}var U3=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_MAX_VISIBILITY??"0",10)||1/0,pL=2147483647,M3=1000,CL=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_CONCURRENCY??"0",10)||M3,_3=0,L3=0;function QL(e,t){let r=process.env[e];if(r===void 0||r==="")return t;let n=Number.parseInt(r,10);return Number.isFinite(n)&&n>=0?n:t}function v3(){return{bodyTimeout:QL("WORKFLOW_LOCAL_BODY_TIMEOUT_MS",L3),connections:1000,headersTimeout:QL("WORKFLOW_LOCAL_HEADERS_TIMEOUT_MS",_3),keepAliveTimeout:30000}}var yL="Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer",O3="https://workflow-sdk.dev/docs/getting-started/next#configure-proxy-handler";function BL(e){let t=e,r=new Set;while(t&&typeof t==="object"&&!r.has(t)){if(r.add(t),"message"in t&&typeof t.message==="string"&&t.message.includes(yL))return!0;t="cause"in t?t.cause:void 0}return!1}function wL(e){let t=v3(),r=Ph()?OS({maxSockets:t.connections,keepAliveMs:t.keepAliveTimeout}):void 0,n=r?void 0:new $p(t),o=new Jp,A=eo(),s=new mL.Sema(CL),i=new AbortController,a=i.signal,c=new Map,u=new Map,l=async(d,I,C)=>{let p=[];if(C?.idempotencyKey){let y=c.get(C.idempotencyKey);if(y)return{messageId:y}}let w=o.serialize(I),{prefix:x}=Yh(d),b=Iu.parse(`msg_${A()}`),_=I,V=_.runId??void 0,F=_.stepId??void 0;if(C?.idempotencyKey){let y=C.idempotencyKey;c.set(y,b),p.push(()=>{c.delete(y)})}return(async()=>{if(C?.delaySeconds&&C.delaySeconds>0){let M=Math.min(C.delaySeconds*1000,pL);await lg(M,void 0,{signal:a})}if(!s.tryAcquire())ps(`[world-local]: concurrency limit (${CL}) reached, waiting for queue to free up`),await s.acquire();let Y=256,O=0;try{for(let M=0;M<Y;M++){let S={...C?.headers,"content-type":"application/json","x-vqs-queue-name":d,"x-vqs-message-id":b,"x-vqs-message-attempt":String(O+1)},E=u.get(x),m,v;try{if(E){let N=new Request(yu(pS(e),{type:"flow"}),{method:"POST",headers:S,body:w});m=await E(N)}else{let N=await CS(e),Ae=yu(N,{type:"flow"});m=r?await VS(Ae,{method:"POST",headers:new Headers(S),body:w,agents:r,signal:a,headersTimeoutMs:t.headersTimeout,bodyTimeoutMs:t.bodyTimeout}):await fetch(Ae,{method:"POST",duplex:"half",dispatcher:n,headers:S,body:w,signal:a})}O++,v=await m.text()}catch(N){let Ae=N?.name;if(a.aborted||Ae==="AbortError"||Ae==="ResponseAborted")return;if(BL(N))throw N;console.error(`[world-local] Queue delivery failed at the transport (loop ${M+1}), retrying`,{queueName:d,messageId:b,...V&&{runId:V},...F&&{stepId:F},error:String(N)}),await lg(5000,void 0,{signal:a});continue}if(m.ok){try{let N=Number(JSON.parse(v).timeoutSeconds);if(Number.isFinite(N)&&N>=0){if(N>0){let Ae=Math.min(N*1000,pL);await lg(Ae,void 0,{signal:a})}continue}}catch{}return}console.error(`[world-local] Queue message failed (attempt ${O}, HTTP ${m.status})`,{queueName:d,messageId:b,...V&&{runId:V},...F&&{stepId:F},handlerError:v}),await lg(5000,void 0,{signal:a})}console.error(`[world-local] Queue message exhausted safety limit (${Y} attempts)`,{queueName:d,messageId:b,...V&&{runId:V},...F&&{stepId:F}})}finally{s.release()}})().catch((y)=>{if(!(y?.name==="AbortError"||y?.name==="ResponseAborted"))if(BL(y))console.error(`[local world] Queue operation failed: detected "${yL}". This usually means a Next.js proxy/middleware consumed Workflow's internal request before the executor could read it. Exclude \`/.well-known/workflow/*\` from your matcher. See ${O3}`,{queueName:d,messageId:b,...V&&{runId:V},...F&&{stepId:F},originalError:y});else console.error("[local world] Queue operation failed:",y)}).finally(()=>{for(let y of p)y()}),{messageId:b}},g=H(W({"x-vqs-queue-name":vh,"x-vqs-message-id":Iu,"x-vqs-message-attempt":he.number()}));return{queue:l,createQueueHandler:(d,I)=>async(C)=>{let p=g.safeParse(Object.fromEntries(C.headers));if(!p.success||!C.body)return Response.json({error:!C.body?"Missing request body":"Missing required headers"},{status:400});let w=p.data["x-vqs-queue-name"],x=p.data["x-vqs-message-id"],b=p.data["x-vqs-message-attempt"];if(!w.startsWith(d))return Response.json({error:"Unhandled queue"},{status:400});let _=await new Jp().deserialize(C.body);try{let V=await I(_,{attempt:b,queueName:w,messageId:x});if(typeof _==="object"&&_!==null&&"invoke"in _&&_.invoke===!0)return Response.json({result:V});let F=null;if(typeof V==="object"&&V!==null&&"timeoutSeconds"in V&&typeof V.timeoutSeconds==="number")F=Math.min(V.timeoutSeconds,U3);if(F!=null)return Response.json({timeoutSeconds:F});return Response.json({ok:!0})}catch(V){return Response.json(String(V),{status:500})}},getDeploymentId:async()=>`dpl_local@${(await ku()).version}`,registerHandler(d,I){u.set(d,I)},async close(){if(a.aborted)return;if(i.abort(),r)HS(r);await n?.close()}}}import{createHash as uC}from"node:crypto";import vo from"node:fs/promises";import XA from"node:path";St();Is();ut();var jL=Wg(ZL(),1);function Rc(e){return uC("sha256").update(e).digest("hex")}function KA(e,t,r){let n=r?`${t}.disposed.${r}`:`${t}.disposed`;return Pe(e,".locks","hooks",n)}async function kc(e,t,r){let n=[KA(e,t)];if(r)n.push(KA(e,t,r));for(let o of n){let A;try{A=await vo.readFile(o,"utf8")}catch{continue}if(A.trim()==="")return{committed:!0};try{let i=JSON.parse(A).forceClaimedBy;if(i&&typeof i.runId==="string"&&typeof i.hookId==="string")return{committed:!0,forceClaimedBy:{runId:i.runId,hookId:i.hookId}}}catch{}return{committed:!0}}return{committed:!1}}async function bc(e,t,r){let n=[KA(e,t)];if(r)n.push(KA(e,t,r));for(let o of n)try{return await vo.access(o),!0}catch{}return!1}function mi(e,t,r){let n=r?`${t}.terminal.${r}`:`${t}.terminal`;return Pe(e,".locks","runs",n)}async function yi(e,t,r){let n=[mi(e,t)];if(r)n.push(mi(e,t,r));for(let o of n)try{return await vo.access(o),!0}catch(A){if(A.code!=="ENOENT")throw A}return!1}function cC(e,t,r){let n=r?`${t}.pending.${r}`:`${t}.pending`;return Pe(e,".locks","runs",n)}function yg(e,t,r,n){return XA.join(cC(e,t,n),`${r}.json`)}async function wg(e,t,r){let n=[cC(e,t)];if(r)n.push(cC(e,t,r));for(let o of n){let A;try{A=await vo.readdir(o)}catch(s){if(s.code==="ENOENT")continue;throw s}for(let s of A)try{await Gr(()=>vo.unlink(XA.join(o,s)))}catch(i){if(i.code!=="ENOENT")throw i}await vo.rmdir(o).catch(()=>{})}}async function KL(e,t,r){let n=await Dg(e,t,r),o=Date.now();if(n.maxId)try{let A=Bu(n.maxId.replace(/^evnt_/,""));if(o<=A)o=A+1}catch{}return{eventId:`evnt_${ts(o)}`,createdAt:new Date(o)}}async function Dg(e,t,r){let n=[];try{n=await vo.readdir(XA.join(e,"events"))}catch(u){if(u.code!=="ENOENT")throw u}let o=`${t}-`,A=[],s=null,i=0,a=!1,c=0;for(let u of n){if(!u.startsWith(o)||!u.endsWith(".json"))continue;let l=u.slice(0,-5);if(!oA(l)&&!(r&&ws(l,r)))continue;let g=nn(l).slice(o.length);if(c+=1,A.push(g),!s||g>s)s=g;let f=Kn(g);if(f!==null){if(a=!0,f>i)i=f}}return{maxId:s,usesSlots:a,maxSlot:i,count:c,ids:A}}function es(e,t){return XA.join(e,"hooks","tokens",`${Rc(t)}.json`)}var S6=H(W({hookId:B().optional(),runId:B(),eventId:B().optional(),tokenRetentionUntil:he.date().optional(),claimedFrom:W({runId:B(),hookId:B(),workflowName:B().optional(),deploymentId:B().optional(),runSpecVersion:oe().optional()}).optional()}));async function wi(e){try{return await Oe(e,S6)}catch(t){if(t instanceof SyntaxError||t instanceof Zn)return null;throw t}}async function lC(e,t,r){let n=es(e,t);await vo.mkdir(XA.dirname(n),{recursive:!0});let o=new AbortController,A;try{A=await jL.lock(n,{realpath:!1,stale:30000,update:1000,retries:{retries:350,factor:1,minTimeout:100,maxTimeout:100},onCompromised(i){o.abort(new st("Hook token claim lock was compromised",{cause:i}))}})}catch(i){throw new st("Could not acquire Hook token claim lock",{cause:i})}let s;try{s=await r(o.signal),o.signal.throwIfAborted()}catch(i){if(!o.signal.aborted)await A().catch(()=>{});throw i}try{await A()}catch(i){throw new st("Could not release Hook token claim lock",{cause:i})}return s}function Sg(e,t,r){let n=uC("sha256").update(`${t}\x00${r}`).digest("hex");return XA.join(e,"hooks","resumes",`${n}.json`)}async function Ng(e,t,r,n){await lC(e,t,async(o)=>{let A=es(e,t),s=await wi(A);if(!s)return;if(s.runId===r&&s.hookId===n)o.throwIfAborted(),await ze(A)})}function Oo(e,t,r,n){let o=uC("sha256").update(`${t}\x00${r}\x00${n}`).digest("hex");return XA.join(e,"hooks","tokens",`${o}.recovery.json`)}var N6=Bt("@workflow/world-local//storageMonotonicUlid",1,()=>({next:eo(()=>Math.random())})),ts=(e)=>N6.next(e),Ho=(e)=>{let t=new RegExp(`^${e}_`,"g");return(r)=>{let n=nn(r.replace(/\.json$/,""))+".json",o=n.indexOf("-");if(o===-1){let i=n.replace(/\.json$/,"").replace(t,"");return to(i)}if(e==="step")return null;let s=n.substring(o+1).replace(/\.json$/,"").replace(t,"");return to(s)}};import R6 from"node:fs/promises";import Zr from"node:path";St();ut();var k6=H(W({runId:B()})),b6=H(W({hookId:B(),tag:B().optional()})),T6=".hook-index-complete";function ev(e,t){return Pe(e,"hooks","token-index",Rc(t))}function tv(e,t){return fe("hookId",t),Pe(e,"hooks","id-index",t)}function rv(e){return Pe(e,"hooks","by-run")}function gC(e){let t=nn(e);return t===e?void 0:e.slice(t.length+1)}function x6(e,t){return t?oA(e)||ws(e,t):oA(e)}async function nv(e){try{return await Oe(e,Zi)}catch(t){if(t instanceof SyntaxError||t instanceof Zn)return null;throw t}}async function kg(e,t,r,n,o,A){if(fe("runId",r),fe("eventId",o),A!==void 0)fe("tag",A);let s=A?`${r}-${o}.${A}.json`:`${r}-${o}.json`,i=JSON.stringify({runId:r});await Promise.all([we(Zr.join(ev(e,t),s),i),we(Zr.join(tv(e,n),s),i)])}function fC(e,t,r,n){return ge(e,"hooks/by-run",`${t}-${r}`,n)}async function rs(e,t,r,n){await we(fC(e,t,r,n),JSON.stringify(n?{hookId:r,tag:n}:{hookId:r}))}async function hC(e,t,r,n){if(await ze(fC(e,t,r,n)),n)await ze(fC(e,t,r))}async function bg(e,t){fe("runId",t);let r=rv(e),n=`${t}-`,o=[];for(let A of await mr(r)){if(!A.startsWith(n))continue;let s=null;try{s=await Oe(Zr.join(r,`${A}.json`),b6)}catch(i){if(!(i instanceof SyntaxError||i instanceof Zn))throw i}o.push({fileId:A,hookId:s?.hookId??null,tag:s?.tag})}return o}async function ov(e,t){await ze(Zr.join(rv(e),`${t}.json`))}var Rg=Bt("@workflow/world-local//hookIndexEnsureCache",1,()=>({ensuredBasedirs:new Map}));function Av(){Rg.ensuredBasedirs.clear()}async function Tc(e){let t=Zr.resolve(e),r=Rg.ensuredBasedirs.get(t);if(!r)r=F6(t).catch((n)=>{throw Rg.ensuredBasedirs.delete(t),n}),Rg.ensuredBasedirs.set(t,r);return r}async function XL(e,t,r){for(let n=0;n<e.length;n+=t)await Promise.all(e.slice(n,n+t).map(r))}async function F6(e){let t=Zr.join(e,"hooks",T6);try{await R6.access(t);return}catch{}let r=Zr.join(e,"events");await XL(await mr(r),32,async(o)=>{let A=await nv(Zr.join(r,`${o}.json`));if(!A||A.eventType!=="hook_created")return;if(typeof A.correlationId!=="string")return;let s=A.eventData?.token;if(typeof s!=="string")return;try{await kg(e,s,A.runId,A.correlationId,A.eventId,gC(o))}catch{}});let n=Zr.join(e,"hooks");await XL(await mr(n),32,async(o)=>{let A=null;try{A=await Oe(Zr.join(n,`${o}.json`),_t)}catch(s){if(!(s instanceof SyntaxError||s instanceof Zn))throw s}if(!A)return;try{await rs(e,A.runId,A.hookId,gC(o))}catch{}}),await we(t,"")}async function sv(e,t,r,n){await Tc(e);let o;try{o=t.kind==="token"?ev(e,t.token):tv(e,t.hookId)}catch{return null}let A=(i,a)=>{let c=nn(i);return c.startsWith(`${a}-`)?c.slice(a.length+1):c},s=(await mr(o)).filter((i)=>x6(i,n)).sort((i,a)=>nn(a).localeCompare(nn(i)));for(let i of s){let a=null;try{a=await Oe(Zr.join(o,`${i}.json`),k6)}catch(g){if(!(g instanceof SyntaxError||g instanceof Zn))throw g}if(!a)continue;let c=A(i,a.runId),u;try{u=ge(e,"events",`${a.runId}-${c}`,gC(i))}catch{continue}let l=await nv(u);if(!l)continue;if(l.eventType!=="hook_created")continue;if(typeof l.correlationId!=="string")continue;if(!await r(l))continue;return l}return null}import DC from"node:assert";import Dv from"node:fs/promises";import Mc from"node:path";St();ut();St();function xc(e,t){if(t==="none"){let{dynamicWorkflowCode:r,...n}=e;return{...n,input:void 0,output:void 0}}return e}function iv(e,t){if(t==="none")return{...e,input:void 0,output:void 0};return e}function dC(e,t){if(t==="none"){let{metadata:r,...n}=e;return n}return e}import EC from"node:path";St();ut();function U6(e){if(e.eventType!=="hook_created")return;let t=e.eventData.token;return typeof t==="string"?t:void 0}function IC(e){let{token:t,metadata:r,isWebhook:n,isSystem:o,tokenRetentionUntil:A,forceClaimedFrom:s}=e.eventData;return{runId:e.runId,hookId:e.correlationId,token:t,...s!==void 0&&{claimedFrom:s},metadata:r,ownerId:"local-owner",projectId:"local-project",environment:"local",createdAt:e.createdAt,specVersion:e.specVersion,isWebhook:n??!0,isSystem:o??!1,tokenRetentionUntil:A}}function av(e,t){return e.eventType==="hook_created"&&typeof e.correlationId==="string"&&t(e)}async function cv(e,t,r){let n=await ye(e,"runs",t,Mt,r);return n?Ut(n.status):!1}async function uv(e,t,r,n){let o=async(s)=>{if(await cv(e,s.runId,n)){let i=s.eventData.tokenRetentionUntil;if(!i||i.getTime()<=Date.now())return!1}return!await bc(e,s.correlationId,n)},A=await sv(e,t,(s)=>av(s,r)&&o(s),n);return A&&av(A,r)?A:null}async function lv(e,t,r){let n=IC(t),o=es(e,n.token);return await we(o,JSON.stringify({token:n.token,hookId:n.hookId,runId:n.runId,eventId:t.eventId,tokenRetentionUntil:t.eventData.tokenRetentionUntil,...n.claimedFrom&&{claimedFrom:n.claimedFrom}})),await rs(e,n.runId,n.hookId,r),await we(ge(e,"hooks",n.hookId,r),JSON.stringify(n,vt,2)),n}async function pC(e,t,r){let n=await uv(e,{kind:"token",token:t},(o)=>U6(o)===t,r);return n?lv(e,n,r):null}async function M6(e,t,r){let n=await uv(e,{kind:"id",hookId:t},(o)=>o.correlationId===t,r);return n?lv(e,n,r):null}function gv(e,t){async function r(a){if(await bc(e,a.hookId,t))return!1;if(a.tokenRetentionUntil&&a.tokenRetentionUntil.getTime()>Date.now())return!0;return!await cv(e,a.runId,t)}async function n(a){let c=await kc(e,a.hookId,t);return c.committed&&c.forceClaimedBy!==void 0}async function o(a){let c=await wi(es(e,a));if(c?.hookId)try{let f=await ye(e,"hooks",c.hookId,_t,t);if(f?.token===a){if(await r(f))return{...f,isWebhook:f.isWebhook??!0};if(!await n(f))throw new Vr(a)}else if(f)return null}catch(f){if(!ys.is(f))throw f;return null}let u=EC.join(e,"hooks"),l=await mr(u),g=!1;for(let f of l){let h=EC.join(u,`${f}.json`),d=await Oe(h,_t);if(d?.token===a){if(await r(d))return{...d,isWebhook:d.isWebhook??!0};if(await n(d)){g=!0;continue}throw new Vr(a)}}if(g)throw new Vr(a);return null}async function A(a,c){fe("hookId",a);let u=await ye(e,"hooks",a,_t,t);if(u&&!await r(u))throw new Vr(a);let l=u??await M6(e,a,t);if(!l)throw new Vr(a);let g=c?.resolveData||gt;return dC({...l,isWebhook:l.isWebhook??!0},g)}async function s(a){let c=await o(a)??await pC(e,a,t);if(!c)throw new Vr(a);return c}async function i(a){let c=EC.join(e,"hooks"),u=a.resolveData||gt,l=await on({directory:c,schema:_t,sortOrder:a.pagination?.sortOrder??"asc",limit:a.pagination?.limit,cursor:a.pagination?.cursor,filePrefix:void 0,filter:async(g)=>{if(a.runId&&g.runId!==a.runId)return!1;return r(g)},getCreatedAt:()=>null,getId:(g)=>g.hookId});return{...l,data:l.data.map((g)=>dC(g,u))}}return{get:A,getByToken:s,list:i}}async function Di(e,t){await Tc(e);for(let r of await bg(e,t)){if(r.hookId){let n=null,o=null;try{o=ge(e,"hooks",r.hookId,r.tag),n=await Oe(o,_t)}catch(A){if(!ys.is(A)&&!(A instanceof SyntaxError||A instanceof Zn))throw A}if(n&&o&&n.runId===t){if(n.tokenRetentionUntil&&n.tokenRetentionUntil.getTime()>Date.now())continue;await Ng(e,n.token,n.runId,n.hookId),await ze(Oo(e,n.token,n.runId,n.hookId)),await ze(o)}}await ov(e,r.fileId)}}import V6 from"node:fs/promises";St();St();ut();import wC from"node:path";import{EventEmitter as _6}from"node:events";import hv from"node:fs/promises";import pt from"node:path";Is();ut();var L6=Bt("@workflow/world-local//streamerMonotonicUlid",1,()=>({next:eo(()=>Math.random())})),CC=(e)=>L6.next(e),yC=H(W({streams:Sn(B())})),dv=1;function Fc(e){return e===dv}function xg(e){let t=Buffer.from([e.eof?dv:0]);return Buffer.concat([t,e.chunk])}function v6(e){return Fc(e[0])}function QC(e){let t=v6(e),r=Buffer.from(e.subarray(1));return{eof:t,chunk:r}}async function Ev(e){try{return await hv.readdir(e)}catch(t){if(t.code==="ENOENT")return[];throw t}}function BC(e,t,r,n=r,o=()=>!0){for(let A of t){if(!A.endsWith(r))continue;let s=A.slice(0,-r.length);if(o(s))e.set(s,n)}}function Uc(e,t){return fe("streamName",t),pt.join(e,t)}async function Tg(e,t,r){let n=Uc(e,t),o=await Ev(n),A=new Map;if(BC(A,o,".json"),BC(A,o,".bin",".bin",r?(i)=>!i.endsWith(`.${r}`):void 0),r){let i=`.${r}.bin`;BC(A,o,i)}return{files:[...A.keys()].sort(),extMap:A,dir:n}}var fv=`chnk_${"0".repeat(26)}`;async function Iv(e,t,r){let n=pt.join(e,"streams","chunks"),o=r?`.${r}`:"",A;try{fe("runId",t),A=(await ye(e,"streams/runs",t,yC,r))?.streams??[]}catch(s){mC(`streams of ${t}`,s);return}for(let s of A)try{let i=Uc(n,s);await Br(pt.join(i,`${fv}${o}.bin`),xg({chunk:Buffer.from([]),eof:!0}),{overwrite:!0});for(let a of await Ev(i)){if(a.startsWith(fv))continue;if(!a.endsWith(".bin")&&!a.endsWith(".json"))continue;await Gr(()=>hv.unlink(pt.join(i,a))).catch((c)=>{if(c.code!=="ENOENT")mC(a,c)})}}catch(i){mC(s,i)}}function mC(e,t){console.warn(`[world-local] Failed to purge stream data for ${e}:`,t instanceof Error?t.message:t)}function pv(e,t){let r=t?`.${t}`:"",n=new _6,o=new Set;async function A(i,a){fe("runId",i),fe("streamName",a);let c=`${i}:${a}`;if(o.has(c))return;let u=ge(e,"streams/runs",i,t),g=(await ye(e,"streams/runs",i,yC,t))?.streams??[];if(!g.includes(a))g.push(a),await We(u,{streams:g},{overwrite:!0});o.add(c)}function s(i){if(typeof i==="string")return Buffer.from(new TextEncoder().encode(i));else if(i instanceof Buffer)return i;else return Buffer.from(i)}return{streams:{async write(i,a,c){let u=`chnk_${CC()}`,l=await i;await A(l,a);let g=s(c),f=xg({chunk:g,eof:!1}),h=pt.join(Uc(pt.join(e,"streams","chunks"),a),`${u}${r}.bin`);await Br(h,f);let d=Uint8Array.from(g);n.emit(`chunk:${a}`,{streamName:a,chunkData:d,chunkId:u})},async writeMulti(i,a,c){if(c.length===0)return;let u=c.map(()=>`chnk_${CC()}`),l=await i;await A(l,a);let f=c.map((h)=>s(h)).map(async(h,d)=>{let I=u[d],C=xg({chunk:h,eof:!1}),p=pt.join(Uc(pt.join(e,"streams","chunks"),a),`${I}${r}.bin`);return await Br(p,C),{chunkId:I,chunkData:Uint8Array.from(h)}});for(let h of f){let{chunkId:d,chunkData:I}=await h;n.emit(`chunk:${a}`,{streamName:a,chunkData:I,chunkId:d})}},async close(i,a){let c=`chnk_${CC()}`,u=await i;await A(u,a);let l=pt.join(Uc(pt.join(e,"streams","chunks"),a),`${c}${r}.bin`);await Br(l,xg({chunk:Buffer.from([]),eof:!0})),n.emit(`close:${a}`,{streamName:a})},async list(i){return fe("runId",i),(await ye(e,"streams/runs",i,yC,t))?.streams??[]},async getChunks(i,a,c){let u=c?.limit??100,l=pt.join(e,"streams","chunks"),{files:g,extMap:f,dir:h}=await Tg(l,a,t),d=0;if(c?.cursor)try{d=JSON.parse(Buffer.from(c.cursor,"base64").toString("utf-8")).i}catch{d=0}let I=!1,C=[],p=0;for(let _ of g){let V=f.get(_)??".bin",F=pt.join(h,`${_}${V}`);if(p<d){if(Fc(await aa(F))){I=!0;break}p++;continue}if(C.length>=u){if(Fc(await aa(F)))I=!0;else p++;break}let y=QC(await Ds(F));if(y.eof){I=!0;break}C.push({index:p,data:Uint8Array.from(y.chunk)}),p++}let w=!I&&p>d+C.length,x=d+C.length,b=w?Buffer.from(JSON.stringify({i:x})).toString("base64"):null;return{data:C,cursor:b,hasMore:w,done:I}},async getInfo(i,a){let c=pt.join(e,"streams","chunks"),{files:u,extMap:l,dir:g}=await Tg(c,a,t),f=!1,h=0;for(let d of u){let I=l.get(d)??".bin";if(Fc(await aa(pt.join(g,`${d}${I}`)))){f=!0;break}h++}return{tailIndex:h-1,done:f}},async get(i,a,c=0){let u=pt.join(e,"streams","chunks"),l=()=>{},g=null,f=!1;return new ReadableStream({async start(h){let d=new Set,I=[],C=!0,p=!1,w=(M)=>{if(M.chunkData.byteLength===0){d.add(M.chunkId);return}if(C)d.add(M.chunkId),I.push({chunkId:M.chunkId,chunkData:Uint8Array.from(M.chunkData)});else if(!d.has(M.chunkId))d.add(M.chunkId),h.enqueue(Uint8Array.from(M.chunkData))},x=()=>{if(C){p=!0;return}f=!0,l();try{h.close()}catch{}};l=()=>{if(n.off(`chunk:${a}`,w),n.off(`close:${a}`,x),g)clearInterval(g),g=null},n.on(`chunk:${a}`,w),n.on(`close:${a}`,x);let{files:b,extMap:_,dir:V}=await Tg(u,a,t),F=b.length;if(typeof c==="number"&&c<0&&b.length>0){let M=b[b.length-1],S=_.get(M)??".bin";if(Fc(await aa(pt.join(V,`${M}${S}`))))F--}let y=typeof c==="number"&&c<0?Math.max(0,F+c):c,Y=!1;for(let M=y;M<b.length;M++){let S=b[M],E=S;if(d.has(E))continue;let m=_.get(S)??".bin",v=QC(await Ds(pt.join(V,`${S}${m}`)));if(v?.eof===!0){Y=!0;break}if(d.add(E),v.chunk.byteLength)h.enqueue(Uint8Array.from(v.chunk))}C=!1,I.sort((M,S)=>M.chunkId.localeCompare(S.chunkId));for(let M of I)h.enqueue(Uint8Array.from(M.chunkData));if(Y){f=!0,l();try{h.close()}catch{}return}if(p){f=!0,l();try{h.close()}catch{}return}for(let M=0;M<y&&M<b.length;M++)d.add(b[M]);if(f){l();return}let O=!1;g=setInterval(async()=>{if(O)return;O=!0;try{let{files:M,extMap:S}=await Tg(u,a,t);for(let E of M){let m=E;if(d.has(m))continue;d.add(m);let v=S.get(E)??".bin",N=QC(await Ds(pt.join(V,`${E}${v}`)));if(N?.eof===!0){f=!0,l();try{h.close()}catch{}return}if(f)return;if(N.chunk.byteLength)h.enqueue(Uint8Array.from(N.chunk))}}catch(M){if(!(M instanceof Error&&("code"in M)))console.error("[world-local] Unexpected polling error:",M)}finally{O=!1}},100)},cancel(){f=!0,l()}})}}}}function Ug(e){let t=mh(e);if(t.unsupported)console.warn(`[world-local] Ignoring unrecognized ${Bh} value ${JSON.stringify(t.raw)}; keeping the run's data.`);return t.mode==="none"}function Mg(e,t){return{...e,input:void 0,output:void 0,error:void 0,dynamicWorkflowCode:void 0,expiredAt:t}}async function _g(e,t,r){await Promise.all([Cv(wC.join(e,"steps"),t,(n)=>{n.input=void 0,n.output=void 0,n.error=void 0}),Cv(wC.join(e,"events"),t,(n)=>{let o=n.eventData;if(!o||typeof o!=="object")return;for(let A of hs(String(n.eventType)))delete o[A];if(n.eventType==="run_created"||n.eventType==="run_started")delete o.dynamicWorkflowCode,delete o.dynamicWorkflowCodeRef}),O6(e,t),Iv(e,t,r)])}var Qv=pr(B(),ls()),Ur=Rw((e)=>{if(e&&typeof e==="object"&&"eventType"in e&&"eventData"in e){let t=e.eventData;if(t&&typeof t==="object"){for(let r of hs(String(e.eventType)))if(!(r in t))t[r]=void 0}}return e},Zi);async function Cv(e,t,r){let n;try{n=await mr(e)}catch(o){Fg(e,o);return}for(let o of n){if(!o.startsWith(`${t}-`))continue;let A=wC.join(e,`${o}.json`);try{let s=await Oe(A,Qv);if(!s)continue;r(s),await We(A,s,{overwrite:!0})}catch(s){Fg(A,s)}}}async function O6(e,t){let r;try{await Tc(e),r=await bg(e,t)}catch(n){Fg(`hooks of ${t}`,n);return}for(let n of r){if(!n.hookId)continue;try{let o=ge(e,"hooks",n.hookId,n.tag),A=await Oe(o,Qv);if(!A||A.runId!==t)continue;A.metadata=void 0,await We(o,A,{overwrite:!0})}catch(o){Fg(n.hookId,o)}}}function Fg(e,t){console.warn(`[world-local] Failed to purge user data for ${e}:`,t instanceof Error?t.message:t)}St();import{EventEmitter as H6}from"node:events";var Lg=new H6;Lg.setMaxListeners(0);var Y6=100;function Bv(){return du("WORKFLOW_LOCAL_RUN_STATUS_POLL_INTERVAL_MS",Y6,{integer:!0,min:1})}function vg(e){Lg.emit(`run:${e}`)}function mv(e,t,r){if(t<=0||r?.aborted)return Promise.resolve();return new Promise((n)=>{let o=`run:${e}`,A=!1,s=()=>{if(A)return;A=!0,clearTimeout(i),Lg.off(o,s),r?.removeEventListener("abort",s),n()},i=setTimeout(s,t);Lg.once(o,s),r?.addEventListener("abort",s,{once:!0})})}async function P6(e,t,r,n,o,A){if(Ut(A.status)||await yi(e,t))throw new Pr(`Workflow run "${t}" is already in a terminal state`);let s=yg(e,t,r);await we(s,n);try{if(await yi(e,t))throw new Pr(`Workflow run "${t}" is already in a terminal state`);if(await Ru(s,o)!=="linked")throw new Pr(`Workflow run "${t}" is already in a terminal state`)}finally{await V6.unlink(s).catch(()=>{})}}async function yv(e,t,r,n,o){fe("runId",t);let A=o?.resolveData??gt;switch(r.eventType){case"run_cancelled":{await we(mi(e,t),""),await wg(e,t);let s=new Date,i={runId:n.runId,deploymentId:n.deploymentId,workflowName:n.workflowName,specVersion:n.specVersion,executionContext:n.executionContext,input:n.input,createdAt:n.createdAt,expiredAt:n.expiredAt,startedAt:n.startedAt,status:"cancelled",output:void 0,error:void 0,completedAt:s,updatedAt:s,attributes:n.attributes},a=Ug(i.attributes),c=a?Mg(i,s):i,u=Pe(e,"runs",`${t}.json`);if(await We(u,c,{overwrite:!0}),vg(t),await Di(e,t),a)await _g(e,t,void 0);return{event:void 0,run:xc(c,A)}}case"wait_completed":case"hook_received":{let s=`evnt_${ts()}`,a={...r,runId:t,eventId:s,createdAt:new Date,specVersion:rA},c=`${t}-${s}`,u=Pe(e,"events",`${c}.json`);if(r.eventType==="hook_received")await P6(e,t,s,JSON.stringify(a,vt,2),u,n);else await We(u,a);return{event:nr(a,A)}}default:throw Error(`Event type '${r.eventType}' not supported for legacy runs (specVersion: ${n.specVersion||"undefined"}). Please upgrade 'workflow' package.`)}}import G6 from"node:path";St();var Og=Bt("@workflow/world-local//runFileLocks",1,()=>({byKey:new Map}));function Hg(e,t){let r=Og.byKey.get(e),n={},o=(async()=>{if(r)await r.catch(()=>{return});try{return await t()}finally{if(Og.byKey.get(e)===n.task)Og.byKey.delete(e)}})();return n.task=o,Og.byKey.set(e,o),o}function wv(e,t){let r=async(n,o)=>{fe("runId",n);let A=await ye(e,"runs",n,Mt,t);if(!A)throw new no(n);let s=o?.resolveData??gt;return xc(A,s)};return{get:r,waitForTerminalStatus:async(n,o)=>{let A=Date.now()+(o?.timeoutMs??0);while(!0){let s=await r(n,o);if(Ut(s.status))return s;let i=A-Date.now();if(i<=0||o?.signal?.aborted)return s;await mv(n,Math.min(i,Bv()),o?.signal)}},getMany:async(n,o)=>{let A=[...new Set(n)],s=await Promise.all(A.map(async(a)=>{try{return await r(a,o)}catch(c){if(c instanceof no)return null;throw c}})),i=new Map(A.map((a,c)=>[a,s[c]]));return n.map((a)=>i.get(a)??null)},list:async(n)=>{let o=n?.resolveData??gt,A=await on({directory:G6.join(e,"runs"),schema:Mt,fileIdFilter:n?.fileIdFilter,filter:(s)=>{if(n?.workflowName&&s.workflowName!==n.workflowName)return!1;if(n?.status!==void 0){if(!(Array.isArray(n.status)?n.status:[n.status]).includes(s.status))return!1}return!0},sortOrder:n?.pagination?.sortOrder??"desc",limit:n?.pagination?.limit??200,cursor:n?.pagination?.cursor,getCreatedAt:Ho("wrun"),getId:(s)=>s.runId});if(o==="none")return{...A,data:A.data.map((s)=>xc(s,"none"))};return A},experimentalSetAttributes:async(n,o,A)=>(fe("runId",n),Hg(n,async()=>{let s=await ye(e,"runs",n,Mt,t);if(!s)throw new no(n);try{Xo(o,{existingKeys:Object.keys(s.attributes??{}),allowReservedAttributes:A?.allowReservedAttributes})}catch(c){if(c instanceof $t)throw c;throw c}let i=zi(s.attributes,o),a={...s,attributes:i,updatedAt:new Date};return await We(ge(e,"runs",n,t),a,{overwrite:!0}),{attributes:i}}))}}var xv=86400000,$6=1000;function J6(){let e=Number(process.env.WORKFLOW_LOCAL_HOOK_RETENTION_LIMIT_DAYS??30);if(!Number.isFinite(e)||e<=0)throw new st("WORKFLOW_LOCAL_HOOK_RETENTION_LIMIT_DAYS must be a positive number",{status:400});return e*xv}var W6=H(W({eventId:B()})),SC=H(W({runId:B(),resumeId:B(),hookId:B(),eventId:B(),payloadDigest:B().optional()}));function Vg(e,t){return e.eventType==="hook_received"&&e.correlationId===t.hookId&&(e.resumeId===void 0||e.resumeId===t.resumeId)}async function Sv(e,t,r,n){let o=await Dg(e,t,n);for(let A of o.ids){let s=await ye(e,"events",`${t}-${A}`,Ur,n);if(s&&s.resumeId===r.resumeId&&Vg(s,r))return s}return null}async function z6(e,t,r){if(t.hookId&&await bc(e,t.hookId,r))return!0;let n=await ye(e,"runs",t.runId,Mt,r);if(!n)return!0;if(!Ut(n.status))return!1;return!t.tokenRetentionUntil||t.tokenRetentionUntil.getTime()<=Date.now()}async function q6(e){try{return await Oe(e,W6)}catch(t){if(t instanceof SyntaxError||t instanceof Zn)return null;throw t}}function Nv(e){return na(e.eventId)?e.eventId:null}function Rv(e,t){let r=nn(t).slice(e.length+1);return na(r)?r:null}async function kv(e,t,r){return(await on({directory:Mc.join(e,"events"),schema:Ur,filePrefix:`${t}-`,filter:(o)=>o.eventType==="hook_created"&&o.correlationId===r,limit:1,getCreatedAt:Ho("evnt"),getId:(o)=>o.eventId})).data[0]?.eventId??null}async function bv(e,t,r,n,o){let A=`${t}-${n}`,s=await ye(e,"events",A,Ur,o);if(!s||s.eventType!=="hook_created"||s.correlationId!==r)return;if(await ye(e,"hooks",r,_t,o))return;let a=IC(s);await kg(e,a.token,t,r,n,o),await rs(e,t,r,o),await we(ge(e,"hooks",r,o),JSON.stringify(a,vt,2))}async function Z6(e,t,r,n,o){let A=Oo(e,t,r,n),s=JSON.stringify({eventId:o});if(await we(A,s))return o;return(await q6(A))?.eventId??null}function Tv(e,t,r){let n=e.get(t),o={},A=(async()=>{if(n)await n.catch(()=>{return});try{return await r()}finally{if(e.get(t)===o.task)e.delete(t)}})();return o.task=A,e.set(t,A),A}async function NC(e,t){let r=Mc.join(e,"waits"),n=await mr(r);for(let o of n)if(o.startsWith(`${t}-`)){let A=Mc.join(r,`${o}.json`);await ze(A)}}async function Yg(e,t,r,n){return Hg(t,async()=>{let A=(await Oe(ge(e,"runs",t,r),Mt))?.attributes??n.attributes,s={...n,attributes:A},i=Ut(s.status)&&Ug(A);if(i)s=Mg(s,new Date);if(await We(ge(e,"runs",t,r),s,{overwrite:!0}),Ut(s.status))vg(t);return{run:s,purged:i}})}function Fv(e,t){let r=J6(),n=4194304,o=$6,A=new Map,s=new Map,i=new Map,a=0;function c(S){let E=A.get(S);if(!E)return;A.delete(S),a-=s.get(S)??0,s.delete(S);let m=i.get(E.runId);if(m?.delete(S),m?.size===0)i.delete(E.runId)}function u(S){for(let E of i.get(S)??[])c(E)}function l(){A.clear(),s.clear(),i.clear(),a=0,g.clear()}let g=new Map;function f(S){return t?`${S}.${t}`:S}async function h(S,E){let m=`${S}-${jn(E)}`;for(let v of t?[ge(e,"events",m,t),ge(e,"events",m)]:[ge(e,"events",m)])try{return await Dv.stat(v),!0}catch(N){if(N.code!=="ENOENT")throw N}return!1}async function d(S,E){let m=f(S),v=g.get(m);if(v===void 0||E?.rescan){let Ae=await Dg(e,S,t);if(v===void 0)v=Ae.count>0&&!Ae.usesSlots?null:{published:Ae.maxSlot},g.set(m,v);else if(v!==null)v.published=Math.max(v.published,Ae.maxSlot)}if(v===null)return null;let N=Math.max(v.published+1,ta,E?.atLeast??ta);while(await h(S,N))v.published=Math.max(v.published,N),N+=1;return N}function I(S,E){let m=Kn(E);if(m===null)return;let v=g.get(f(S));if(v)v.published=Math.max(v.published,m)}async function C(S){let E=await d(S);return E===null?`evnt_${ts()}`:jn(E)}async function p(S){let E=await d(S,{rescan:!0});if(E!==null)return{eventId:jn(E),createdAt:new Date};return KL(e,S,t)}function w(S,E,m){if(m>4194304)return;while(A.size>0&&(A.size>=o||a+m>4194304)){let N=A.keys().next().value;c(N)}A.set(S,E),s.set(S,m),a+=m;let v=i.get(E.runId)??new Set;v.add(S),i.set(E.runId,v)}function x(S,E,m){if(qi(S.eventType)){u(S.runId);return}let v=Buffer.byteLength(m);if(v>4194304)return;let N=Ur.safeParse(JSON.parse(m,ia));if(N.success)w(E,N.data,v)}async function b(S){let E=S;for(let m=0;;m++){let v=ge(e,"events",`${E.runId}-${E.eventId}`,t),N=JSON.stringify(E,vt,2),Ae=Kn(E.eventId);if(Ae===null)return await Br(v,N),x(E,v,N),E;if(await we(v,N))return I(E.runId,E.eventId),x(E,v,N),E;let Ie=await d(E.runId,{rescan:m>0&&m%8===0,atLeast:Ae+1});DC(Ie!==null),E={...E,eventId:jn(Ie)}}}async function _(S,E){let m=await kc(e,S,t);if(!m.committed)return;if(m.forceClaimedBy)throw new wu(typeof E==="string"?E:"",m.forceClaimedBy.runId,m.forceClaimedBy.hookId);throw new Vr(S)}let V=(S,E)=>on({directory:Mc.join(e,"events"),schema:Ur,cachedItems:A,filePrefix:`${S}-`,sortOrder:E.sortOrder??"asc",limit:E.limit,cursor:E.cursor,getCreatedAt:Ho("evnt"),getId:(m)=>m.eventId,getSortKey:Nv,getSortKeyFromFileId:(m)=>Rv(S,m)}),F=new Map,y=new Map,Y={clearCache:l,async create(S,E,m){if(E.eventType==="hook_created"&&E.eventData.tokenRetentionUntil!==void 0&&E.eventData.tokenRetentionUntil.getTime()>Date.now()+r)throw new st(`Hook minimum retention cannot exceed ${r/xv} days in the Local World.`,{status:400});if(S!=null&&S!=="")fe("runId",S);if("correlationId"in E&&typeof E.correlationId==="string")fe("correlationId",E.correlationId);if(lu(E.eventType)&&S&&E.correlationId){let N=t?`${S}-${E.correlationId}.${t}`:`${S}-${E.correlationId}`;return Tv(F,N,v)}if(Rh(E.eventType)&&S&&E.correlationId){let N=t?`${S}-${E.correlationId}.hook.${t}`:`${S}-${E.correlationId}.hook`;return Tv(y,N,v)}return v();async function v(){let N="",Ae=!1,Ie=null,le=new Date,U;if(E.eventType==="run_created"&&(!S||S===""))U=`wrun_${ts()}`;else if(!S)throw Error("runId is required for non-run_created events");else U=S;if(E.eventType==="run_created"&&S&&S!==""){let T=ed(U,"wrun_");if(T)throw new st(T)}let Xt=E.specVersion??rA,G=null,Ov=["step_completed","step_retrying"];if(E.eventType!=="run_created"&&!Ov.includes(E.eventType)){if(G=await ye(e,"runs",U,Mt,t),E.eventType==="run_started"&&!G&&"eventData"in E&&E.eventData){let T=E.eventData;if(T.deploymentId&&T.workflowName&&T.input!==void 0){Xo(Object.entries(T.attributes??{}).map(([ce,Ke])=>({key:ce,value:Ke})),{allowReservedAttributes:T.allowReservedAttributes===!0});let P={runId:U,deploymentId:T.deploymentId,status:"pending",workflowName:T.workflowName,specVersion:Xt,executionContext:T.executionContext,input:T.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:T.attributes??{},encryptionPublicKey:T.encryptionPublicKey,dynamicWorkflowCode:T.dynamicWorkflowCode,createdAt:le,updatedAt:le},ie=ge(e,"runs",U,t);if(await we(ie,JSON.stringify(P,vt))){let ce=await C(U),Ke={eventType:"run_created",runId:U,eventId:ce,createdAt:le,specVersion:Xt,eventData:{deploymentId:T.deploymentId,workflowName:T.workflowName,input:T.input,executionContext:T.executionContext,attributes:T.attributes,allowReservedAttributes:T.allowReservedAttributes,encryptionPublicKey:T.encryptionPublicKey}};await b(Ke),G=P}else G=await ye(e,"runs",U,Mt,t)}}}if(N=await C(U),!G&&(E.eventType==="run_failed"||E.eventType==="attr_set"||E.eventType==="run_started"))throw new no(U);if(G){if(Kh(G.specVersion))throw new id(G.specVersion,rA);if(jh(G.specVersion))return yv(e,U,E,G,m&&{resolveData:$h(m.resolveData)})}let kC=Th(E),_c=kC&&E.eventType==="step_started";if(G&&Ut(G.status)){if(E.eventType==="run_cancelled"&&G.status==="cancelled"){let T=await b({...E,runId:U,eventId:N,createdAt:le,specVersion:Xt}),P=m?.resolveData??gt;return{event:nr(T,P),run:G,...G?{maxEvents:Rn()}:{}}}if(E.eventType==="run_started")throw new Pr(`Workflow run "${U}" is already in terminal state "${G.status}"`);if(qi(E.eventType))throw new Le(`Cannot transition run from terminal state "${G.status}"`);if(kC)throw new Le(`Cannot create new entities on run in terminal state "${G.status}"`);if(E.eventType==="attr_set")throw new Le(`Cannot set attributes on run in terminal state "${G.status}"`)}let je=null;if(lu(E.eventType)&&E.eventType!=="step_created"&&E.correlationId){let T=`${U}-${E.correlationId}`;if(je=await ye(e,"steps",T,tA,t),!je&&!_c)throw new st(`Step "${E.correlationId}" not found`);if(_c&&je)throw new Le(`Step "${E.correlationId}" already created`);if(je){if(gu(je.status))throw new Le(`Cannot modify step in terminal state "${je.status}"`);if(G&&Ut(G.status)){if(je.status!=="running"||E.eventType==="step_started")throw new Pr(`Cannot ${E.eventType==="step_started"?"start":"modify non-running"} step on run in terminal state "${G.status}"`)}}}if(kh(E.eventType)&&E.correlationId){if(E.eventType==="hook_received"&&m?.resumeId){let P=await Oe(Sg(e,U,m.resumeId),SC);if(P&&P.hookId===E.correlationId&&(!m.resumePayloadDigest||!P.payloadDigest||P.payloadDigest===m.resumePayloadDigest)){let ie=await ye(e,"events",`${U}-${P.eventId}`,Ur,t),Ee=ie&&Vg(ie,P)?ie:await Sv(e,U,P,t);if(Ee)return{event:Ee}}}if(E.eventType==="hook_received")await _(E.correlationId,E.eventData?.token);if(!await ye(e,"hooks",E.correlationId,_t,t))throw new Vr(E.correlationId);if(E.eventType==="hook_received"&&m?.resumeId){let P=Sg(e,U,m.resumeId),ie=async(ce)=>{if(ce.hookId!==E.correlationId)throw new Le(`hook_received resumeId "${m.resumeId}" already recorded for a different hook`);if(m.resumePayloadDigest&&ce.payloadDigest&&ce.payloadDigest!==m.resumePayloadDigest)throw new Le(`hook_received resumeId "${m.resumeId}" already recorded with a different payload`);let Ke=await ye(e,"events",`${U}-${ce.eventId}`,Ur,t);if(Ke&&Vg(Ke,ce))return{event:Ke};let ct=await Sv(e,U,ce,t);if(ct)return{event:ct};if(Ie=ce.eventId,!Ke)N=ce.eventId,Ae=!0;return null},Ee=await Oe(P,SC);if(Ee){let ce=await ie(Ee);if(ce)return ce}else if(Ae=!na(N),Ie=N,!await we(P,JSON.stringify({runId:U,resumeId:m.resumeId,hookId:E.correlationId,eventId:N,...m.resumePayloadDigest?{payloadDigest:m.resumePayloadDigest}:{}}))){Ie=null;let Ke=await Oe(P,SC);if(Ke){let ct=await ie(Ke);if(ct)return ct}}}}let Si,Re={...E,runId:U,eventId:N,createdAt:le,specVersion:Xt,...E.eventType==="hook_received"&&m?.resumeId?{resumeId:m.resumeId}:{}};if(E.eventType==="run_started"&&"eventData"in Re)delete Re.eventData;if(Re.eventType==="run_created"&&Re.eventData){let{dynamicWorkflowCode:T,dynamicWorkflowCodeRef:P,...ie}=Re.eventData;Re={...Re,eventData:ie}}if(_c&&Re.eventType==="step_started"&&Re.eventData){let{input:T,...P}=Re.eventData;Re={...Re,eventData:P}}let _r,Ni=!1,hr,Yo,Ri,bC=!1,TC;if(qi(E.eventType)&&G){await we(mi(e,U,t),""),await wg(e,U,t);let T=await p(U);N=T.eventId,Re={...Re,eventId:N,createdAt:T.createdAt}}if(E.eventType==="run_created"&&"eventData"in E){let T=E.eventData;Xo(Object.entries(T.attributes??{}).map(([Ee,ce])=>({key:Ee,value:ce})),{allowReservedAttributes:T.allowReservedAttributes===!0}),_r={runId:U,deploymentId:T.deploymentId,status:"pending",workflowName:T.workflowName,specVersion:Xt,executionContext:T.executionContext,input:T.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:T.attributes??{},encryptionPublicKey:T.encryptionPublicKey,dynamicWorkflowCode:T.dynamicWorkflowCode,createdAt:le,updatedAt:le};let P=ge(e,"runs",U,t);if(!await we(P,JSON.stringify(_r,vt,2)))throw new Le(`Workflow run "${U}" already exists`)}else if(E.eventType==="run_started"){if(G){if(G.status==="running"){if(m?.skipPreload)return{run:G,maxEvents:Rn()};let P=await V(U,{limit:Rn()});return{run:G,events:P.data,cursor:P.cursor,hasMore:P.hasMore,maxEvents:Rn()}}let T=await Yg(e,U,t,{runId:G.runId,deploymentId:G.deploymentId,workflowName:G.workflowName,specVersion:G.specVersion,executionContext:G.executionContext,input:G.input,createdAt:G.createdAt,expiredAt:G.expiredAt,status:"running",output:void 0,error:void 0,completedAt:void 0,startedAt:G.startedAt??le,updatedAt:le,attributes:G.attributes,encryptionPublicKey:G.encryptionPublicKey,dynamicWorkflowCode:G.dynamicWorkflowCode});_r=T.run,Ni=T.purged}}else if(E.eventType==="run_completed"&&"eventData"in E){let T=E.eventData;if(G){let P=await Yg(e,U,t,{runId:G.runId,deploymentId:G.deploymentId,workflowName:G.workflowName,specVersion:G.specVersion,executionContext:G.executionContext,input:G.input,createdAt:G.createdAt,expiredAt:G.expiredAt,startedAt:G.startedAt,status:"completed",output:T.output,error:void 0,completedAt:le,updatedAt:le,attributes:G.attributes,encryptionPublicKey:G.encryptionPublicKey,dynamicWorkflowCode:G.dynamicWorkflowCode});_r=P.run,Ni=P.purged,await Promise.all([Di(e,U),NC(e,U)])}}else if(E.eventType==="run_failed"&&"eventData"in E){let T=E.eventData;if(G){let P=await Yg(e,U,t,{runId:G.runId,deploymentId:G.deploymentId,workflowName:G.workflowName,specVersion:G.specVersion,executionContext:G.executionContext,input:G.input,createdAt:G.createdAt,expiredAt:G.expiredAt,startedAt:G.startedAt,status:"failed",output:void 0,error:T.error,errorCode:T.errorCode,completedAt:le,updatedAt:le,attributes:G.attributes,encryptionPublicKey:G.encryptionPublicKey,dynamicWorkflowCode:G.dynamicWorkflowCode});_r=P.run,Ni=P.purged,await Promise.all([Di(e,U),NC(e,U)])}}else if(E.eventType==="run_cancelled"){if(G){let T=await Yg(e,U,t,{runId:G.runId,deploymentId:G.deploymentId,workflowName:G.workflowName,specVersion:G.specVersion,executionContext:G.executionContext,input:G.input,createdAt:G.createdAt,expiredAt:G.expiredAt,startedAt:G.startedAt,status:"cancelled",output:void 0,error:void 0,completedAt:le,updatedAt:le,attributes:G.attributes,encryptionPublicKey:G.encryptionPublicKey,dynamicWorkflowCode:G.dynamicWorkflowCode});_r=T.run,Ni=T.purged,await Promise.all([Di(e,U),NC(e,U)])}}else if(E.eventType==="attr_set"&&G)_r=await Hg(U,async()=>{let T=await Oe(ge(e,"runs",U,t),Mt);if(!T)throw new no(U);if(Xo(E.eventData.changes,{existingKeys:Object.keys(T.attributes),allowReservedAttributes:E.eventData.allowReservedAttributes===!0}),E.correlationId&&E.eventData.writer.type==="workflow"){let ie=t?`${U}-${E.correlationId}.created.${t}`:`${U}-${E.correlationId}.created`,Ee=Pe(e,".locks","attributes",ie);if(!await we(Ee,""))throw new Le(`Attribute event "${E.correlationId}" already exists`)}let P={...T,attributes:zi(T.attributes,E.eventData.changes),updatedAt:le};return await We(ge(e,"runs",U,t),P,{overwrite:!0}),P});else if(E.eventType==="step_created"&&"eventData"in E){let T=t?`${U}-${E.correlationId}.created.${t}`:`${U}-${E.correlationId}.created`,P=Pe(e,".locks","steps",T);if(!await we(P,""))throw new Le(`Step "${E.correlationId}" already created`);let Ee=E.eventData;hr={runId:U,stepId:E.correlationId,stepName:Ee.stepName,status:"pending",input:Ee.input,output:void 0,error:void 0,attempt:0,startedAt:void 0,completedAt:void 0,createdAt:le,updatedAt:le,specVersion:Xt};let ce=`${U}-${E.correlationId}`;await We(ge(e,"steps",ce,t),hr)}else if(E.eventType==="step_started"){if(!je&&_c){let T=E.eventData,P=t?`${U}-${E.correlationId}.created.${t}`:`${U}-${E.correlationId}.created`,ie=Pe(e,".locks","steps",P);if(!await we(ie,""))throw new Le(`Step "${E.correlationId}" already created`);else{let ce={runId:U,stepId:E.correlationId,stepName:T.stepName,status:"pending",input:T.input,output:void 0,error:void 0,attempt:0,startedAt:void 0,completedAt:void 0,createdAt:le,updatedAt:le,specVersion:Xt};await We(ge(e,"steps",`${U}-${E.correlationId}`,t),ce);let Ke=await C(U),ct={eventType:"step_created",runId:U,eventId:Ke,createdAt:le,specVersion:Xt,correlationId:E.correlationId,eventData:{stepName:T.stepName,input:T.input}};await b(ct),je=ce,bC=!0}}if(je){if(je.retryAfter&&je.retryAfter.getTime()>Date.now())throw new sd(`Cannot start step "${E.correlationId}": retryAfter timestamp has not been reached yet`,{retryAfter:Math.ceil((je.retryAfter.getTime()-Date.now())/1000)});let T=`${U}-${E.correlationId}`,P=await ye(e,"steps",T,tA,t);if(P&&gu(P.status))throw new Le(`Cannot modify step in terminal state "${P.status}"`);hr={...je,status:"running",startedAt:je.startedAt??le,attempt:je.attempt+1,retryAfter:void 0,updatedAt:le},await We(ge(e,"steps",T,t),hr,{overwrite:!0})}}else if(E.eventType==="step_completed"&&"eventData"in E){let T=E.eventData;if(je){let P=`${U}-${E.correlationId}`,ie=t?`${P}.terminal.${t}`:`${P}.terminal`,Ee=Pe(e,".locks","steps",ie);if(!await we(Ee,""))throw new Le("Cannot modify step in terminal state");hr={...je,status:"completed",output:T.result,completedAt:le,updatedAt:le},await We(ge(e,"steps",P,t),hr,{overwrite:!0})}}else if(E.eventType==="step_failed"&&"eventData"in E){let T=E.eventData;if(je){let P=`${U}-${E.correlationId}`,ie=t?`${P}.terminal.${t}`:`${P}.terminal`,Ee=Pe(e,".locks","steps",ie);if(!await we(Ee,""))throw new Le("Cannot modify step in terminal state");hr={...je,status:"failed",error:T.error,completedAt:le,updatedAt:le},await We(ge(e,"steps",P,t),hr,{overwrite:!0})}}else if(E.eventType==="step_retrying"&&"eventData"in E){let T=E.eventData;if(je){let P=`${U}-${E.correlationId}`;hr={...je,status:"pending",error:T.error,retryAfter:T.retryAfter,updatedAt:le},await We(ge(e,"steps",P,t),hr,{overwrite:!0})}}else if(E.eventType==="hook_created"&&"eventData"in E){let T=E.eventData,P=es(e,T.token),ie,Ee=()=>JSON.stringify({token:T.token,hookId:E.correlationId,runId:U,eventId:N,tokenRetentionUntil:T.tokenRetentionUntil,...ie&&{claimedFrom:ie}}),ce=await lC(e,T.token,async(ct)=>{let Fe=await wi(P);if(!Fe)ct.throwIfAborted(),await ze(P),await pC(e,T.token,t),Fe=await wi(P);if(!Fe)return ct.throwIfAborted(),DC(await we(P,Ee())),{status:"claimed"};if(Fe.runId===U&&Fe.hookId===E.correlationId)return{status:"owned",claim:Fe};if(!await z6(e,Fe,t)){if(T.force!==!0||!Fe.hookId)return{status:"conflict",claim:Fe};ct.throwIfAborted();let Lr=await ye(e,"runs",Fe.runId,Mt,t),jr=Lr!==null&&!Ut(Lr.status);if(ie={runId:Fe.runId,hookId:Fe.hookId,...jr&&{workflowName:Lr.workflowName,deploymentId:Lr.deploymentId,runSpecVersion:Lr.specVersion}},jr&&(Lr.specVersion??Cu)<oa)return{status:"conflict",claim:Fe,forceRefusedReason:"victim-spec-version"};let vr=await kv(e,U,E.correlationId);if(vr)N=vr,Si={...Re,eventId:N};else Si=await b({...Re,eventData:{...Re.eventData,forceClaimedFrom:ie}}),N=Si.eventId;await rs(e,U,E.correlationId,t),await We(ge(e,"hooks",E.correlationId,t),{runId:U,hookId:E.correlationId,token:T.token,metadata:T.metadata,ownerId:"local-owner",projectId:"local-project",environment:"local",createdAt:le,specVersion:Xt,isWebhook:T.isWebhook??!1,isSystem:T.isSystem??!1,tokenRetentionUntil:T.tokenRetentionUntil,claimedFrom:ie},{overwrite:!0});let Lc=await we(KA(e,Fe.hookId,t),JSON.stringify({forceClaimedBy:{runId:U,hookId:E.correlationId}}));if(jr){if(Lc){let $g={eventType:"hook_disposed",correlationId:Fe.hookId,eventData:{token:T.token,forceClaimedBy:{runId:U,hookId:E.correlationId}},runId:Fe.runId,eventId:await C(Fe.runId),createdAt:new Date,specVersion:Lr.specVersion};await b($g)}}}if(ct.throwIfAborted(),ie)await Br(P,Ee(),{overwrite:!0});else await ze(P);if(Fe.hookId)await ze(ge(e,"hooks",Fe.hookId,t)),await ze(Oo(e,T.token,Fe.runId,Fe.hookId)),await hC(e,Fe.runId,Fe.hookId,t);if(ct.throwIfAborted(),!ie)DC(await we(P,Ee()));return{status:"claimed"}});if(ce.status==="owned"&&ce.claim.claimedFrom)ie=ce.claim.claimedFrom;if(ce.status==="owned"){let ct=ce.claim,Fe;if(ct.eventId)Fe=ct.eventId;else{let jr=await kv(e,U,E.correlationId);if(jr!==null)throw await bv(e,U,E.correlationId,jr,t),new Le(`Hook "${E.correlationId}" already created`);let vr=await Z6(e,T.token,U,E.correlationId,N);if(vr===null)throw new Le(`Hook "${E.correlationId}" already created`);Fe=vr}N=Fe,Ae=!0;let Lr=to(N.replace(/^evnt_/,""))??le;Re={...E,eventData:{...E.eventData,tokenRetentionUntil:ct.tokenRetentionUntil},runId:U,eventId:N,createdAt:Lr,specVersion:Xt}}if(ce.status==="conflict"){let ct=ce.claim,Fe={eventType:"hook_conflict",correlationId:E.correlationId,eventData:{token:T.token,conflictingRunId:ct.runId,...ce.forceRefusedReason!==void 0&&{forceRefusedReason:ce.forceRefusedReason}},runId:U,eventId:N,createdAt:le,specVersion:Xt},Lr=await b(Fe),jr=m?.resolveData??gt,vr=typeof m?.sinceCursor==="string"?await V(U,{sortOrder:"asc",cursor:m.sinceCursor}):void 0,Lc={event:nr(Lr,jr),run:_r,step:hr,hook:void 0};if(!vr)return Lc;return{...Lc,events:jr==="none"?vr.data.map(($g)=>nr($g,jr)):vr.data,cursor:vr.cursor,hasMore:vr.hasMore}}if(ie)Re={...Re,eventData:{...Re.eventData,forceClaimedFrom:ie}};let Ke=Re.eventData;Yo={runId:U,hookId:E.correlationId,token:Ke.token,metadata:Ke.metadata,ownerId:"local-owner",projectId:"local-project",environment:"local",createdAt:Re.createdAt,specVersion:Xt,isWebhook:Ke.isWebhook??!1,isSystem:Ke.isSystem??!1,tokenRetentionUntil:Ke.tokenRetentionUntil,...ie&&{claimedFrom:ie}},TC=ce.status==="owned"||ie?{overwrite:!0}:void 0,await kg(e,T.token,U,E.correlationId,N,t)}else if(E.eventType==="hook_disposed"){let T=KA(e,E.correlationId,t);if(!await we(T,""))throw new Le(`Hook "${E.correlationId}" already disposed`);let ie=ge(e,"hooks",E.correlationId,t),Ee=await ye(e,"hooks",E.correlationId,_t,t);if(Ee)await Ng(e,Ee.token,Ee.runId,Ee.hookId),await ze(Oo(e,Ee.token,Ee.runId,Ee.hookId));await ze(ie),await hC(e,U,E.correlationId,t)}else if(E.eventType==="wait_created"&&"eventData"in E){let T=`${U}-${E.correlationId}`,P=t?`${T}.created.${t}`:`${T}.created`,ie=Pe(e,".locks","waits",P);if(!await we(ie,""))throw new Le(`Wait "${E.correlationId}" already exists`);let ce=E.eventData;Ri={waitId:T,runId:U,status:"waiting",resumeAt:ce.resumeAt,completedAt:void 0,createdAt:le,updatedAt:le,specVersion:Xt},await We(ge(e,"waits",T,t),Ri)}else if(E.eventType==="wait_completed"){let T=`${U}-${E.correlationId}`,P=t?`${T}.completed.${t}`:`${T}.completed`,ie=Pe(e,".locks","waits",P);if(!await we(ie,""))throw new Le(`Wait "${E.correlationId}" already completed`);let ce=await ye(e,"waits",T,Mh,t);if(!ce)throw await Dv.unlink(ie).catch(()=>{}),new st(`Wait "${E.correlationId}" not found`);Ri={...ce,status:"completed",completedAt:le,updatedAt:le},await We(ge(e,"waits",T,t),Ri,{overwrite:!0})}if(E.eventType==="hook_received"&&E.correlationId)await _(E.correlationId,E.eventData?.token);if(E.eventType==="hook_created"&&E.correlationId){let T=await kc(e,E.correlationId,t);if(T.committed&&T.forceClaimedBy)throw new Le(`Hook "${E.correlationId}" was force-claimed by another run before its creation was journaled`)}let ki=ge(e,"events",`${U}-${N}`,t),bi=JSON.stringify(Re,vt,2),Hv=async(T)=>{let P=Kn(N);if(Ae||P===null)return!1;let ie=await d(U,{rescan:T>0&&T%8===0,atLeast:P+1});if(ie===null)return!1;return N=jn(ie),Re={...Re,eventId:N},ki=ge(e,"events",`${U}-${N}`,t),bi=JSON.stringify(Re,vt,2),!0},ns=!1;if(Si)Re=Si,ki=ge(e,"events",`${U}-${N}`,t),bi=JSON.stringify(Re,vt,2),ns=!0;for(let T=0;!ns;T++){if(E.eventType==="hook_received"){let P=await yi(e,U,t),ie=P?null:await ye(e,"runs",U,Mt,t);if(P||ie&&Ut(ie.status))throw new Pr(`Workflow run "${U}" is already in a terminal state`);let Ee=yg(e,U,`${N}.${ts()}`,t);if(!await we(Ee,bi))throw new st(`Failed to stage event "${N}" for run "${U}": staging path already exists`);try{if(await yi(e,U,t))throw new Pr(`Workflow run "${U}" is already in a terminal state`);let Ke=await Ru(Ee,ki);if(Ke==="missing")throw new Pr(`Workflow run "${U}" is already in a terminal state`);ns=Ke==="linked"}finally{await ze(Ee).catch(()=>{})}}else ns=await we(ki,bi);if(ns){I(U,N);break}if(E.eventType==="hook_received"&&m?.resumeId){let P=await ye(e,"events",`${U}-${N}`,Ur,t);if(P&&Vg(P,{runId:U,resumeId:m.resumeId,hookId:E.correlationId,eventId:N}))return{event:P}}if(E.eventType==="hook_created"&&E.correlationId){let P=await ye(e,"events",`${U}-${N}`,Ur,t);if(P?.eventType==="hook_created"&&P.correlationId===E.correlationId)break}if(!await Hv(T))break}if(!ns){if(E.eventType==="hook_created"&&E.correlationId)await bv(e,U,E.correlationId,N,t);throw new Le(`Event "${N}" already exists for run "${U}"`)}if(x(Re,ki,bi),E.eventType==="hook_received"&&m?.resumeId&&Ie!==null&&Ie!==N)await Br(Sg(e,U,m.resumeId),JSON.stringify({runId:U,resumeId:m.resumeId,hookId:E.correlationId,eventId:N,...m.resumePayloadDigest?{payloadDigest:m.resumePayloadDigest}:{}}),{overwrite:!0});if(Yo&&E.eventType==="hook_created")await rs(e,Yo.runId,Yo.hookId,t),await We(ge(e,"hooks",Yo.hookId,t),Yo,TC);if(Ni)await _g(e,U,t),u(U);let Gg=m?.resolveData??gt,Yv=nr(Re,Gg),os;if(E.eventType==="run_started"&&_r&&!m?.skipPreload)os=await V(U,{limit:Rn()});if(typeof m?.sinceCursor==="string"){let T=await V(U,{sortOrder:"asc",cursor:m.sinceCursor});os=Gg==="none"?{...T,data:T.data.map((P)=>nr(P,Gg))}:T}let xC={event:Yv,run:_r,step:hr,hook:Yo,wait:Ri,...bC?{stepCreated:!0}:{},..._r?{maxEvents:Rn()}:{}};if(!os)return xC;return{...xC,events:os.data,cursor:os.cursor,hasMore:os.hasMore}}},async get(S,E,m){fe("runId",S),fe("eventId",E);let v=`${S}-${E}`,N=await ye(e,"events",v,Ur,t);if(!N)throw Error(`Event ${E} in run ${S} not found`);let Ae=m?.resolveData??gt;return nr(N,Ae)},async list(S){let{runId:E}=S;fe("runId",E);let m=S.resolveData??gt,v=await V(E,{...S.pagination,limit:S.pagination?.limit??Rn()});if(m==="none")return{...v,data:v.data.map((N)=>nr(N,m))};return v},async listByCorrelationId(S){let E=S.correlationId;fe("correlationId",E),fe("runId",S.runId);let m=S.resolveData??gt,v=await on({directory:Mc.join(e,"events"),schema:Ur,cachedItems:A,filePrefix:`${S.runId}-`,filter:(N)=>N.correlationId===E,sortOrder:S.pagination?.sortOrder??"asc",limit:S.pagination?.limit,cursor:S.pagination?.cursor,getCreatedAt:Ho("evnt"),getId:(N)=>N.eventId,getSortKey:Nv,getSortKeyFromFileId:(N)=>Rv(S.runId,N)});if(m==="none")return{...v,data:v.data.map((N)=>nr(N,m))};return v}};async function O(S,E,m){if(!S.event)return S;let v=Kn(S.event.eventId);if(v===null||E<ta||v<=E+1)return S;let N=v-E-1,Ae=await Y.list({runId:S.event.runId,pagination:{cursor:`${sa}${jn(E)}`,limit:N,sortOrder:"asc"},resolveData:m}),Ie=S.event.eventId,le=Ae.data.filter((U)=>U.eventId<Ie);return{...S,events:le,cursor:null,hasMore:le.length<v-E-1}}return{...Y,create:async(S,E,m)=>{if(m?.eventCount===void 0)return Y.create(S,E,m);let v=m.resolveData??gt,N=await Y.create(S,E,m);if(typeof m.sinceCursor==="string")return N;return O(N,m.eventCount,v)}}}St();import j6 from"node:fs/promises";import K6 from"node:path";function Uv(e){let t=K6.join(e,"snapshots");function r(n){return fe("runId",n),Pe(t,`${n}.snapshot`)}return{async save(n,o,A){await Su(t),await Br(r(n),Buffer.from(zh(A,o)),{overwrite:!0})},async load(n){let o;try{o=await Ds(r(n))}catch(A){if(A.code==="ENOENT")return null;throw A}return qh(new Uint8Array(o.buffer,o.byteOffset,o.byteLength))},async delete(n){await j6.rm(r(n),{force:!0})}}}St();import X6 from"node:path";function Mv(e,t){return{get:async(r,n,o)=>{fe("runId",r),fe("stepId",n);let A=`${r}-${n}`,s=await ye(e,"steps",A,tA,t);if(!s)throw Error(`Step ${n} in run ${r} not found`);let i=o?.resolveData??gt;return iv(s,i)},list:async(r)=>{fe("runId",r.runId);let n=r.resolveData??gt,o=await on({directory:X6.join(e,"steps"),schema:tA,filePrefix:`${r.runId}-`,sortOrder:r.pagination?.sortOrder??"desc",limit:r.pagination?.limit,cursor:r.pagination?.cursor,getCreatedAt:Ho("step"),getId:(A)=>A.stepId});if(n==="none")return{...o,data:o.data.map((A)=>({...A,input:void 0,output:void 0}))};return o}}}function RC(e,t){let r=wv(e,t),n=Mv(e,t),o=Fv(e,t),A=gv(e,t),s=Uv(e);return{runs:so("world.runs",r),steps:so("world.steps",n),events:so("world.events",o),hooks:so("world.hooks",A),experimental_snapshots:so("world.experimental_snapshots",s),clearCache:()=>o.clearCache()}}function _v(e){let t=e?Object.fromEntries(Object.entries(e).filter(([,a])=>a!==void 0)):{},r={...ES.value,...t};uS(r.dataDir);let n=r.tag,o=wL(r),{clearCache:A,...s}=RC(r.dataDir,n),i=IS(r);return{specVersion:Zh(),capabilities:{hookRetention:{active:!0},dynamicWorkflowCode:!0,hookResumeDedup:!0,hookForceClaim:!0},...o,...s,...so("world.streams",{...pv(r.dataDir,n),...r.streamFlushIntervalMs!==void 0&&{streamFlushIntervalMs:r.streamFlushIntervalMs}}),async start(){if(await bu(r.dataDir),!i)return;let a=n?(u)=>ws(u,n):oA,c={...s.runs,list:(u)=>s.runs.list({...u,fileIdFilter:a})};await Gh(c,o.queue,"world-local")},async close(){A(),await o.close()},async clear(){if(A(),n){let a=r.dataDir,c=Mr.join(a,"hooks"),u=await Nu(c,n);await Promise.resolve().then(() => St());await Promise.all(u.map(async(d)=>{let I=await Oe(Mr.join(c,d),_t);if(I?.token)await ze(Mr.join(c,"tokens",`${Rc(I.token)}.json`)),await ze(Oo(a,I.token,I.runId,I.hookId))})),await Promise.all(["runs","steps","events","hooks","hooks/by-run","waits","streams/runs"].map(async(d)=>{let I=Mr.join(a,d),C=await Nu(I,n);await Promise.all(C.map((p)=>ze(Mr.join(I,p))))}));for(let d of["token-index","id-index"]){let I=Mr.join(a,"hooks",d),C;try{C=await Pg.readdir(I,{withFileTypes:!0})}catch{C=[]}await Promise.all(C.filter((p)=>p.isDirectory()).map(async(p)=>{let w=Mr.join(I,p.name),x=await Nu(w,n);await Promise.all(x.map((b)=>ze(Mr.join(w,b))))}))}await Pg.rm(Mr.join(a,".locks"),{recursive:!0,force:!0}).catch(()=>{});let f=Mr.join(a,"streams","chunks"),h;try{h=await Pg.readdir(f,{withFileTypes:!0})}catch{h=[]}await Promise.all(h.filter((d)=>d.isDirectory()).map(async(d)=>{let I=Mr.join(f,d.name),C=await BS(I,n,".bin");await Promise.all(C.map((p)=>Pg.unlink(Mr.join(I,p)).catch(()=>{})))})),cd()}else cd(),Av(),await e7(r.dataDir,{recursive:!0,force:!0}),await bu(r.dataDir)}}}var t7=Symbol.for("libfx.durability");function Lv(e,t={}){let r=typeof e==="function";if(!r&&!(e&&typeof e==="object"))throw TypeError("world() takes a World or a function that creates one");if(!t||typeof t!=="object"||Array.isArray(t))throw TypeError("world() options must be an object");let{name:n="world",livenessKnown:o=!1,queueDurable:A=!1,pollMs:s,leaseMs:i,maxDurationMs:a,reserveMs:c,alive:u,holderInfo:l,gatewayKey:g}=t;if(typeof n!=="string"||n.length===0)throw TypeError("world() name must be a non-empty string");for(let[f,h]of Object.entries({livenessKnown:o,queueDurable:A}))if(typeof h!=="boolean")throw TypeError(`${n}() ${f} must be a boolean`);if(s!==void 0&&!(Number.isSafeInteger(s)&&s>0))throw TypeError(`${n}() pollMs must be a positive integer`);if(i!==void 0&&!(Number.isSafeInteger(i)&&i>=1000))throw TypeError(`${n}() leaseMs must be an integer of at least 1000`);for(let[f,h]of Object.entries({maxDurationMs:a,reserveMs:c}))if(h!==void 0&&!(Number.isSafeInteger(h)&&h>=0))throw TypeError(`${n}() ${f} must be a non-negative integer`);for(let[f,h]of Object.entries({alive:u,holderInfo:l,gatewayKey:g}))if(h!==void 0&&typeof h!=="function")throw TypeError(`${n}() ${f} must be a function`);if(o&&!u)throw TypeError(`${n}() livenessKnown needs alive()`);return{[t7]:!0,name:n,world:r?e:()=>e,owned:r,livenessKnown:o,queueDurable:A,...s===void 0?{}:{pollMs:s},...i===void 0?{}:{leaseMs:i},...a===void 0?{}:{maxDurationMs:a},...c===void 0?{}:{reserveMs:c},...u===void 0?{}:{alive:u},...l===void 0?{}:{holderInfo:l},...g===void 0?{}:{gatewayKey:g}}}var vv=r7();function Cue({dir:e,maxDurationMs:t,reserveMs:r}={}){if(e!==void 0&&(typeof e!=="string"||e.length===0))throw TypeError("local() dir must be a path");return Lv(()=>_v({...e===void 0?{}:{dataDir:e},recoverActiveRuns:!1}),{name:"local",livenessKnown:!0,queueDurable:!1,pollMs:250,maxDurationMs:t,reserveMs:r,holderInfo:()=>({pid:process.pid,host:vv}),alive(n){if(n.host!==vv||!Number.isSafeInteger(n.pid))return null;try{return process.kill(n.pid,0),!0}catch(o){return o?.code==="EPERM"}}})}export{Cue as local};
|