eve 0.27.11 → 0.27.13
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/CHANGELOG.md +16 -0
- package/dist/src/chunks/{use-eve-agent-CTJrwXM2.js → use-eve-agent-CWYe-vqE.js} +29 -18
- package/dist/src/chunks/{use-eve-agent-DaWxEtnE.js → use-eve-agent-CsSQOKnp.js} +29 -18
- package/dist/src/cli/commands/channels.js +1 -1
- package/dist/src/cli/commands/integration-setup.js +1 -1
- package/dist/src/cli/commands/register-registry-commands.js +1 -1
- package/dist/src/cli/commands/registry-setup-command.d.ts +5 -3
- package/dist/src/cli/commands/registry-setup-command.js +1 -1
- package/dist/src/cli/commands/registry.d.ts +9 -3
- package/dist/src/cli/commands/registry.js +1 -1
- package/dist/src/cli/dev/tui/remote-connection-probe.js +1 -1
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/target.d.ts +3 -15
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/cli/invoke/command.d.ts +32 -0
- package/dist/src/cli/invoke/command.js +1 -0
- package/dist/src/cli/invoke/invoke.d.ts +27 -0
- package/dist/src/cli/invoke/invoke.js +1 -0
- package/dist/src/cli/invoke/result.d.ts +313 -0
- package/dist/src/cli/invoke/result.js +1 -0
- package/dist/src/cli/run.d.ts +2 -0
- package/dist/src/cli/run.js +3 -3
- package/dist/src/client/client.js +1 -1
- package/dist/src/client/message-response.js +1 -1
- package/dist/src/client/session-utils.d.ts +21 -15
- package/dist/src/client/session-utils.js +1 -1
- package/dist/src/client/session.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +5 -5
- package/dist/src/compiled/@workflow/core/capabilities.d.ts +6 -0
- package/dist/src/compiled/@workflow/core/encryption.d.ts +15 -2
- package/dist/src/compiled/@workflow/core/flushable-stream.d.ts +26 -0
- package/dist/src/compiled/@workflow/core/index.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/index.js +2 -2
- package/dist/src/compiled/@workflow/core/private.d.ts +76 -33
- package/dist/src/compiled/@workflow/core/private.js +1 -1
- package/dist/src/compiled/@workflow/core/replay-payload-cache.d.ts +3 -2
- package/dist/src/compiled/@workflow/core/runtime/count-step-started-events.d.ts +52 -0
- package/dist/src/compiled/@workflow/core/runtime/helpers.d.ts +41 -12
- package/dist/src/compiled/@workflow/core/runtime/resume-hook.d.ts +2 -2
- package/dist/src/compiled/@workflow/core/runtime/step-executor.d.ts +9 -8
- package/dist/src/compiled/@workflow/core/runtime/world.d.ts +2 -7
- package/dist/src/compiled/@workflow/core/runtime.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/runtime.js +3 -3
- package/dist/src/compiled/@workflow/core/sealed-box.d.ts +167 -0
- package/dist/src/compiled/@workflow/core/serialization/client.d.ts +3 -3
- package/dist/src/compiled/@workflow/core/serialization/codec.d.ts +6 -4
- package/dist/src/compiled/@workflow/core/serialization/encryption.d.ts +118 -17
- package/dist/src/compiled/@workflow/core/serialization/step.d.ts +4 -4
- package/dist/src/compiled/@workflow/core/serialization/types.d.ts +20 -0
- package/dist/src/compiled/@workflow/core/serialization-format.d.ts +44 -4
- package/dist/src/compiled/@workflow/core/serialization.d.ts +21 -21
- package/dist/src/compiled/@workflow/core/set-attributes.d.ts +2 -7
- package/dist/src/compiled/@workflow/core/step/context-storage.d.ts +2 -2
- package/dist/src/compiled/@workflow/core/symbols.d.ts +23 -10
- package/dist/src/compiled/@workflow/core/telemetry/semantic-conventions.d.ts +4 -4
- package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/workflow/abort-controller.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/workflow/index.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/workflow/set-attributes.d.ts +0 -9
- package/dist/src/compiled/@workflow/core/workflow.js +1 -1
- package/dist/src/compiled/@workflow/errors/index.d.ts +1 -1
- package/dist/src/compiled/@workflow/world/events.d.ts +5 -0
- package/dist/src/compiled/@workflow/world/hooks.d.ts +27 -0
- package/dist/src/compiled/@workflow/world/index.d.ts +2 -2
- package/dist/src/compiled/@workflow/world/interfaces.d.ts +8 -6
- package/dist/src/compiled/@workflow/world/queue.d.ts +30 -26
- package/dist/src/compiled/@workflow/world/runs.d.ts +5 -0
- package/dist/src/compiled/@workflow/world/spec-version.d.ts +3 -4
- package/dist/src/compiled/@workflow/world-local/index.js +4 -4
- package/dist/src/compiled/@workflow/world-vercel/index.js +5 -5
- package/dist/src/compiled/_chunks/workflow/{attribute-changes-B6ltn-ph.js → attribute-changes-DeZc2RZz.js} +2 -2
- package/dist/src/compiled/_chunks/workflow/{dist-D7ANgxe0.js → dist-WjtNsOyf.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/private-Cre8uYkA.js +1 -0
- package/dist/src/compiled/_chunks/workflow/resume-hook-ip1hbn1b.js +1 -0
- package/dist/src/compiled/_chunks/workflow/run-CWytxfIp.js +1 -0
- package/dist/src/compiled/_chunks/workflow/sleep-BjrUxUcs.js +1 -0
- package/dist/src/compiled/_chunks/workflow/wait-until-De9yESQN.js +15 -0
- package/dist/src/compiled/_chunks/workflow/{workflow-routes-Pd-WKcx_.js → workflow-routes-CwqB063q.js} +1 -1
- package/dist/src/evals/cli/eval-client.js +1 -1
- package/dist/src/evals/session.js +1 -1
- package/dist/src/execution/web-fetch/request.js +1 -1
- package/dist/src/internal/application/compiled-artifacts.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/node-esm-compat-banner.js +1 -1
- package/dist/src/internal/workflow/builtins.d.ts +2 -2
- package/dist/src/internal/workflow/development-world-protocol.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-core-shim.d.ts +5 -5
- package/dist/src/internal/workflow-bundle/workflow-core-shim.js +1 -1
- package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.7/node_modules/@workflow/utils/dist/world-target.js +1 -0
- package/dist/src/public/channels/linear/defaults.js +4 -2
- package/dist/src/runtime/attributes/emit.js +1 -1
- package/dist/src/services/dev-client/client-options.d.ts +2 -0
- package/dist/src/services/dev-client/client-options.js +1 -1
- package/dist/src/services/dev-client/target.d.ts +17 -0
- package/dist/src/services/dev-client/target.js +1 -0
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/setup/verified-remote-client.d.ts +5 -1
- package/dist/src/setup/verified-remote-client.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/channels/linear.mdx +4 -0
- package/docs/extensions.md +3 -1
- package/docs/install-integrations.mdx +76 -1
- package/docs/reference/cli.md +28 -1
- package/package.json +8 -8
- package/dist/src/compiled/@workflow/core/runtime/step-handler.d.ts +0 -2
- package/dist/src/compiled/_chunks/workflow/private-DolBHKOQ.js +0 -1
- package/dist/src/compiled/_chunks/workflow/resume-hook-D2AqAGjq.js +0 -1
- package/dist/src/compiled/_chunks/workflow/run-BMRZ6pA-.js +0 -1
- package/dist/src/compiled/_chunks/workflow/sleep-CrgsokmG.js +0 -1
- package/dist/src/compiled/_chunks/workflow/wait-until-B-1TiJji.js +0 -15
- package/dist/src/node_modules/.pnpm/@workflow_utils@5.0.0-beta.6/node_modules/@workflow/utils/dist/world-target.js +0 -1
- /package/dist/src/node_modules/.pnpm/{@workflow_utils@5.0.0-beta.6 → @workflow_utils@5.0.0-beta.7}/node_modules/@workflow/utils/dist/index.js +0 -0
- /package/dist/src/node_modules/.pnpm/{@workflow_utils@5.0.0-beta.6 → @workflow_utils@5.0.0-beta.7}/node_modules/@workflow/utils/dist/parse-name.js +0 -0
- /package/dist/src/node_modules/.pnpm/{@workflow_utils@5.0.0-beta.6 → @workflow_utils@5.0.0-beta.7}/node_modules/@workflow/utils/dist/pluralize.js +0 -0
- /package/dist/src/node_modules/.pnpm/{@workflow_utils@5.0.0-beta.6 → @workflow_utils@5.0.0-beta.7}/node_modules/@workflow/utils/dist/promise.js +0 -0
- /package/dist/src/node_modules/.pnpm/{@workflow_utils@5.0.0-beta.6 → @workflow_utils@5.0.0-beta.7}/node_modules/@workflow/utils/dist/time.js +0 -0
- /package/dist/src/node_modules/.pnpm/{@workflow_utils@5.0.0-beta.6 → @workflow_utils@5.0.0-beta.7}/node_modules/@workflow/utils/dist/workflow-routes.js +0 -0
- /package/dist/src/{cli/dev/tui → services/dev-client}/agent-info-probe.d.ts +0 -0
- /package/dist/src/{cli/dev/tui → services/dev-client}/agent-info-probe.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,o as t,t as n}from"../../_chunks/workflow/rolldown-runtime-DaDcL9Zw.js";import"../../_chunks/workflow/dist-B-vbuNqP.js";import{i as r,n as i,r as a,t as o}from"../../_chunks/workflow/workflow-routes-
|
|
2
|
-
`);for(let e of r){let r=e.trim().split(/\s+/);if(r.length<5||r[0]?.toUpperCase()!==`TCP`)continue;let[,i,,a,o]=r;if(a?.toUpperCase()!==`LISTENING`||o!==t.toString())continue;let s=i.lastIndexOf(`:`);if(s===-1)continue;let c=
|
|
3
|
-
`).slice(1);for(let e of t){if(!e.trim())continue;let t=e.trim().split(/\s+/);if(t.length<10)continue;let n=t[1],i=t[3],o=t[9];if(!n||i!==`0A`||!o||!r.has(o))continue;let s=n.indexOf(`:`);if(s===-1)continue;let c=n.slice(s+1);if(!c)continue;let l=
|
|
4
|
-
`);for(let e of r)if(e.includes(`LISTEN`)){let t=e.trim().split(/\s+/)[8];if(t){let e=t.lastIndexOf(`:`);if(e!==-1){let r=ke(t.slice(e+1));r!==void 0&&n.push(r)}}}return n}catch{return[]}}async function Ne(e){try{let{stdout:t}=await Oe(`cmd`,[`/c`,`netstat -ano -p tcp | findstr LISTENING`]);return De(t,e)}catch{return[]}}async function Pe(){let{pid:e,platform:t}=process;try{switch(t){case`linux`:return await je(e);case`darwin`:return await Me(e);case`win32`:return await Ne(e);default:return[]}}catch(e){return process.env.NODE_ENV===`development`&&console.debug(`[getAllPorts] Detection failed:`,e),[]}}const Fe=`${o}/flow?__health`;async function Ie(e,t={}){let{endpoint:n=Fe,timeout:r=500}=t,i=new AbortController,a=setTimeout(()=>i.abort(),r);try{return(await fetch(`http://localhost:${e}${n}`,{method:`HEAD`,signal:i.signal})).status===200}catch{return!1}finally{clearTimeout(a)}}async function Le(e){let t=await Pe();if(t.length===0)return;if(t.length===1)return t[0];let n=(await Promise.all(t.map(async t=>({port:t,isWorkflow:await Ie(t,e)})))).find(e=>e.isWorkflow);return n?n.port:(process.env.NODE_ENV===`development`&&console.debug(`[getWorkflowPort] Probing failed, falling back to first port:`,t[0]),t[0])}function Re(e){let t={get value(){let n=e();return Object.defineProperty(t,"value",{value:n}),n}};return t}const ze=()=>process.env.WORKFLOW_LOCAL_DATA_DIR||`.workflow-data`,Be=()=>process.env.WORKFLOW_LOCAL_BASE_URL,Ve=Re(()=>({dataDir:ze(),baseUrl:Be()}));function He(e){if(e.recoverActiveRuns!==void 0)return e.recoverActiveRuns;let t=process.env.WORKFLOW_LOCAL_RECOVER_ACTIVE_RUNS?.toLowerCase();return!(t===`0`||t===`false`)}function Ue(e){return e.baseUrl??process.env.WORKFLOW_LOCAL_BASE_URL??i(`http://localhost`)}async function We(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 i(`http://localhost:${e.port}`);if(process.env.PORT)return i(`http://localhost:${process.env.PORT}`);let t=await Le({endpoint:a()});if(t)return i(`http://localhost:${t}`);throw Error(`Unable to resolve base URL for workflow queue.`)}const Ge=A(()=>Math.random());function Ke(e){let t=typeof e==`string`?e:String(e);return t.length>48?`${t.slice(0,48)}…`:t}var qe=class extends s{constructor(e,t){super(`Unsafe ${e} "${Ke(t)}": must not be empty, contain ".", "/", "\\", or null bytes`),this.name=`UnsafeEntityIdError`}static is(e){return e instanceof Error&&e.name===`UnsafeEntityIdError`}};function z(e,t){if(t.length===0||t.startsWith(`.`)||t.includes(`/`)||t.includes(`\\`)||t.includes(`\0`)||t.includes(`.`))throw new qe(e,t)}function B(e,...t){let n=R.resolve(e),r=R.resolve(e,...t);if(r!==n&&!r.startsWith(n+R.sep))throw new qe(`path`,t.join(`/`));return r}const Je=process.platform===`win32`;async function V(e,t=5){if(!Je)return e();let n=[`EPERM`,`EBUSY`,`EACCES`];for(let r=0;r<=t;r++)try{return await e()}catch(e){if(!(r<t&&n.includes(e.code)))throw e;let i=10*2**r+Math.random()*10;await new Promise(e=>setTimeout(e,i))}throw Error(`Retry loop exited unexpectedly`)}const Ye=new Set,Xe=new Set;function Ze(){Ye.clear(),Xe.clear()}const Qe=/\.[a-zA-Z][a-zA-Z0-9-]*$/;function $e(e){return e.replace(Qe,``)}function et(e,t){return e.endsWith(`.${t}`)}function tt(e){return!Qe.test(e)}function H(e,t,n,r){return z(`fileId`,n),r!==void 0&&z(`tag`,r),B(e,t,r?`${n}.${r}.json`:`${n}.json`)}async function U(e,t,n,r,i){if(z(`fileId`,n),i!==void 0&&z(`tag`,i),i){let a=await K(B(e,t,`${n}.${i}.json`),r);if(a!==null)return a}return K(B(e,t,`${n}.json`),r)}async function nt(e,t){let n=`.${t}.json`;try{return(await I.readdir(e)).filter(e=>e.endsWith(n))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function rt(e,t,n){let r=`.${t}${n}`;try{return(await I.readdir(e)).filter(e=>e.endsWith(r))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function it(e){let t=R.resolve(e);if(!Xe.has(t))try{await I.mkdir(t,{recursive:!0}),Xe.add(t)}catch{}}async function at(e,t){await it(e);try{return await t()}catch(n){if(n.code!==`ENOENT`)throw n;return Xe.delete(R.resolve(e)),await it(e),t()}}function W(e,t){return t instanceof Uint8Array?{__type:`Uint8Array`,data:Buffer.from(t).toString(`base64`)}:t}function ot(e,t){return typeof t==`object`&&t&&t.__type===`Uint8Array`&&typeof t.data==`string`?new Uint8Array(Buffer.from(t.data,`base64`)):t}async function G(e,t,n){return st(e,JSON.stringify(t,W,2),n)}async function st(e,t,n){if(!n?.overwrite){if(Ye.has(e))throw new p(`File ${e} already exists and 'overwrite' is false`);try{throw await I.access(e),Ye.add(e),new p(`File ${e} already exists and 'overwrite' is false`)}catch(e){if(e.code!==`ENOENT`)throw e}}let r=`${e}.tmp.${Ge()}`,i=!1;try{await at(R.dirname(e),async()=>{await I.writeFile(r,t),i=!0,await V(()=>I.rename(r,e))}),Ye.add(e)}catch(e){throw i&&await V(()=>I.unlink(r),3).catch(()=>{}),e}}async function K(e,t){try{let n=await I.readFile(e,`utf-8`);return t.parse(JSON.parse(n,ot))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function ct(e){return await I.readFile(e)}async function lt(e){let t=await I.open(e,`r`);try{let e=Buffer.allocUnsafe(1),{bytesRead:n}=await t.read(e,0,1,0);return n===0?void 0:e[0]}finally{await t.close()}}async function q(e){try{await I.unlink(e)}catch(e){if(e.code!==`ENOENT`)throw e}}async function J(e,t){let n=`${e}.tmp.${Ge()}`,r=!1;try{return await at(R.dirname(e),async()=>{await I.writeFile(n,t,{flag:`wx`}),r=!0;try{return await V(()=>I.link(n,e)),!0}catch(e){if(e.code===`EEXIST`)return!1;throw e}})}finally{r&&await V(()=>I.unlink(n),3).catch(()=>{})}}async function ut(e,t){try{return await at(R.dirname(t),()=>V(()=>I.link(e,t))),`linked`}catch(e){if(e.code===`EEXIST`)return`exists`;if(e.code===`ENOENT`)return`missing`;throw e}}async function Y(e){return dt(e,`.json`)}async function dt(e,t){try{return(await I.readdir(e)).filter(e=>e.endsWith(t)).map(e=>e.slice(0,-t.length))}catch(e){if(e.code===`ENOENT`)return[];throw e}}function ft(e){if(!e)return null;let t=e.split(`|`);return{timestamp:new Date(t[0]),id:t[1]||null}}function pt(e,t){return t?`${e.toISOString()}|${t}`:e.toISOString()}async function X(e){let{directory:t,schema:n,cachedItems:r,filePrefix:i,fileIdFilter:a,filter:o,sortOrder:s=`desc`,limit:c=20,cursor:l,getCreatedAt:u,getId:d}=e;i!==void 0&&z(`filePrefix`,i);let f=R.resolve(t),p=await Y(f),m=i?p.filter(e=>e.startsWith(i)):p,h=a?m.filter(a):m,g=ft(l),_=h;g&&(_=h.filter(e=>{let t=u(`${e}.json`);if(t){let e=g.timestamp.getTime(),n=t.getTime();return g.id?s===`desc`?n<=e:n>=e:s===`desc`?n<e:n>e}return!0}));let v=[];for(let e=0;e<_.length;e+=32){let t=_.slice(e,e+32),i=await Promise.all(t.map(async e=>{let t=R.join(f,`${e}.json`);try{let e=r?.get(t);return e===void 0?await K(t,n):structuredClone(e)}catch(t){if(t instanceof M)return console.warn(`Skipping item ${e} due to malformed JSON: ${t.message}`),null;throw t}}));for(let e of i)if(e&&!(o&&!o(e))){if(g){let t=e.createdAt.getTime(),n=g.timestamp.getTime();if(s===`desc`){if(t>n||t===n&&g.id&&d&&d(e)>=g.id)continue}else if(t<n||t===n&&g.id&&d&&d(e)<=g.id)continue}v.push(e)}}v.sort((e,t)=>{let n=e.createdAt.getTime(),r=t.createdAt.getTime(),i=s===`asc`?n-r:r-n;if(i===0&&d){let n=d(e),r=d(t);return s===`asc`?n.localeCompare(r):r.localeCompare(n)}return i});let y=v.length>c,b=y?v.slice(0,c):v;return{data:b,cursor:b.length>0?pt(b[b.length-1].createdAt,d?.(b[b.length-1])):null,hasMore:y}}let Z=null;function mt(){return typeof import.meta.url==`string`&&import.meta.url?R.dirname(pe(import.meta.url)):null}async function ht(){if(Z)return Z;let e=mt();if(e)try{let t=await _e(R.join(e,`../package.json`),`utf-8`);return Z=JSON.parse(t),Z}catch{}return Z={name:`@workflow/world-local`,version:`5.0.0-beta.30`},Z}const gt=`version.txt`;var _t=class extends Error{dataDir;code;constructor(e,t,n){super(e),this.name=`DataDirAccessError`,this.dataDir=t,this.code=n}},vt=class extends Error{oldVersion;newVersion;suggestedVersion;constructor(e,t,n,r){super(e),this.name=`DataDirVersionError`,this.oldVersion=t,this.newVersion=n,this.suggestedVersion=r}};function yt(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 Q(e){let t=`${e.major}.${e.minor}.${e.patch}`;return e.prerelease?`${t}-${e.prerelease}`:t}function bt(e){let t=e.trim(),n=t.lastIndexOf(`@`);if(n<=0)throw Error(`Invalid version file content: "${e}"`);return{packageName:t.substring(0,n),version:yt(t.substring(n+1))}}function xt(e,t){return`${e}@${Q(t)}`}function St(e,t){console.log(`[world-local] Upgrading from version ${Q(e)} to ${Q(t)}`)}async function Ct(e){let t=R.resolve(e);try{await ge(t,{recursive:!0})}catch(e){let n=e;if(n.code!==`EEXIST`)throw new _t(`Failed to create data directory "${t}": ${n.message}`,t,n.code)}try{await me(t,he.R_OK)}catch(e){let n=e;throw new _t(`Data directory "${t}" is not readable: ${n.message}`,t,n.code)}let n=R.join(t,`.workflow-write-test-${Date.now()}`);try{await Se(n,``),await xe(n).catch(e=>{if(e.code!==`ENOENT`)throw e})}catch(e){let n=e;throw new _t(`Data directory "${t}" is not writable: ${n.message}`,t,n.code)}}async function wt(e){let t=R.join(R.resolve(e),gt);try{return bt(await _e(t,`utf-8`))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function Tt(e,t){await Se(R.join(R.resolve(e),gt),xt((await ht()).name,t))}function Et(e,t){return t||Q(e)}async function Dt(e){await Ct(e);let t=await ht(),n=yt(t.version),r=await wt(e);if(r===null){await Tt(e,n);return}let{version:i}=r;if(Q(i)!==Q(n))try{St(i,n),await Tt(e,n)}catch(e){let r=Et(i,e instanceof vt?e.suggestedVersion:void 0);throw console.error(`[world-local] Failed to upgrade data directory from version ${Q(i)} to ${Q(n)}:`,e instanceof Error?e.message:e),console.error(`[world-local] Data is not compatible with the current version. Please downgrade to ${t.name}@${r}`),e}}let Ot=null;async function kt(){return Ot||=import(`../../_chunks/workflow/src-Cj3P1ChQ.js`).then(e=>t(e.t(),1)).catch(()=>null),Ot}let At=null;async function jt(){return At||=kt().then(e=>e?e.trace.getTracer(`workflow`):null),At}async function Mt(e,...t){let[n,r]=await Promise.all([jt(),kt()]),{fn:i,opts:a}=typeof t[0]==`function`?{fn:t[0],opts:{}}:{fn:t[1],opts:t[0]};if(!i)throw Error(`Function to trace must be provided`);return!n||!r?await i():n.startActiveSpan(e,a,async e=>{try{let t=await i(e);return e.setStatus({code:r.SpanStatusCode.OK}),t}catch(t){throw e.setStatus({code:r.SpanStatusCode.ERROR,message:t.message}),t}finally{e.end()}})}async function Nt(e){let t=await kt();if(t)return t.SpanKind[e]}function Pt(...e){return t=>Object.fromEntries(e.map(e=>[e,t]))}const Ft=Pt(`peer.service`),It=Pt(`rpc.system`),Lt=Pt(`rpc.service`),Rt=Pt(`rpc.method`),zt=Pt(`workflow.run.id`),Bt=Pt(`step.id`),Vt={peerService:`world-local`,rpcSystem:`local`,rpcService:`world-local`},Ht={"world.runs.get":0,"world.runs.experimentalSetAttributes":0,"world.steps.get":0,"world.events.create":0,"world.events.get":0},Ut=new Set([`world.steps.list`,`world.events.list`,`world.hooks.list`]);function Wt(e){if(e.length>=2&&typeof e[1]==`object`&&e[1]!==null){let t=e[1];if(typeof t.eventType==`string`)return t.eventType}}function Gt(e,t){return typeof e[t]==`string`?e[t]:void 0}function Kt(e){if(typeof e!=`object`||!e)return;let t=e.runId;return typeof t==`string`?t:void 0}function qt(e){if(typeof e!=`object`||!e)return;let t=e;if(typeof t.runId==`string`)return t.runId;for(let e of[`run`,`step`,`hook`,`wait`]){let n=t[e];if(typeof n==`object`&&n){let e=n.runId;if(typeof e==`string`)return e}}}function Jt(e,t,n){let r=`${e}.${t}`,i={},a=Ht[r],o=a===void 0?Ut.has(r)?Kt(n[0]):void 0:Gt(n,a);if(o&&Object.assign(i,zt(o)),r===`world.steps.get`){let e=Gt(n,1);e&&Object.assign(i,Bt(e))}return i}function Yt(e,t){let n={};for(let r of Object.keys(t))if(typeof t[r]!=`function`)n[r]=t[r];else{let i=t[r],a=String(r);n[r]=async(...t)=>{let n=`${e}.${a}`;if(e===`world.events`&&a===`create`){let r=Wt(t);r&&(n=`${e}.${a} ${r}`)}return Mt(n,{kind:await Nt(`INTERNAL`)},async r=>{r?.setAttributes({...Ft(Vt.peerService),...It(Vt.rpcSystem),...Lt(Vt.rpcService),...Rt(n),...Jt(e,a,t)});let o=await i(...t),s=qt(o);return s&&r?.setAttributes(zt(s)),o})}}return n}var Xt=n((t=>{var n=t&&t.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RateLimit=t.Sema=void 0;let r=n(e(`events`));function i(e,t,n,r,i){for(let a=0;a<i;++a)n[a+r]=e[a+t],e[a+t]=void 0}function a(e){return e>>>=0,--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e+1}function o(e){return a(Math.min(Math.max(16,e),1073741824))}var s=class{constructor(e){this._capacity=o(e),this._length=0,this._front=0,this.arr=[]}push(e){let t=this._length;this.checkCapacity(t+1);let n=this._front+t&this._capacity-1;return this.arr[n]=e,this._length=t+1,t+1}pop(){let e=this._length;if(e===0)return;let t=this._front+e-1&this._capacity-1,n=this.arr[t];return this.arr[t]=void 0,this._length=e-1,n}shift(){let e=this._length;if(e===0)return;let t=this._front,n=this.arr[t];return this.arr[t]=void 0,this._front=t+1&this._capacity-1,this._length=e-1,n}get length(){return this._length}checkCapacity(e){this._capacity<e&&this.resizeTo(o(this._capacity*1.5+16))}resizeTo(e){let t=this._capacity;this._capacity=e;let n=this._front,r=this._length;if(n+r>t){let e=n+r&t-1;i(this.arr,0,this.arr,t,e)}}},c=class extends r.default{};function l(e){return typeof e==`function`}function u(){return`1`}var d=class{constructor(e,{initFn:t=u,pauseFn:n,resumeFn:r,capacity:i=10}={}){if(l(n)!==l(r))throw Error(`pauseFn and resumeFn must be both set for pausing`);this.nrTokens=e,this.free=new s(e),this.waiting=new s(i),this.releaseEmitter=new c,this.noTokens=t===u,this.pauseFn=n,this.resumeFn=r,this.paused=!1,this.releaseEmitter.on(`release`,e=>{let t=this.waiting.shift();t?t.resolve(e):(this.resumeFn&&this.paused&&(this.paused=!1,this.resumeFn()),this.free.push(e))});for(let n=0;n<e;n++)this.free.push(t())}tryAcquire(){return this.free.pop()}async acquire(){let e=this.tryAcquire();return e===void 0?new Promise((e,t)=>{this.pauseFn&&!this.paused&&(this.paused=!0,this.pauseFn()),this.waiting.push({resolve:e,reject:t})}):e}release(e){this.releaseEmitter.emit(`release`,this.noTokens?`1`:e)}drain(){let e=Array(this.nrTokens);for(let t=0;t<this.nrTokens;t++)e[t]=this.acquire();return Promise.all(e)}nrWaiting(){return this.waiting.length}};t.Sema=d;function f(e,{timeUnit:t=1e3,uniformDistribution:n=!1}={}){let r=new d(n?1:e),i=n?t/e:t;return async function(){await r.acquire(),setTimeout(()=>r.release(),i)}}t.RateLimit=f}))(),Zt=F(),Qt=class{contentType=`application/json`;serialize(e){return Buffer.from(JSON.stringify(e,W))}async deserialize(e){let t=[],n=e.getReader();for(;;){let{done:e,value:r}=await n.read();if(e)break;r&&t.push(r)}let r=Buffer.concat(t).toString();return JSON.parse(r,ot)}};const $t=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_MAX_VISIBILITY??`0`,10)||1/0,en=2147483647,tn=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_CONCURRENCY??`0`,10)||1e3,nn=`Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer`;function rn(e){let t=e,n=new Set;for(;t&&typeof t==`object`&&!n.has(t);){if(n.add(t),`message`in t&&typeof t.message==`string`&&t.message.includes(nn))return!0;t=`cause`in t?t.cause:void 0}return!1}function an(e){let{kind:t,prefix:n}=ie(e);return{pathname:t===`workflow`?`flow`:`step`,prefix:n}}function on(e){let t=new Zt.Agent({headersTimeout:0,connections:1e3,keepAliveTimeout:3e4}),n=new Qt,i=A(),a=new Xt.Sema(tn),o=new AbortController,s=o.signal,c=new Map,l=new Map,u=async(o,u,d)=>{let f=[];if(d?.idempotencyKey){let e=c.get(d.idempotencyKey);if(e)return{messageId:e}}let p=n.serialize(u),{pathname:m,prefix:h}=an(o),g=re.parse(`msg_${i()}`),_=u,v=_.runId??_.workflowRunId??void 0,y=_.stepId??void 0;if(d?.idempotencyKey){let e=d.idempotencyKey;c.set(e,g),f.push(()=>{c.delete(e)})}return(async()=>{d?.delaySeconds&&d.delaySeconds>0&&await we(Math.min(d.delaySeconds*1e3,en),void 0,{signal:s}),a.tryAcquire()||(console.warn(`[world-local]: concurrency limit (${tn}) reached, waiting for queue to free up`),await a.acquire());let n=0;try{for(let i=0;i<256;i++){let a={...d?.headers,"content-type":`application/json`,"x-vqs-queue-name":o,"x-vqs-message-id":g,"x-vqs-message-attempt":String(n+1)},c=l.get(h),u;try{if(c)u=await c(new Request(r(Ue(e),{type:m}),{method:`POST`,headers:a,body:p}));else{let n=await We(e);u=await fetch(r(n,{type:m}),{method:`POST`,duplex:`half`,dispatcher:t,headers:a,body:p})}}catch(e){let t=e?.name;if(s.aborted||t===`AbortError`||t===`ResponseAborted`)return;if(rn(e))throw e;console.error(`[world-local] Queue delivery failed at the transport (loop ${i+1}), retrying`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y},error:String(e)}),await we(5e3,void 0,{signal:s});continue}n++;let f=await u.text();if(u.ok){try{let e=Number(JSON.parse(f).timeoutSeconds);if(Number.isFinite(e)&&e>=0){e>0&&await we(Math.min(e*1e3,en),void 0,{signal:s});continue}}catch{}return}console.error(`[world-local] Queue message failed (attempt ${n}, HTTP ${u.status})`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y},handlerError:f}),await we(5e3,void 0,{signal:s})}console.error(`[world-local] Queue message exhausted safety limit (256 attempts)`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y}})}finally{a.release()}})().catch(e=>{e?.name===`AbortError`||e?.name===`ResponseAborted`||(rn(e)?console.error(`[local world] Queue operation failed: detected "${nn}". 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 https://workflow-sdk.dev/docs/getting-started/next#configure-proxy-handler`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y},originalError:e}):console.error(`[local world] Queue operation failed:`,e))}).finally(()=>{for(let e of f)e()}),{messageId:g}},d=P({"x-vqs-queue-name":j,"x-vqs-message-id":re,"x-vqs-message-attempt":w()});return{queue:u,createQueueHandler:(e,t)=>async n=>{let r=d.safeParse(Object.fromEntries(n.headers));if(!r.success||!n.body)return Response.json({error:n.body?`Missing required headers`:`Missing request body`},{status:400});let i=r.data[`x-vqs-queue-name`],a=r.data[`x-vqs-message-id`],o=r.data[`x-vqs-message-attempt`];if(!i.startsWith(e))return Response.json({error:`Unhandled queue`},{status:400});let s=await new Qt().deserialize(n.body);try{let e=await t(s,{attempt:o,queueName:i,messageId:a}),n=null;return typeof e?.timeoutSeconds==`number`&&(n=Math.min(e.timeoutSeconds,$t)),n==null?Response.json({ok:!0}):Response.json({timeoutSeconds:n})}catch(e){return Response.json(String(e),{status:500})}},getDeploymentId:async()=>`dpl_local@${(await ht()).version}`,registerHandler(e,t){l.set(e,t)},async close(){s.aborted||(o.abort(),await t.close())}}}function sn(e){return de(`sha256`).update(e).digest(`hex`)}function cn(e,t,n){return B(e,`.locks`,`hooks`,n?`${t}.disposed.${n}`:`${t}.disposed`)}async function ln(e,t,n){let r=[cn(e,t)];n&&r.push(cn(e,t,n));for(let e of r)try{return await L.access(e),!0}catch{}return!1}function un(e,t,n){return B(e,`.locks`,`runs`,n?`${t}.terminal.${n}`:`${t}.terminal`)}async function dn(e,t,n){let r=[un(e,t)];n&&r.push(un(e,t,n));for(let e of r)try{return await L.access(e),!0}catch(e){if(e.code!==`ENOENT`)throw e}return!1}function fn(e,t,n){return B(e,`.locks`,`runs`,n?`${t}.pending.${n}`:`${t}.pending`)}function pn(e,t,n,r){return R.join(fn(e,t,r),`${n}.json`)}async function mn(e,t,n){let r=[fn(e,t)];n&&r.push(fn(e,t,n));for(let e of r){let t;try{t=await L.readdir(e)}catch(e){if(e.code===`ENOENT`)continue;throw e}for(let n of t)try{await V(()=>L.unlink(R.join(e,n)))}catch(e){if(e.code!==`ENOENT`)throw e}await L.rmdir(e).catch(()=>{})}}async function hn(e,t,n){let r=[];try{r=await L.readdir(R.join(e,`events`))}catch(e){if(e.code!==`ENOENT`)throw e}let i=`${t}-`,a=null;for(let e of r){if(!e.startsWith(i)||!e.endsWith(`.json`))continue;let t=e.slice(0,-5);if(!tt(t)&&!(n&&et(t,n)))continue;let r=$e(t).slice(i.length);(!a||r>a)&&(a=r)}let o=Date.now();if(a)try{let e=T(a.replace(/^evnt_/,``));o<=e&&(o=e+1)}catch{}return{eventId:`evnt_${yn(o)}`,createdAt:new Date(o)}}function gn(e,t){return R.join(e,`hooks`,`tokens`,`${sn(t)}.json`)}async function _n(e,t,n,r){let i=gn(e,t),a;try{a=JSON.parse(await L.readFile(i,`utf8`))}catch{return}a.runId!==n||a.hookId!==r||await L.unlink(i).catch(()=>{})}function vn(e,t,n,r){let i=de(`sha256`).update(`${t}\x00${n}\x00${r}`).digest(`hex`);return R.join(e,`hooks`,`tokens`,`${i}.recovery.json`)}const yn=A(()=>Math.random()),$=e=>{let t=RegExp(`^${e}_`,`g`);return n=>{let r=$e(n.replace(/\.json$/,``))+`.json`,i=r.indexOf(`-`);return i===-1?ae(r.replace(/\.json$/,``).replace(t,``)):e===`step`?null:ae(r.substring(i+1).replace(/\.json$/,``).replace(t,``))}},bn=P({runId:D()}),xn=P({hookId:D(),tag:D().optional()});function Sn(e,t){return B(e,`hooks`,`token-index`,sn(t))}function Cn(e,t){return z(`hookId`,t),B(e,`hooks`,`id-index`,t)}function wn(e){return B(e,`hooks`,`by-run`)}function Tn(e){let t=$e(e);return t===e?void 0:e.slice(t.length+1)}function En(e,t){return t?tt(e)||et(e,t):tt(e)}async function Dn(e){try{return await K(e,E)}catch(e){if(e instanceof SyntaxError||e instanceof M)return null;throw e}}async function On(e,t,n,r,i,a){z(`runId`,n),z(`eventId`,i),a!==void 0&&z(`tag`,a);let o=a?`${i}.${a}.json`:`${i}.json`,s=JSON.stringify({runId:n});await Promise.all([J(R.join(Sn(e,t),o),s),J(R.join(Cn(e,r),o),s)])}function kn(e,t,n,r){return H(e,`hooks/by-run`,`${t}-${n}`,r)}async function An(e,t,n,r){await J(kn(e,t,n,r),JSON.stringify(r?{hookId:n,tag:r}:{hookId:n}))}async function jn(e,t,n,r){await q(kn(e,t,n,r)),r&&await q(kn(e,t,n))}async function Mn(e,t){z(`runId`,t);let n=wn(e),r=`${t}-`,i=[];for(let e of await Y(n)){if(!e.startsWith(r))continue;let t=null;try{t=await K(R.join(n,`${e}.json`),xn)}catch(e){if(!(e instanceof SyntaxError||e instanceof M))throw e}i.push({fileId:e,hookId:t?.hookId??null,tag:t?.tag})}return i}async function Nn(e,t){await q(R.join(wn(e),`${t}.json`))}const Pn=new Map;function Fn(){Pn.clear()}async function In(e){let t=R.resolve(e),n=Pn.get(t);return n||(n=Rn(t).catch(e=>{throw Pn.delete(t),e}),Pn.set(t,n)),n}async function Ln(e,t,n){for(let r=0;r<e.length;r+=t)await Promise.all(e.slice(r,r+t).map(n))}async function Rn(e){let t=R.join(e,`hooks`,`.hook-index-complete`);try{await L.access(t);return}catch{}let n=R.join(e,`events`);await Ln(await Y(n),32,async t=>{let r=await Dn(R.join(n,`${t}.json`));if(!r||r.eventType!==`hook_created`||typeof r.correlationId!=`string`)return;let i=r.eventData?.token;if(typeof i==`string`)try{await On(e,i,r.runId,r.correlationId,r.eventId,Tn(t))}catch{}});let r=R.join(e,`hooks`);await Ln(await Y(r),32,async t=>{let n=null;try{n=await K(R.join(r,`${t}.json`),N)}catch(e){if(!(e instanceof SyntaxError||e instanceof M))throw e}if(n)try{await An(e,n.runId,n.hookId,Tn(t))}catch{}}),await J(t,``)}async function zn(e,t,n,r){await In(e);let i;try{i=t.kind===`token`?Sn(e,t.token):Cn(e,t.hookId)}catch{return null}let a=(await Y(i)).filter(e=>En(e,r)).sort((e,t)=>$e(t).localeCompare($e(e)));for(let t of a){let r=null;try{r=await K(R.join(i,`${t}.json`),bn)}catch(e){if(!(e instanceof SyntaxError||e instanceof M))throw e}if(!r)continue;let a=$e(t),o;try{o=H(e,`events`,`${r.runId}-${a}`,Tn(t))}catch{continue}let s=await Dn(o);if(s&&s.eventType===`hook_created`&&typeof s.correlationId==`string`&&n(s))return s}return null}function Bn(e,t){return t===`none`?{...e,input:void 0,output:void 0}:e}function Vn(e,t){return t===`none`?{...e,input:void 0,output:void 0}:e}function Hn(e,t){if(t===`none`){let{metadata:t,...n}=e;return n}return e}function Un(e){if(e.eventType!==`hook_created`)return;let t=e.eventData.token;return typeof t==`string`?t:void 0}function Wn(e){let{token:t,metadata:n,isWebhook:r,isSystem:i}=e.eventData;return{runId:e.runId,hookId:e.correlationId,token:t,metadata:n,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:e.createdAt,specVersion:e.specVersion,isWebhook:r??!0,isSystem:i??!1}}function Gn(e,t){return e.eventType===`hook_created`&&typeof e.correlationId==`string`&&t(e)}async function Kn(e,t,n){let r=await U(e,`runs`,t,O,n);return r?m(r.status):!1}async function qn(e,t,n,r){let i=await zn(e,t,e=>Gn(e,n),r);return!i||!Gn(i,n)||await Kn(e,i.runId,r)||await ln(e,i.correlationId,r)?null:i}async function Jn(e,t,n){let r=Wn(t);return await J(R.join(e,`hooks`,`tokens`,`${sn(r.token)}.json`),JSON.stringify({token:r.token,hookId:r.hookId,runId:r.runId,eventId:t.eventId})),await An(e,r.runId,r.hookId,n),await J(H(e,`hooks`,r.hookId,n),JSON.stringify(r,W,2)),r}async function Yn(e,t,n){let r=await qn(e,{kind:`token`,token:t},e=>Un(e)===t,n);return r?Jn(e,r,n):null}async function Xn(e,t,n){let r=await qn(e,{kind:`id`,hookId:t},e=>e.correlationId===t,n);return r?Jn(e,r,n):null}function Zn(e,t){let n=P({hookId:D().optional()});async function r(r){let i=null;try{i=await K(gn(e,r),n)}catch(e){if(!(e instanceof SyntaxError||e instanceof M))throw e}if(i?.hookId)try{let n=await U(e,`hooks`,i.hookId,N,t);if(n&&n.token===r)return{...n,isWebhook:n.isWebhook??!0}}catch(e){if(!qe.is(e))throw e}let a=R.join(e,`hooks`),o=await Y(a);for(let e of o){let t=await K(R.join(a,`${e}.json`),N);if(t&&t.token===r)return{...t,isWebhook:t.isWebhook??!0}}return null}async function i(n,r){z(`hookId`,n);let i=await U(e,`hooks`,n,N,t);if(!i){let i=await Xn(e,n,t);if(!i)throw new f(n);let a=r?.resolveData||`all`;return Hn({...i,isWebhook:i.isWebhook??!0},a)}let a=r?.resolveData||`all`;return Hn({...i,isWebhook:i.isWebhook??!0},a)}async function a(n){let i=await r(n)??await Yn(e,n,t);if(!i)throw new f(n);return i}async function o(t){let n=R.join(e,`hooks`),r=t.resolveData||`all`,i=await X({directory:n,schema:N,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,filePrefix:void 0,filter:e=>!(t.runId&&e.runId!==t.runId),getCreatedAt:()=>null,getId:e=>e.hookId});return{...i,data:i.data.map(e=>Hn(e,r))}}return{get:i,getByToken:a,list:o}}async function Qn(e,t){await In(e);for(let n of await Mn(e,t)){if(n.hookId){let r=null,i=null;try{i=H(e,`hooks`,n.hookId,n.tag),r=await K(i,N)}catch(e){if(!qe.is(e)&&!(e instanceof SyntaxError||e instanceof M))throw e}r&&i&&r.runId===t&&(await _n(e,r.token,r.runId,r.hookId),await q(vn(e,r.token,r.runId,r.hookId)),await q(i))}await Nn(e,n.fileId)}}async function $n(e,t,n,r,i,a){if(m(a.status)||await dn(e,t))throw new u(`Workflow run "${t}" is already in a terminal state`);let o=pn(e,t,n);await J(o,r);try{if(await dn(e,t)||await ut(o,i)!==`linked`)throw new u(`Workflow run "${t}" is already in a terminal state`)}finally{await L.unlink(o).catch(()=>{})}}async function er(e,t,n,r,i){z(`runId`,t);let a=i?.resolveData??`all`;switch(n.eventType){case`run_cancelled`:{await J(un(e,t),``),await mn(e,t);let n=new Date,i={runId:r.runId,deploymentId:r.deploymentId,workflowName:r.workflowName,specVersion:r.specVersion,executionContext:r.executionContext,input:r.input,createdAt:r.createdAt,expiredAt:r.expiredAt,startedAt:r.startedAt,status:`cancelled`,output:void 0,error:void 0,completedAt:n,updatedAt:n,attributes:r.attributes};return await G(B(e,`runs`,`${t}.json`),i,{overwrite:!0}),await Qn(e,t),{event:void 0,run:Bn(i,a)}}case`wait_completed`:case`hook_received`:{let i=`evnt_${yn()}`,o=new Date,s={...n,runId:t,eventId:i,createdAt:o,specVersion:5},c=B(e,`events`,`${`${t}-${i}`}.json`);return n.eventType===`hook_received`?await $n(e,t,i,JSON.stringify(s,W,2),c,r):await G(c,s),{event:C(s,a)}}default:throw Error(`Event type '${n.eventType}' not supported for legacy runs (specVersion: ${r.specVersion||`undefined`}). Please upgrade 'workflow' package.`)}}const tr=new Map;function nr(e,t){let n=tr.get(e),r={},i=(async()=>{n&&await n.catch(()=>void 0);try{return await t()}finally{tr.get(e)===r.task&&tr.delete(e)}})();return r.task=i,tr.set(e,i),i}function rr(e,t){let n=(async(n,r)=>{z(`runId`,n);let i=await U(e,`runs`,n,O,t);if(!i)throw new c(n);return Bn(i,r?.resolveData??`all`)});return{get:n,getMany:(async(e,t)=>{let r=[...new Set(e)],i=await Promise.all(r.map(async e=>{try{return await n(e,t)}catch(e){if(e instanceof c)return null;throw e}})),a=new Map(r.map((e,t)=>[e,i[t]]));return e.map(e=>a.get(e)??null)}),list:(async t=>{let n=t?.resolveData??`all`,r=await X({directory:R.join(e,`runs`),schema:O,fileIdFilter:t?.fileIdFilter,filter:e=>!(t?.workflowName&&e.workflowName!==t.workflowName||t?.status&&e.status!==t.status),sortOrder:t?.pagination?.sortOrder??`desc`,limit:t?.pagination?.limit??200,cursor:t?.pagination?.cursor,getCreatedAt:$(`wrun`),getId:e=>e.runId});return n===`none`?{...r,data:r.data.map(e=>({...e,input:void 0,output:void 0}))}:r}),experimentalSetAttributes:async(n,r,i)=>(z(`runId`,n),nr(n,async()=>{let a=await U(e,`runs`,n,O,t);if(!a)throw new c(n);try{oe(r,{existingKeys:Object.keys(a.attributes??{}),allowReservedAttributes:i?.allowReservedAttributes})}catch(e){throw e instanceof S,e}let o=b(a.attributes,r),s={...a,attributes:o,updatedAt:new Date};return await G(H(e,`runs`,n,t),s,{overwrite:!0}),{attributes:o}}))}}function ir(){let e=process.env.WORKFLOW_MAX_EVENTS,t=e===void 0?NaN:Number(e);return Number.isInteger(t)&&t>0?t:25e3}const ar=P({hookId:D().optional(),runId:D(),eventId:D().optional()}),or=P({eventId:D()});async function sr(e){try{return await K(e,ar)}catch(e){if(e instanceof SyntaxError||e instanceof M)return null;throw e}}async function cr(e,t,n){if(t.hookId&&await ln(e,t.hookId,n))return!0;let r=await U(e,`runs`,t.runId,O,n);return!r||m(r.status)}async function lr(e){try{return await K(e,or)}catch(e){if(e instanceof SyntaxError||e instanceof M)return null;throw e}}async function ur(e,t,n){return(await X({directory:R.join(e,`events`),schema:E,filePrefix:`${t}-`,filter:e=>e.eventType===`hook_created`&&e.correlationId===n,limit:1,getCreatedAt:$(`evnt`),getId:e=>e.eventId})).data[0]?.eventId??null}async function dr(e,t,n,r,i){let a=await U(e,`events`,`${t}-${r}`,E,i);if(!a||a.eventType!==`hook_created`||a.correlationId!==n||await U(e,`hooks`,n,N,i))return;let o=a.eventData??{};if(typeof o.token!=`string`)return;let s={runId:t,hookId:n,token:o.token,metadata:o.metadata,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:a.createdAt,specVersion:a.specVersion,isWebhook:o.isWebhook??!0,isSystem:o.isSystem??!1};await On(e,o.token,t,n,r,i),await An(e,t,n,i),await J(H(e,`hooks`,n,i),JSON.stringify(s,W,2))}async function fr(e,t,n,r,i){let a=vn(e,t,n,r);return await J(a,JSON.stringify({eventId:i}))?i:(await lr(a))?.eventId??null}function pr(e,t,n){let r=e.get(t),i={},a=(async()=>{r&&await r.catch(()=>void 0);try{return await n()}finally{e.get(t)===i.task&&e.delete(t)}})();return i.task=a,e.set(t,a),a}async function mr(e,t){let n=R.join(e,`waits`),r=await Y(n);for(let e of r)e.startsWith(`${t}-`)&&await q(R.join(n,`${e}.json`))}async function hr(e,t,n,r){return nr(t,async()=>{let i=await K(H(e,`runs`,t,n),O),a={...r,attributes:i?.attributes??r.attributes};return await G(H(e,`runs`,t,n),a,{overwrite:!0}),a})}function gr(e,t){let n=4*1024*1024,r=new Map,i=new Map,a=new Map,o=0;function S(e){let t=r.get(e);if(!t)return;r.delete(e),o-=i.get(e)??0,i.delete(e);let n=a.get(t.runId);n?.delete(e),n?.size===0&&a.delete(t.runId)}function w(e){for(let t of a.get(e)??[])S(t)}function T(){r.clear(),i.clear(),a.clear(),o=0}function ne(e,t,s){if(s>n)return;for(;r.size>0&&(r.size>=1e3||o+s>n);){let e=r.keys().next().value;S(e)}r.set(e,t),i.set(e,s),o+=s;let c=a.get(t.runId)??new Set;c.add(e),a.set(t.runId,c)}function re(e,t,r){if(ce(e.eventType)){w(e.runId);return}let i=Buffer.byteLength(r);if(i>n)return;let a=E.safeParse(JSON.parse(r,ot));a.success&&ne(t,a.data,i)}async function ie(n){let r=H(e,`events`,`${n.runId}-${n.eventId}`,t),i=JSON.stringify(n,W,2);await st(r,i),re(n,r,i)}let D=new Map,k=new Map;return{clearCache:T,async create(n,i,a){if(n!=null&&n!==``&&z(`runId`,n),`correlationId`in i&&typeof i.correlationId==`string`&&z(`correlationId`,i.correlationId),ee(i.eventType)&&n&&i.correlationId){let e=t?`${n}-${i.correlationId}.${t}`:`${n}-${i.correlationId}`;return pr(D,e,()=>o())}if(x(i.eventType)&&n&&i.correlationId){let e=t?`${n}-${i.correlationId}.hook.${t}`:`${n}-${i.correlationId}.hook`;return pr(k,e,()=>o())}return o();async function o(){let o=`evnt_${yn()}`,x=new Date,S;if(i.eventType===`run_created`&&(!n||n===``))S=`wrun_${yn()}`;else if(n)S=n;else throw Error(`runId is required for non-run_created events`);if(i.eventType===`run_created`&&n&&n!==``){let e=se(S,`wrun_`);if(e)throw new s(e)}let w=i.specVersion??5,T=null;if(i.eventType!==`run_created`&&![`step_completed`,`step_retrying`].includes(i.eventType)&&(T=await U(e,`runs`,S,O,t),i.eventType===`run_started`&&!T&&`eventData`in i&&i.eventData)){let n=i.eventData;if(n.deploymentId&&n.workflowName&&n.input!==void 0){oe(Object.entries(n.attributes??{}).map(([e,t])=>({key:e,value:t})),{allowReservedAttributes:n.allowReservedAttributes===!0});let r={runId:S,deploymentId:n.deploymentId,status:`pending`,workflowName:n.workflowName,specVersion:w,executionContext:n.executionContext,input:n.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:n.attributes??{},createdAt:x,updatedAt:x};if(await J(H(e,`runs`,S,t),JSON.stringify(r,W))){let e=`evnt_${yn()}`;await ie({eventType:`run_created`,runId:S,eventId:e,createdAt:x,specVersion:w,eventData:{deploymentId:n.deploymentId,workflowName:n.workflowName,input:n.input,executionContext:n.executionContext,attributes:n.attributes,allowReservedAttributes:n.allowReservedAttributes}}),T=r}else T=await U(e,`runs`,S,O,t)}}if(i.eventType===`run_failed`&&!T||i.eventType===`attr_set`&&!T)throw new c(S);if(T){if(le(T.specVersion))throw new d(T.specVersion,5);if(ue(T.specVersion))return er(e,S,i,T,a)}let ne=v(i),D=ne&&i.eventType===`step_started`;if(T&&m(T.status)){if(i.eventType===`run_cancelled`&&T.status===`cancelled`){let e={...i,runId:S,eventId:o,createdAt:x,specVersion:w};return await ie(e),{event:C(e,a?.resolveData??`all`),run:T,...T?{maxEvents:ir()}:{}}}if(i.eventType===`run_started`)throw new u(`Workflow run "${S}" is already in terminal state "${T.status}"`);if(ce(i.eventType))throw new p(`Cannot transition run from terminal state "${T.status}"`);if(ne)throw new p(`Cannot create new entities on run in terminal state "${T.status}"`);if(i.eventType===`attr_set`)throw new p(`Cannot set attributes on run in terminal state "${T.status}"`)}let k=null;if(ee(i.eventType)&&i.eventType!==`step_created`&&i.correlationId){if(k=await U(e,`steps`,`${S}-${i.correlationId}`,_,t),!k&&!D)throw new s(`Step "${i.correlationId}" not found`);if(D&&k)throw new p(`Step "${i.correlationId}" already created`);if(k){if(g(k.status))throw new p(`Cannot modify step in terminal state "${k.status}"`);if(T&&m(T.status)&&k.status!==`running`)throw new u(`Cannot modify non-running step on run in terminal state "${T.status}"`)}}if(y(i.eventType)&&i.correlationId&&(i.eventType===`hook_received`&&await ln(e,i.correlationId,t)||!await U(e,`hooks`,i.correlationId,N,t)))throw new f(i.correlationId);let A={...i,runId:S,eventId:o,createdAt:x,specVersion:w};if(i.eventType===`run_started`&&`eventData`in A&&delete A.eventData,D&&A.eventType===`step_started`&&A.eventData){let{input:e,...t}=A.eventData;A={...A,eventData:t}}let j,M,P,F,de=!1,fe;if(ce(i.eventType)&&T){await J(un(e,S,t),``),await mn(e,S,t);let n=await hn(e,S,t);o=n.eventId,A={...A,eventId:o,createdAt:n.createdAt}}if(i.eventType===`run_created`&&`eventData`in i){let n=i.eventData;if(oe(Object.entries(n.attributes??{}).map(([e,t])=>({key:e,value:t})),{allowReservedAttributes:n.allowReservedAttributes===!0}),j={runId:S,deploymentId:n.deploymentId,status:`pending`,workflowName:n.workflowName,specVersion:w,executionContext:n.executionContext,input:n.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:n.attributes??{},createdAt:x,updatedAt:x},!await J(H(e,`runs`,S,t),JSON.stringify(j,W,2)))throw new p(`Workflow run "${S}" already exists`)}else if(i.eventType===`run_started`){if(T){if(T.status===`running`)return{run:T,maxEvents:ir()};j=await hr(e,S,t,{runId:T.runId,deploymentId:T.deploymentId,workflowName:T.workflowName,specVersion:T.specVersion,executionContext:T.executionContext,input:T.input,createdAt:T.createdAt,expiredAt:T.expiredAt,status:`running`,output:void 0,error:void 0,completedAt:void 0,startedAt:T.startedAt??x,updatedAt:x,attributes:T.attributes})}}else if(i.eventType===`run_completed`&&`eventData`in i){let n=i.eventData;T&&(j=await hr(e,S,t,{runId:T.runId,deploymentId:T.deploymentId,workflowName:T.workflowName,specVersion:T.specVersion,executionContext:T.executionContext,input:T.input,createdAt:T.createdAt,expiredAt:T.expiredAt,startedAt:T.startedAt,status:`completed`,output:n.output,error:void 0,completedAt:x,updatedAt:x,attributes:T.attributes}),await Promise.all([Qn(e,S),mr(e,S)]))}else if(i.eventType===`run_failed`&&`eventData`in i){let n=i.eventData;T&&(j=await hr(e,S,t,{runId:T.runId,deploymentId:T.deploymentId,workflowName:T.workflowName,specVersion:T.specVersion,executionContext:T.executionContext,input:T.input,createdAt:T.createdAt,expiredAt:T.expiredAt,startedAt:T.startedAt,status:`failed`,output:void 0,error:n.error,errorCode:n.errorCode,completedAt:x,updatedAt:x,attributes:T.attributes}),await Promise.all([Qn(e,S),mr(e,S)]))}else if(i.eventType===`run_cancelled`)T&&(j=await hr(e,S,t,{runId:T.runId,deploymentId:T.deploymentId,workflowName:T.workflowName,specVersion:T.specVersion,executionContext:T.executionContext,input:T.input,createdAt:T.createdAt,expiredAt:T.expiredAt,startedAt:T.startedAt,status:`cancelled`,output:void 0,error:void 0,completedAt:x,updatedAt:x,attributes:T.attributes}),await Promise.all([Qn(e,S),mr(e,S)]));else if(i.eventType===`attr_set`&&T)j=await nr(S,async()=>{let n=await K(H(e,`runs`,S,t),O);if(!n)throw new c(S);if(oe(i.eventData.changes,{existingKeys:Object.keys(n.attributes),allowReservedAttributes:i.eventData.allowReservedAttributes===!0}),i.correlationId&&i.eventData.writer.type===`workflow`&&!await J(B(e,`.locks`,`attributes`,t?`${S}-${i.correlationId}.created.${t}`:`${S}-${i.correlationId}.created`),``))throw new p(`Attribute event "${i.correlationId}" already exists`);let r={...n,attributes:b(n.attributes,i.eventData.changes),updatedAt:x};return await G(H(e,`runs`,S,t),r,{overwrite:!0}),r});else if(i.eventType===`step_created`&&`eventData`in i){if(!await J(B(e,`.locks`,`steps`,t?`${S}-${i.correlationId}.created.${t}`:`${S}-${i.correlationId}.created`),``))throw new p(`Step "${i.correlationId}" already created`);let n=i.eventData;M={runId:S,stepId:i.correlationId,stepName:n.stepName,status:`pending`,input:n.input,output:void 0,error:void 0,attempt:0,startedAt:void 0,completedAt:void 0,createdAt:x,updatedAt:x,specVersion:w},await G(H(e,`steps`,`${S}-${i.correlationId}`,t),M)}else if(i.eventType===`step_started`){if(!k&&D){let n=i.eventData;if(await J(B(e,`.locks`,`steps`,t?`${S}-${i.correlationId}.created.${t}`:`${S}-${i.correlationId}.created`),``)){let r={runId:S,stepId:i.correlationId,stepName:n.stepName,status:`pending`,input:n.input,output:void 0,error:void 0,attempt:0,startedAt:void 0,completedAt:void 0,createdAt:x,updatedAt:x,specVersion:w};await G(H(e,`steps`,`${S}-${i.correlationId}`,t),r);let a=`evnt_${yn()}`,o={eventType:`step_created`,runId:S,eventId:a,createdAt:x,specVersion:w,correlationId:i.correlationId,eventData:{stepName:n.stepName,input:n.input}};await G(H(e,`events`,`${S}-${a}`,t),o),k=r,de=!0}else throw new p(`Step "${i.correlationId}" already created`)}if(k){if(k.retryAfter&&k.retryAfter.getTime()>Date.now())throw new l(`Cannot start step "${i.correlationId}": retryAfter timestamp has not been reached yet`,{retryAfter:Math.ceil((k.retryAfter.getTime()-Date.now())/1e3)});let n=`${S}-${i.correlationId}`,r=await U(e,`steps`,n,_,t);if(r&&g(r.status))throw new p(`Cannot modify step in terminal state "${r.status}"`);M={...k,status:`running`,startedAt:k.startedAt??x,attempt:k.attempt+1,retryAfter:void 0,updatedAt:x},await G(H(e,`steps`,n,t),M,{overwrite:!0})}}else if(i.eventType===`step_completed`&&`eventData`in i){let n=i.eventData;if(k){let r=`${S}-${i.correlationId}`;if(!await J(B(e,`.locks`,`steps`,t?`${r}.terminal.${t}`:`${r}.terminal`),``))throw new p(`Cannot modify step in terminal state`);M={...k,status:`completed`,output:n.result,completedAt:x,updatedAt:x},await G(H(e,`steps`,r,t),M,{overwrite:!0})}}else if(i.eventType===`step_failed`&&`eventData`in i){let n=i.eventData;if(k){let r=`${S}-${i.correlationId}`;if(!await J(B(e,`.locks`,`steps`,t?`${r}.terminal.${t}`:`${r}.terminal`),``))throw new p(`Cannot modify step in terminal state`);M={...k,status:`failed`,error:n.error,completedAt:x,updatedAt:x},await G(H(e,`steps`,r,t),M,{overwrite:!0})}}else if(i.eventType===`step_retrying`&&`eventData`in i){let n=i.eventData;if(k){let r=`${S}-${i.correlationId}`;M={...k,status:`pending`,error:n.error,retryAfter:n.retryAfter,updatedAt:x},await G(H(e,`steps`,r,t),M,{overwrite:!0})}}else if(i.eventType===`hook_created`&&`eventData`in i){let n=i.eventData,r=gn(e,n.token),s=JSON.stringify({token:n.token,hookId:i.correlationId,runId:S,eventId:o}),c=!1,l=null,u=0,d=0;for(let a=0;a<10&&(await sr(r)||await Yn(e,n.token,t),c=await J(r,s),!c);a++){if(l=await sr(r),!l){d++,d>=3&&await q(r);continue}if(l.runId===S&&l.hookId===i.correlationId||!await cr(e,l,t))break;u++,u<3?await new Promise(e=>setTimeout(e,10)):(await q(r),l.hookId&&(await q(H(e,`hooks`,l.hookId,t)),await q(vn(e,n.token,l.runId,l.hookId)))),l=null}let f=!1;if(!c)if(l?.runId===S&&l.hookId===i.correlationId){let r;if(l.eventId)r=l.eventId;else{let a=await ur(e,S,i.correlationId);if(a!==null)throw await dr(e,S,i.correlationId,a,t),new p(`Hook "${i.correlationId}" already created`);let s=await fr(e,n.token,S,i.correlationId,o);if(s===null)throw new p(`Hook "${i.correlationId}" already created`);r=s}o=r;let a=ae(o.replace(/^evnt_/,``))??x;A={...i,runId:S,eventId:o,createdAt:a,specVersion:w},f=!0}else{let e={eventType:`hook_conflict`,correlationId:i.correlationId,eventData:{token:n.token,...l?{conflictingRunId:l.runId}:{}},runId:S,eventId:o,createdAt:x,specVersion:w};return await ie(e),{event:C(e,a?.resolveData??`all`),run:j,step:M,hook:void 0}}P={runId:S,hookId:i.correlationId,token:n.token,metadata:n.metadata,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:A.createdAt,specVersion:w,isWebhook:n.isWebhook??!1,isSystem:n.isSystem??!1},fe=f?{overwrite:!0}:void 0,await On(e,n.token,S,i.correlationId,o,t)}else if(i.eventType===`hook_disposed`){if(!await J(cn(e,i.correlationId,t),``))throw new p(`Hook "${i.correlationId}" already disposed`);let n=H(e,`hooks`,i.correlationId,t),r=await U(e,`hooks`,i.correlationId,N,t);r&&(await _n(e,r.token,r.runId,r.hookId),await q(vn(e,r.token,r.runId,r.hookId))),await q(n),await jn(e,S,i.correlationId,t)}else if(i.eventType===`wait_created`&&`eventData`in i){let n=`${S}-${i.correlationId}`;if(!await J(B(e,`.locks`,`waits`,t?`${n}.created.${t}`:`${n}.created`),``))throw new p(`Wait "${i.correlationId}" already exists`);let r=i.eventData;F={waitId:n,runId:S,status:`waiting`,resumeAt:r.resumeAt,completedAt:void 0,createdAt:x,updatedAt:x,specVersion:w},await G(H(e,`waits`,n,t),F)}else if(i.eventType===`wait_completed`){let n=`${S}-${i.correlationId}`,r=B(e,`.locks`,`waits`,t?`${n}.completed.${t}`:`${n}.completed`);if(!await J(r,``))throw new p(`Wait "${i.correlationId}" already completed`);let a=await U(e,`waits`,n,te,t);if(!a)throw await L.unlink(r).catch(()=>{}),new s(`Wait "${i.correlationId}" not found`);F={...a,status:`completed`,completedAt:x,updatedAt:x},await G(H(e,`waits`,n,t),F,{overwrite:!0})}if(i.eventType===`hook_received`&&i.correlationId&&await ln(e,i.correlationId,t))throw new f(i.correlationId);let pe=H(e,`events`,`${S}-${o}`,t),I=JSON.stringify(A,W,2),me;if(i.eventType===`hook_received`){let n=await dn(e,S,t),r=n?null:await U(e,`runs`,S,O,t);if(n||r&&m(r.status))throw new u(`Workflow run "${S}" is already in a terminal state`);let i=pn(e,S,o,t);if(!await J(i,I))throw new p(`Event "${o}" already exists for run "${S}"`);try{if(await dn(e,S,t))throw new u(`Workflow run "${S}" is already in a terminal state`);let n=await ut(i,pe);if(n===`missing`)throw new u(`Workflow run "${S}" is already in a terminal state`);me=n===`linked`}finally{await q(i).catch(()=>{})}}else me=await J(pe,I);if(!me)throw i.eventType===`hook_created`&&i.correlationId&&await dr(e,S,i.correlationId,o,t),new p(`Event "${o}" already exists for run "${S}"`);re(A,pe,I),P&&i.eventType===`hook_created`&&(await An(e,P.runId,P.hookId,t),await G(H(e,`hooks`,P.hookId,t),P,fe));let he=a?.resolveData??`all`,ge=C(A,he),_e,ve,ye;if(i.eventType===`run_started`&&j){let t=await X({directory:R.join(e,`events`),schema:E,cachedItems:r,filePrefix:`${S}-`,sortOrder:`asc`,limit:1e3,getCreatedAt:$(`evnt`),getId:e=>e.eventId});_e=t.data,ve=t.cursor,ye=t.hasMore}if(h(i.eventType)&&typeof a?.sinceCursor==`string`){let t=await X({directory:R.join(e,`events`),schema:E,filePrefix:`${S}-`,sortOrder:`asc`,cursor:a.sinceCursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});_e=he===`none`?t.data.map(e=>C(e,he)):t.data,ve=t.cursor,ye=t.hasMore}return{event:ge,run:j,step:M,hook:P,wait:F,events:_e,cursor:ve,hasMore:ye,...de?{stepCreated:!0}:{},...j?{maxEvents:ir()}:{}}}},async get(n,r,i){z(`runId`,n),z(`eventId`,r);let a=await U(e,`events`,`${n}-${r}`,E,t);if(!a)throw Error(`Event ${r} in run ${n} not found`);return C(a,i?.resolveData??`all`)},async list(t){let{runId:n}=t;z(`runId`,n);let i=t.resolveData??`all`,a=await X({directory:R.join(e,`events`),schema:E,cachedItems:r,filePrefix:`${n}-`,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});return i===`none`?{...a,data:a.data.map(e=>C(e,i))}:a},async listByCorrelationId(t){let n=t.correlationId;z(`correlationId`,n);let i=t.resolveData??`all`,a=await X({directory:R.join(e,`events`),schema:E,cachedItems:r,filter:e=>e.correlationId===n,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});return i===`none`?{...a,data:a.data.map(e=>C(e,i))}:a}}}function _r(e,t){return{get:(async(n,r,i)=>{z(`runId`,n),z(`stepId`,r);let a=await U(e,`steps`,`${n}-${r}`,_,t);if(!a)throw Error(`Step ${r} in run ${n} not found`);return Vn(a,i?.resolveData??`all`)}),list:(async t=>{z(`runId`,t.runId);let n=t.resolveData??`all`,r=await X({directory:R.join(e,`steps`),schema:_,filePrefix:`${t.runId}-`,sortOrder:t.pagination?.sortOrder??`desc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`step`),getId:e=>e.stepId});return n===`none`?{...r,data:r.data.map(e=>({...e,input:void 0,output:void 0}))}:r})}}function vr(e,t){let n=rr(e,t),r=_r(e,t),i=gr(e,t),a=Zn(e,t);return{runs:Yt(`world.runs`,n),steps:Yt(`world.steps`,r),events:Yt(`world.events`,i),hooks:Yt(`world.hooks`,a),clearCache:()=>i.clearCache()}}const yr=A(()=>Math.random()),br=P({streams:ne(D())});function xr(e){return e===1}function Sr(e){let t=Buffer.from([+!!e.eof]);return Buffer.concat([t,e.chunk])}function Cr(e){return xr(e[0])}function wr(e){return{eof:Cr(e),chunk:Buffer.from(e.subarray(1))}}async function Tr(e){try{return await L.readdir(e)}catch(e){if(e.code===`ENOENT`)return[];throw e}}function Er(e,t,n,r=n,i=()=>!0){for(let a of t){if(!a.endsWith(n))continue;let t=a.slice(0,-n.length);i(t)&&e.set(t,r)}}function Dr(e,t){return z(`streamName`,t),R.join(e,t)}async function Or(e,t,n){let r=Dr(e,t),i=await Tr(r),a=new Map;return Er(a,i,`.json`),Er(a,i,`.bin`,`.bin`,n?e=>!e.endsWith(`.${n}`):void 0),n&&Er(a,i,`.${n}.bin`),{files:[...a.keys()].sort(),extMap:a,dir:r}}function kr(e,t){let n=t?`.${t}`:``,r=new Te,i=new Set;async function a(n,r){z(`runId`,n),z(`streamName`,r);let a=`${n}:${r}`;if(i.has(a))return;let o=H(e,`streams/runs`,n,t),s=(await U(e,`streams/runs`,n,br,t))?.streams??[];s.includes(r)||(s.push(r),await G(o,{streams:s},{overwrite:!0})),i.add(a)}function o(e){return typeof e==`string`?Buffer.from(new TextEncoder().encode(e)):e instanceof Buffer?e:Buffer.from(e)}return{streams:{async write(t,i,s){let c=`chnk_${yr()}`;await a(await t,i);let l=o(s),u=Sr({chunk:l,eof:!1});await st(R.join(Dr(R.join(e,`streams`,`chunks`),i),`${c}${n}.bin`),u);let d=Uint8Array.from(l);r.emit(`chunk:${i}`,{streamName:i,chunkData:d,chunkId:c})},async writeMulti(t,i,s){if(s.length===0)return;let c=s.map(()=>`chnk_${yr()}`);await a(await t,i);let l=s.map(e=>o(e)).map(async(t,r)=>{let a=c[r],o=Sr({chunk:t,eof:!1});return await st(R.join(Dr(R.join(e,`streams`,`chunks`),i),`${a}${n}.bin`),o),{chunkId:a,chunkData:Uint8Array.from(t)}});for(let e of l){let{chunkId:t,chunkData:n}=await e;r.emit(`chunk:${i}`,{streamName:i,chunkData:n,chunkId:t})}},async close(t,i){let o=`chnk_${yr()}`;await a(await t,i),await st(R.join(Dr(R.join(e,`streams`,`chunks`),i),`${o}${n}.bin`),Sr({chunk:Buffer.from([]),eof:!0})),r.emit(`close:${i}`,{streamName:i})},async list(n){return z(`runId`,n),(await U(e,`streams/runs`,n,br,t))?.streams??[]},async getChunks(n,r,i){let a=i?.limit??100,{files:o,extMap:s,dir:c}=await Or(R.join(e,`streams`,`chunks`),r,t),l=0;if(i?.cursor)try{l=JSON.parse(Buffer.from(i.cursor,`base64`).toString(`utf-8`)).i}catch{l=0}let u=!1,d=[],f=0;for(let e of o){let t=s.get(e)??`.bin`,n=R.join(c,`${e}${t}`);if(f<l){if(xr(await lt(n))){u=!0;break}f++;continue}if(d.length>=a){xr(await lt(n))?u=!0:f++;break}let r=wr(await ct(n));if(r.eof){u=!0;break}d.push({index:f,data:Uint8Array.from(r.chunk)}),f++}let p=!u&&f>l+d.length,m=l+d.length;return{data:d,cursor:p?Buffer.from(JSON.stringify({i:m})).toString(`base64`):null,hasMore:p,done:u}},async getInfo(n,r){let{files:i,extMap:a,dir:o}=await Or(R.join(e,`streams`,`chunks`),r,t),s=!1,c=0;for(let e of i){let t=a.get(e)??`.bin`;if(xr(await lt(R.join(o,`${e}${t}`)))){s=!0;break}c++}return{tailIndex:c-1,done:s}},async get(n,i,a=0){let o=R.join(e,`streams`,`chunks`),s=()=>{},c=null,l=!1;return new ReadableStream({async start(e){let n=new Set,u=[],d=!0,f=!1,p=t=>{if(t.chunkData.byteLength===0){n.add(t.chunkId);return}d?(n.add(t.chunkId),u.push({chunkId:t.chunkId,chunkData:Uint8Array.from(t.chunkData)})):n.has(t.chunkId)||(n.add(t.chunkId),e.enqueue(Uint8Array.from(t.chunkData)))},m=()=>{if(d){f=!0;return}l=!0,s();try{e.close()}catch{}};s=()=>{r.off(`chunk:${i}`,p),r.off(`close:${i}`,m),c&&=(clearInterval(c),null)},r.on(`chunk:${i}`,p),r.on(`close:${i}`,m);let{files:h,extMap:g,dir:_}=await Or(o,i,t),v=h.length;if(typeof a==`number`&&a<0&&h.length>0){let e=h[h.length-1],t=g.get(e)??`.bin`;xr(await lt(R.join(_,`${e}${t}`)))&&v--}let y=typeof a==`number`&&a<0?Math.max(0,v+a):a,b=!1;for(let t=y;t<h.length;t++){let r=h[t],i=r;if(n.has(i))continue;let a=g.get(r)??`.bin`,o=wr(await ct(R.join(_,`${r}${a}`)));if(o?.eof===!0){b=!0;break}n.add(i),o.chunk.byteLength&&e.enqueue(Uint8Array.from(o.chunk))}d=!1,u.sort((e,t)=>e.chunkId.localeCompare(t.chunkId));for(let t of u)e.enqueue(Uint8Array.from(t.chunkData));if(b){l=!0,s();try{e.close()}catch{}return}if(f){l=!0,s();try{e.close()}catch{}return}for(let e=0;e<y&&e<h.length;e++)n.add(h[e]);if(l){s();return}let x=!1;c=setInterval(async()=>{if(!x){x=!0;try{let{files:r,extMap:a}=await Or(o,i,t);for(let t of r){let r=t;if(n.has(r))continue;n.add(r);let i=a.get(t)??`.bin`,o=wr(await ct(R.join(_,`${t}${i}`)));if(o?.eof===!0){l=!0,s();try{e.close()}catch{}return}if(l)return;o.chunk.byteLength&&e.enqueue(Uint8Array.from(o.chunk))}}catch(e){e instanceof Error&&`code`in e||console.error(`[world-local] Unexpected polling error:`,e)}finally{x=!1}}},100)},cancel(){l=!0,s()}})}}}}function Ar(e){let t=e?Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0)):{},n={...Ve.value,...t},r=n.tag,i=on(n),{clearCache:a,...o}=vr(n.dataDir,r),s=He(n);return{specVersion:5,...i,...o,...Yt(`world.streams`,{...kr(n.dataDir,r),...n.streamFlushIntervalMs!==void 0&&{streamFlushIntervalMs:n.streamFlushIntervalMs}}),async start(){if(await Dt(n.dataDir),!s)return;let e=r?e=>et(e,r):tt;await k({...o.runs,list:(t=>o.runs.list({...t,fileIdFilter:e}))},i.queue,`world-local`)},async close(){a(),await i.close()},async clear(){if(a(),r){let e=n.dataDir,t=R.join(e,`hooks`),i=await nt(t,r),{HookSchema:a}=await import(`../../_chunks/workflow/dist-D7ANgxe0.js`).then(e=>e.t);await Promise.all(i.map(async n=>{let r=await K(R.join(t,n),a);r?.token&&(await q(R.join(t,`tokens`,`${sn(r.token)}.json`)),await q(vn(e,r.token,r.runId,r.hookId)))})),await Promise.all([`runs`,`steps`,`events`,`hooks`,`hooks/by-run`,`waits`,`streams/runs`].map(async t=>{let n=R.join(e,t),i=await nt(n,r);await Promise.all(i.map(e=>q(R.join(n,e))))}));for(let t of[`token-index`,`id-index`]){let n=R.join(e,`hooks`,t),i;try{i=await I.readdir(n,{withFileTypes:!0})}catch{i=[]}await Promise.all(i.filter(e=>e.isDirectory()).map(async e=>{let t=R.join(n,e.name),i=await nt(t,r);await Promise.all(i.map(e=>q(R.join(t,e))))}))}await I.rm(R.join(e,`.locks`),{recursive:!0,force:!0}).catch(()=>{});let o=R.join(e,`streams`,`chunks`),s;try{s=await I.readdir(o,{withFileTypes:!0})}catch{s=[]}await Promise.all(s.filter(e=>e.isDirectory()).map(async e=>{let t=R.join(o,e.name),n=await rt(t,r,`.bin`);await Promise.all(n.map(e=>I.unlink(R.join(t,e)).catch(()=>{})))})),Ze()}else Ze(),Fn(),await be(n.dataDir,{recursive:!0,force:!0}),await Dt(n.dataDir)}}}function jr(e){return Ar(e)}export{_t as DataDirAccessError,vt as DataDirVersionError,jr as createLocalWorld,Ar as createWorld,Ct as ensureDataDir,Dt as initDataDir,yt as parseVersion};
|
|
1
|
+
import{i as e,o as t,t as n}from"../../_chunks/workflow/rolldown-runtime-DaDcL9Zw.js";import"../../_chunks/workflow/dist-B-vbuNqP.js";import{i as r,n as i,r as a,t as o}from"../../_chunks/workflow/workflow-routes-CwqB063q.js";import{D as s,T as c,_ as l,d as u,f as d,o as f,r as p}from"../../_chunks/workflow/dist-BeQ_csYA.js";import{A as m,B as h,D as g,E as _,F as v,I as ee,K as y,L as b,R as te,T as ne,U as x,V as S,Y as C,_ as w,a as re,bn as ie,f as ae,j as T,jr as E,k as D,l as O,m as k,n as oe,o as A,q as se,r as ce,u as j,ui as M,vr as N,z as le}from"../../_chunks/workflow/dist-WjtNsOyf.js";import{n as ue,t as de}from"../../_chunks/workflow/spec-version-C0hBsfu-.js";import{t as P}from"../../_chunks/workflow/undici-DWL_MYmT.js";import{createHash as fe}from"node:crypto";import{promisify as pe}from"node:util";import{fileURLToPath as me}from"node:url";import{promises as F}from"node:fs";import I,{access as he,constants as ge,mkdir as _e,readFile as L,readdir as ve,readlink as ye,rm as be,unlink as xe,writeFile as Se}from"node:fs/promises";import R from"node:path";import{tmpdir as Ce}from"node:os";import{execFile as we}from"node:child_process";import{setTimeout as Te}from"node:timers/promises";import{EventEmitter as Ee}from"node:events";function De(e=process.env){return e.VERCEL_DEPLOYMENT_ID?!0:e.VERCEL===`1`&&e.VERCEL_ENV!==`development`&&e.NODE_ENV!==`development`}var Oe=class extends s{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. The world is selected when the app is built, not when it runs, so this reflects the build environment: when a build cannot be identified as a Vercel build (for example \`vercel build\` followed by \`vercel deploy --prebuilt\`, or a build that runs before Vercel system environment variables are available), set WORKFLOW_TARGET_WORLD=vercel in the build environment and rebuild. 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`}};const ke=new Set([`EROFS`,`EACCES`,`EPERM`]);function Ae(e){return e!==void 0&&ke.has(e)}let je=!1;function Me(e){if(je||!De())return;let t=R.resolve(e),n=Ce();t===n||t.startsWith(`${n}${R.sep}`)||(je=!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. The world is selected when the app is built, not when it runs, so this reflects the build environment: when a build cannot be identified as a Vercel build (for example \`vercel build\` followed by \`vercel deploy --prebuilt\`, or a build that runs before Vercel system environment variables are available), set WORKFLOW_TARGET_WORLD=vercel in the build environment and rebuild.`))}function Ne(e,t=10){let n=parseInt(e,t);if(!Number.isNaN(n)&&n>=0&&n<=65535)return n}function Pe(e,t){let n=[],r=e.trim().split(`
|
|
2
|
+
`);for(let e of r){let r=e.trim().split(/\s+/);if(r.length<5||r[0]?.toUpperCase()!==`TCP`)continue;let[,i,,a,o]=r;if(a?.toUpperCase()!==`LISTENING`||o!==t.toString())continue;let s=i.lastIndexOf(`:`);if(s===-1)continue;let c=Ne(i.slice(s+1));c!==void 0&&n.push(c)}return n}const Fe=pe(we);function Ie(e,t=10){let n=parseInt(e,t);if(!Number.isNaN(n)&&n>=0&&n<=65535)return n}const Le=((e,t)=>e.join(t))([``,`proc`],`/`);async function Re(e){let t=[`${Le}/net/tcp`,`${Le}/net/tcp6`],n=[],r=new Set,i=`${Le}/${e}/fd`;try{let e=(await ve(i)).sort((e,t)=>Number.parseInt(e,10)-Number.parseInt(t,10)),t=await Promise.allSettled(e.map(async e=>(await ye(`${i}/${e}`)).match(/^socket:\[(\d+)\]$/)?.[1]??null));for(let e of t)e.status===`fulfilled`&&e.value&&(n.push(e.value),r.add(e.value))}catch{return[]}if(n.length===0)return[];let a=new Map;for(let e of t)try{let t=(await L(e,`utf8`)).split(`
|
|
3
|
+
`).slice(1);for(let e of t){if(!e.trim())continue;let t=e.trim().split(/\s+/);if(t.length<10)continue;let n=t[1],i=t[3],o=t[9];if(!n||i!==`0A`||!o||!r.has(o))continue;let s=n.indexOf(`:`);if(s===-1)continue;let c=n.slice(s+1);if(!c)continue;let l=Ie(c,16);l!==void 0&&a.set(o,l)}}catch{}let o=[];for(let e of n){let t=a.get(e);t!==void 0&&o.push(t)}return o}async function ze(e){try{let{stdout:t}=await Fe(`lsof`,[`-a`,`-i`,`-P`,`-n`,`-p`,e.toString()]),n=[],r=t.split(`
|
|
4
|
+
`);for(let e of r)if(e.includes(`LISTEN`)){let t=e.trim().split(/\s+/)[8];if(t){let e=t.lastIndexOf(`:`);if(e!==-1){let r=Ie(t.slice(e+1));r!==void 0&&n.push(r)}}}return n}catch{return[]}}async function Be(e){try{let{stdout:t}=await Fe(`cmd`,[`/c`,`netstat -ano -p tcp | findstr LISTENING`]);return Pe(t,e)}catch{return[]}}async function Ve(){let{pid:e,platform:t}=process;try{switch(t){case`linux`:return await Re(e);case`darwin`:return await ze(e);case`win32`:return await Be(e);default:return[]}}catch(e){return process.env.NODE_ENV===`development`&&console.debug(`[getAllPorts] Detection failed:`,e),[]}}const He=`${o}/flow?__health`;async function Ue(e,t={}){let{endpoint:n=He,timeout:r=500}=t,i=new AbortController,a=setTimeout(()=>i.abort(),r);try{return(await fetch(`http://localhost:${e}${n}`,{method:`HEAD`,signal:i.signal})).status===200}catch{return!1}finally{clearTimeout(a)}}async function We(e){let t=await Ve();if(t.length===0)return;if(t.length===1)return t[0];let n=(await Promise.all(t.map(async t=>({port:t,isWorkflow:await Ue(t,e)})))).find(e=>e.isWorkflow);return n?n.port:(process.env.NODE_ENV===`development`&&console.debug(`[getWorkflowPort] Probing failed, falling back to first port:`,t[0]),t[0])}function Ge(e){let t={get value(){let n=e();return Object.defineProperty(t,"value",{value:n}),n}};return t}const Ke=()=>process.env.WORKFLOW_LOCAL_DATA_DIR||`.workflow-data`,qe=()=>process.env.WORKFLOW_LOCAL_BASE_URL,Je=Ge(()=>({dataDir:Ke(),baseUrl:qe()}));function Ye(e){if(e.recoverActiveRuns!==void 0)return e.recoverActiveRuns;let t=process.env.WORKFLOW_LOCAL_RECOVER_ACTIVE_RUNS?.toLowerCase();return!(t===`0`||t===`false`)}function Xe(e){return e.baseUrl??process.env.WORKFLOW_LOCAL_BASE_URL??i(`http://localhost`)}async function Ze(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 i(`http://localhost:${e.port}`);if(process.env.PORT)return i(`http://localhost:${process.env.PORT}`);let t=await We({endpoint:a()});if(t)return i(`http://localhost:${t}`);throw Error(`Unable to resolve base URL for workflow queue.`)}const Qe=A(()=>Math.random());function $e(e){let t=typeof e==`string`?e:String(e);return t.length>48?`${t.slice(0,48)}…`:t}var et=class extends s{constructor(e,t){super(`Unsafe ${e} "${$e(t)}": must not be empty, contain ".", "/", "\\", or null bytes`),this.name=`UnsafeEntityIdError`}static is(e){return e instanceof Error&&e.name===`UnsafeEntityIdError`}};function z(e,t){if(t.length===0||t.startsWith(`.`)||t.includes(`/`)||t.includes(`\\`)||t.includes(`\0`)||t.includes(`.`))throw new et(e,t)}function B(e,...t){let n=R.resolve(e),r=R.resolve(e,...t);if(r!==n&&!r.startsWith(n+R.sep))throw new et(`path`,t.join(`/`));return r}const tt=process.platform===`win32`;async function V(e,t=5){if(!tt)return e();let n=[`EPERM`,`EBUSY`,`EACCES`];for(let r=0;r<=t;r++)try{return await e()}catch(e){if(!(r<t&&n.includes(e.code)))throw e;let i=10*2**r+Math.random()*10;await new Promise(e=>setTimeout(e,i))}throw Error(`Retry loop exited unexpectedly`)}const nt=new Set,rt=new Set;function it(){nt.clear(),rt.clear()}const at=/\.[a-zA-Z][a-zA-Z0-9-]*$/;function ot(e){return e.replace(at,``)}function st(e,t){return e.endsWith(`.${t}`)}function ct(e){return!at.test(e)}function H(e,t,n,r){return z(`fileId`,n),r!==void 0&&z(`tag`,r),B(e,t,r?`${n}.${r}.json`:`${n}.json`)}async function U(e,t,n,r,i){if(z(`fileId`,n),i!==void 0&&z(`tag`,i),i){let a=await K(B(e,t,`${n}.${i}.json`),r);if(a!==null)return a}return K(B(e,t,`${n}.json`),r)}async function lt(e,t){let n=`.${t}.json`;try{return(await F.readdir(e)).filter(e=>e.endsWith(n))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function ut(e,t,n){let r=`.${t}${n}`;try{return(await F.readdir(e)).filter(e=>e.endsWith(r))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function dt(e){let t=R.resolve(e);if(!rt.has(t))try{await F.mkdir(t,{recursive:!0}),rt.add(t)}catch(e){let n=e.code;if(Ae(n)&&!await ft(t))throw new Oe(t,n)}}async function ft(e){try{return(await F.stat(e)).isDirectory()}catch{return!1}}async function pt(e,t){await dt(e);try{return await t()}catch(n){if(n.code!==`ENOENT`)throw n;return rt.delete(R.resolve(e)),await dt(e),t()}}function W(e,t){return t instanceof Uint8Array?{__type:`Uint8Array`,data:Buffer.from(t).toString(`base64`)}:t}function mt(e,t){return typeof t==`object`&&t&&t.__type===`Uint8Array`&&typeof t.data==`string`?new Uint8Array(Buffer.from(t.data,`base64`)):t}async function G(e,t,n){return ht(e,JSON.stringify(t,W,2),n)}async function ht(e,t,n){if(!n?.overwrite){if(nt.has(e))throw new p(`File ${e} already exists and 'overwrite' is false`);try{throw await F.access(e),nt.add(e),new p(`File ${e} already exists and 'overwrite' is false`)}catch(e){if(e.code!==`ENOENT`)throw e}}let r=`${e}.tmp.${Qe()}`,i=!1;try{await pt(R.dirname(e),async()=>{await F.writeFile(r,t),i=!0,await V(()=>F.rename(r,e))}),nt.add(e)}catch(e){throw i&&await V(()=>F.unlink(r),3).catch(()=>{}),e}}async function K(e,t){try{let n=await F.readFile(e,`utf-8`);return t.parse(JSON.parse(n,mt))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function gt(e){return await F.readFile(e)}async function _t(e){let t=await F.open(e,`r`);try{let e=Buffer.allocUnsafe(1),{bytesRead:n}=await t.read(e,0,1,0);return n===0?void 0:e[0]}finally{await t.close()}}async function q(e){try{await F.unlink(e)}catch(e){if(e.code!==`ENOENT`)throw e}}async function J(e,t){let n=`${e}.tmp.${Qe()}`,r=!1;try{return await pt(R.dirname(e),async()=>{await F.writeFile(n,t,{flag:`wx`}),r=!0;try{return await V(()=>F.link(n,e)),!0}catch(e){if(e.code===`EEXIST`)return!1;throw e}})}finally{r&&await V(()=>F.unlink(n),3).catch(()=>{})}}async function vt(e,t){try{return await pt(R.dirname(t),()=>V(()=>F.link(e,t))),`linked`}catch(e){if(e.code===`EEXIST`)return`exists`;if(e.code===`ENOENT`)return`missing`;throw e}}async function Y(e){return yt(e,`.json`)}async function yt(e,t){try{return(await F.readdir(e)).filter(e=>e.endsWith(t)).map(e=>e.slice(0,-t.length))}catch(e){if(e.code===`ENOENT`)return[];throw e}}function bt(e){if(!e)return null;let t=e.split(`|`);return{timestamp:new Date(t[0]),id:t[1]||null}}function xt(e,t){return t?`${e.toISOString()}|${t}`:e.toISOString()}async function X(e){let{directory:t,schema:n,cachedItems:r,filePrefix:i,fileIdFilter:a,filter:o,sortOrder:s=`desc`,limit:c=20,cursor:l,getCreatedAt:u,getId:d}=e;i!==void 0&&z(`filePrefix`,i);let f=R.resolve(t),p=await Y(f),m=i?p.filter(e=>e.startsWith(i)):p,h=a?m.filter(a):m,g=bt(l),_=h;g&&(_=h.filter(e=>{let t=u(`${e}.json`);if(t){let e=g.timestamp.getTime(),n=t.getTime();return g.id?s===`desc`?n<=e:n>=e:s===`desc`?n<e:n>e}return!0}));let v=[];for(let e=0;e<_.length;e+=32){let t=_.slice(e,e+32),i=await Promise.all(t.map(async e=>{let t=R.join(f,`${e}.json`);try{let e=r?.get(t);return e===void 0?await K(t,n):structuredClone(e)}catch(t){if(t instanceof M)return console.warn(`Skipping item ${e} due to malformed JSON: ${t.message}`),null;throw t}}));for(let e of i)if(e&&!(o&&!o(e))){if(g){let t=e.createdAt.getTime(),n=g.timestamp.getTime();if(s===`desc`){if(t>n||t===n&&g.id&&d&&d(e)>=g.id)continue}else if(t<n||t===n&&g.id&&d&&d(e)<=g.id)continue}v.push(e)}}v.sort((e,t)=>{let n=e.createdAt.getTime(),r=t.createdAt.getTime(),i=s===`asc`?n-r:r-n;if(i===0&&d){let n=d(e),r=d(t);return s===`asc`?n.localeCompare(r):r.localeCompare(n)}return i});let ee=v.length>c,y=ee?v.slice(0,c):v;return{data:y,cursor:y.length>0?xt(y[y.length-1].createdAt,d?.(y[y.length-1])):null,hasMore:ee}}let Z=null;function St(){return typeof import.meta.url==`string`&&import.meta.url?R.dirname(me(import.meta.url)):null}async function Ct(){if(Z)return Z;let e=St();if(e)try{let t=await L(R.join(e,`../package.json`),`utf-8`);return Z=JSON.parse(t),Z}catch{}return Z={name:`@workflow/world-local`,version:`5.0.0-beta.31`},Z}const wt=`version.txt`;var Tt=class extends Error{dataDir;code;constructor(e,t,n){super(e),this.name=`DataDirAccessError`,this.dataDir=t,this.code=n}},Et=class extends Error{oldVersion;newVersion;suggestedVersion;constructor(e,t,n,r){super(e),this.name=`DataDirVersionError`,this.oldVersion=t,this.newVersion=n,this.suggestedVersion=r}};function Dt(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 Q(e){let t=`${e.major}.${e.minor}.${e.patch}`;return e.prerelease?`${t}-${e.prerelease}`:t}function Ot(e){let t=e.trim(),n=t.lastIndexOf(`@`);if(n<=0)throw Error(`Invalid version file content: "${e}"`);return{packageName:t.substring(0,n),version:Dt(t.substring(n+1))}}function kt(e,t){return`${e}@${Q(t)}`}function At(e,t){console.log(`[world-local] Upgrading from version ${Q(e)} to ${Q(t)}`)}async function jt(e){let t=R.resolve(e);try{await _e(t,{recursive:!0})}catch(e){let n=e;if(n.code!==`EEXIST`)throw new Tt(`Failed to create data directory "${t}": ${n.message}`,t,n.code)}try{await he(t,ge.R_OK)}catch(e){let n=e;throw new Tt(`Data directory "${t}" is not readable: ${n.message}`,t,n.code)}let n=R.join(t,`.workflow-write-test-${Date.now()}`);try{await Se(n,``),await xe(n).catch(e=>{if(e.code!==`ENOENT`)throw e})}catch(e){let n=e;throw new Tt(`Data directory "${t}" is not writable: ${n.message}`,t,n.code)}}async function Mt(e){let t=R.join(R.resolve(e),wt);try{return Ot(await L(t,`utf-8`))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function Nt(e,t){await Se(R.join(R.resolve(e),wt),kt((await Ct()).name,t))}function Pt(e,t){return t||Q(e)}async function Ft(e){await jt(e);let t=await Ct(),n=Dt(t.version),r=await Mt(e);if(r===null){await Nt(e,n);return}let{version:i}=r;if(Q(i)!==Q(n))try{At(i,n),await Nt(e,n)}catch(e){let r=Pt(i,e instanceof Et?e.suggestedVersion:void 0);throw console.error(`[world-local] Failed to upgrade data directory from version ${Q(i)} to ${Q(n)}:`,e instanceof Error?e.message:e),console.error(`[world-local] Data is not compatible with the current version. Please downgrade to ${t.name}@${r}`),e}}let It=null;async function Lt(){return It||=import(`../../_chunks/workflow/src-Cj3P1ChQ.js`).then(e=>t(e.t(),1)).catch(()=>null),It}let Rt=null;async function zt(){return Rt||=Lt().then(e=>e?e.trace.getTracer(`workflow`):null),Rt}async function Bt(e,...t){let[n,r]=await Promise.all([zt(),Lt()]),{fn:i,opts:a}=typeof t[0]==`function`?{fn:t[0],opts:{}}:{fn:t[1],opts:t[0]};if(!i)throw Error(`Function to trace must be provided`);return!n||!r?await i():n.startActiveSpan(e,a,async e=>{try{let t=await i(e);return e.setStatus({code:r.SpanStatusCode.OK}),t}catch(t){throw e.setStatus({code:r.SpanStatusCode.ERROR,message:t.message}),t}finally{e.end()}})}async function Vt(e){let t=await Lt();if(t)return t.SpanKind[e]}function Ht(...e){return t=>Object.fromEntries(e.map(e=>[e,t]))}const Ut=Ht(`peer.service`),Wt=Ht(`rpc.system`),Gt=Ht(`rpc.service`),Kt=Ht(`rpc.method`),qt=Ht(`workflow.run.id`),Jt=Ht(`step.id`),Yt={peerService:`world-local`,rpcSystem:`local`,rpcService:`world-local`},Xt={"world.runs.get":0,"world.runs.experimentalSetAttributes":0,"world.steps.get":0,"world.events.create":0,"world.events.get":0},Zt=new Set([`world.steps.list`,`world.events.list`,`world.hooks.list`]);function Qt(e){if(e.length>=2&&typeof e[1]==`object`&&e[1]!==null){let t=e[1];if(typeof t.eventType==`string`)return t.eventType}}function $t(e,t){return typeof e[t]==`string`?e[t]:void 0}function en(e){if(typeof e!=`object`||!e)return;let t=e.runId;return typeof t==`string`?t:void 0}function tn(e){if(typeof e!=`object`||!e)return;let t=e;if(typeof t.runId==`string`)return t.runId;for(let e of[`run`,`step`,`hook`,`wait`]){let n=t[e];if(typeof n==`object`&&n){let e=n.runId;if(typeof e==`string`)return e}}}function nn(e,t,n){let r=`${e}.${t}`,i={},a=Xt[r],o=a===void 0?Zt.has(r)?en(n[0]):void 0:$t(n,a);if(o&&Object.assign(i,qt(o)),r===`world.steps.get`){let e=$t(n,1);e&&Object.assign(i,Jt(e))}return i}function rn(e,t){let n={};for(let r of Object.keys(t))if(typeof t[r]!=`function`)n[r]=t[r];else{let i=t[r],a=String(r);n[r]=async(...t)=>{let n=`${e}.${a}`;if(e===`world.events`&&a===`create`){let r=Qt(t);r&&(n=`${e}.${a} ${r}`)}return Bt(n,{kind:await Vt(`INTERNAL`)},async r=>{r?.setAttributes({...Ut(Yt.peerService),...Wt(Yt.rpcSystem),...Gt(Yt.rpcService),...Kt(n),...nn(e,a,t)});let o=await i(...t),s=tn(o);return s&&r?.setAttributes(qt(s)),o})}}return n}var an=n((t=>{var n=t&&t.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.RateLimit=t.Sema=void 0;let r=n(e(`events`));function i(e,t,n,r,i){for(let a=0;a<i;++a)n[a+r]=e[a+t],e[a+t]=void 0}function a(e){return e>>>=0,--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e+1}function o(e){return a(Math.min(Math.max(16,e),1073741824))}var s=class{constructor(e){this._capacity=o(e),this._length=0,this._front=0,this.arr=[]}push(e){let t=this._length;this.checkCapacity(t+1);let n=this._front+t&this._capacity-1;return this.arr[n]=e,this._length=t+1,t+1}pop(){let e=this._length;if(e===0)return;let t=this._front+e-1&this._capacity-1,n=this.arr[t];return this.arr[t]=void 0,this._length=e-1,n}shift(){let e=this._length;if(e===0)return;let t=this._front,n=this.arr[t];return this.arr[t]=void 0,this._front=t+1&this._capacity-1,this._length=e-1,n}get length(){return this._length}checkCapacity(e){this._capacity<e&&this.resizeTo(o(this._capacity*1.5+16))}resizeTo(e){let t=this._capacity;this._capacity=e;let n=this._front,r=this._length;if(n+r>t){let e=n+r&t-1;i(this.arr,0,this.arr,t,e)}}},c=class extends r.default{};function l(e){return typeof e==`function`}function u(){return`1`}var d=class{constructor(e,{initFn:t=u,pauseFn:n,resumeFn:r,capacity:i=10}={}){if(l(n)!==l(r))throw Error(`pauseFn and resumeFn must be both set for pausing`);this.nrTokens=e,this.free=new s(e),this.waiting=new s(i),this.releaseEmitter=new c,this.noTokens=t===u,this.pauseFn=n,this.resumeFn=r,this.paused=!1,this.releaseEmitter.on(`release`,e=>{let t=this.waiting.shift();t?t.resolve(e):(this.resumeFn&&this.paused&&(this.paused=!1,this.resumeFn()),this.free.push(e))});for(let n=0;n<e;n++)this.free.push(t())}tryAcquire(){return this.free.pop()}async acquire(){let e=this.tryAcquire();return e===void 0?new Promise((e,t)=>{this.pauseFn&&!this.paused&&(this.paused=!0,this.pauseFn()),this.waiting.push({resolve:e,reject:t})}):e}release(e){this.releaseEmitter.emit(`release`,this.noTokens?`1`:e)}drain(){let e=Array(this.nrTokens);for(let t=0;t<this.nrTokens;t++)e[t]=this.acquire();return Promise.all(e)}nrWaiting(){return this.waiting.length}};t.Sema=d;function f(e,{timeUnit:t=1e3,uniformDistribution:n=!1}={}){let r=new d(n?1:e),i=n?t/e:t;return async function(){await r.acquire(),setTimeout(()=>r.release(),i)}}t.RateLimit=f}))(),on=P(),sn=class{contentType=`application/json`;serialize(e){return Buffer.from(JSON.stringify(e,W))}async deserialize(e){let t=[],n=e.getReader();for(;;){let{done:e,value:r}=await n.read();if(e)break;r&&t.push(r)}let r=Buffer.concat(t).toString();return JSON.parse(r,mt)}};const cn=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_MAX_VISIBILITY??`0`,10)||1/0,ln=2147483647,un=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_CONCURRENCY??`0`,10)||1e3,dn=`Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer`;function fn(e){let t=e,n=new Set;for(;t&&typeof t==`object`&&!n.has(t);){if(n.add(t),`message`in t&&typeof t.message==`string`&&t.message.includes(dn))return!0;t=`cause`in t?t.cause:void 0}return!1}function pn(e){let t=new on.Agent({headersTimeout:0,connections:1e3,keepAliveTimeout:3e4}),n=new sn,i=A(),a=new an.Sema(un),o=new AbortController,s=o.signal,c=new Map,l=new Map,u=async(o,u,d)=>{let f=[];if(d?.idempotencyKey){let e=c.get(d.idempotencyKey);if(e)return{messageId:e}}let p=n.serialize(u),{prefix:m}=w(o),h=ae.parse(`msg_${i()}`),g=u,_=g.runId??void 0,v=g.stepId??void 0;if(d?.idempotencyKey){let e=d.idempotencyKey;c.set(e,h),f.push(()=>{c.delete(e)})}return(async()=>{d?.delaySeconds&&d.delaySeconds>0&&await Te(Math.min(d.delaySeconds*1e3,ln),void 0,{signal:s}),a.tryAcquire()||(console.warn(`[world-local]: concurrency limit (${un}) reached, waiting for queue to free up`),await a.acquire());let n=0;try{for(let i=0;i<256;i++){let a={...d?.headers,"content-type":`application/json`,"x-vqs-queue-name":o,"x-vqs-message-id":h,"x-vqs-message-attempt":String(n+1)},c=l.get(m),u;try{if(c)u=await c(new Request(r(Xe(e),{type:`flow`}),{method:`POST`,headers:a,body:p}));else{let n=await Ze(e);u=await fetch(r(n,{type:`flow`}),{method:`POST`,duplex:`half`,dispatcher:t,headers:a,body:p})}}catch(e){let t=e?.name;if(s.aborted||t===`AbortError`||t===`ResponseAborted`)return;if(fn(e))throw e;console.error(`[world-local] Queue delivery failed at the transport (loop ${i+1}), retrying`,{queueName:o,messageId:h,..._&&{runId:_},...v&&{stepId:v},error:String(e)}),await Te(5e3,void 0,{signal:s});continue}n++;let f=await u.text();if(u.ok){try{let e=Number(JSON.parse(f).timeoutSeconds);if(Number.isFinite(e)&&e>=0){e>0&&await Te(Math.min(e*1e3,ln),void 0,{signal:s});continue}}catch{}return}console.error(`[world-local] Queue message failed (attempt ${n}, HTTP ${u.status})`,{queueName:o,messageId:h,..._&&{runId:_},...v&&{stepId:v},handlerError:f}),await Te(5e3,void 0,{signal:s})}console.error(`[world-local] Queue message exhausted safety limit (256 attempts)`,{queueName:o,messageId:h,..._&&{runId:_},...v&&{stepId:v}})}finally{a.release()}})().catch(e=>{e?.name===`AbortError`||e?.name===`ResponseAborted`||(fn(e)?console.error(`[local world] Queue operation failed: detected "${dn}". 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 https://workflow-sdk.dev/docs/getting-started/next#configure-proxy-handler`,{queueName:o,messageId:h,..._&&{runId:_},...v&&{stepId:v},originalError:e}):console.error(`[local world] Queue operation failed:`,e))}).finally(()=>{for(let e of f)e()}),{messageId:h}},d=N({"x-vqs-queue-name":k,"x-vqs-message-id":ae,"x-vqs-message-attempt":C()});return{queue:u,createQueueHandler:(e,t)=>async n=>{let r=d.safeParse(Object.fromEntries(n.headers));if(!r.success||!n.body)return Response.json({error:n.body?`Missing required headers`:`Missing request body`},{status:400});let i=r.data[`x-vqs-queue-name`],a=r.data[`x-vqs-message-id`],o=r.data[`x-vqs-message-attempt`];if(!i.startsWith(e))return Response.json({error:`Unhandled queue`},{status:400});let s=await new sn().deserialize(n.body);try{let e=await t(s,{attempt:o,queueName:i,messageId:a}),n=null;return typeof e?.timeoutSeconds==`number`&&(n=Math.min(e.timeoutSeconds,cn)),n==null?Response.json({ok:!0}):Response.json({timeoutSeconds:n})}catch(e){return Response.json(String(e),{status:500})}},getDeploymentId:async()=>`dpl_local@${(await Ct()).version}`,registerHandler(e,t){l.set(e,t)},async close(){s.aborted||(o.abort(),await t.close())}}}function mn(e){return fe(`sha256`).update(e).digest(`hex`)}function hn(e,t,n){return B(e,`.locks`,`hooks`,n?`${t}.disposed.${n}`:`${t}.disposed`)}async function gn(e,t,n){let r=[hn(e,t)];n&&r.push(hn(e,t,n));for(let e of r)try{return await I.access(e),!0}catch{}return!1}function _n(e,t,n){return B(e,`.locks`,`runs`,n?`${t}.terminal.${n}`:`${t}.terminal`)}async function vn(e,t,n){let r=[_n(e,t)];n&&r.push(_n(e,t,n));for(let e of r)try{return await I.access(e),!0}catch(e){if(e.code!==`ENOENT`)throw e}return!1}function yn(e,t,n){return B(e,`.locks`,`runs`,n?`${t}.pending.${n}`:`${t}.pending`)}function bn(e,t,n,r){return R.join(yn(e,t,r),`${n}.json`)}async function xn(e,t,n){let r=[yn(e,t)];n&&r.push(yn(e,t,n));for(let e of r){let t;try{t=await I.readdir(e)}catch(e){if(e.code===`ENOENT`)continue;throw e}for(let n of t)try{await V(()=>I.unlink(R.join(e,n)))}catch(e){if(e.code!==`ENOENT`)throw e}await I.rmdir(e).catch(()=>{})}}async function Sn(e,t,n){let r=[];try{r=await I.readdir(R.join(e,`events`))}catch(e){if(e.code!==`ENOENT`)throw e}let i=`${t}-`,a=null;for(let e of r){if(!e.startsWith(i)||!e.endsWith(`.json`))continue;let t=e.slice(0,-5);if(!ct(t)&&!(n&&st(t,n)))continue;let r=ot(t).slice(i.length);(!a||r>a)&&(a=r)}let o=Date.now();if(a)try{let e=re(a.replace(/^evnt_/,``));o<=e&&(o=e+1)}catch{}return{eventId:`evnt_${En(o)}`,createdAt:new Date(o)}}function Cn(e,t){return R.join(e,`hooks`,`tokens`,`${mn(t)}.json`)}async function wn(e,t,n,r){let i=Cn(e,t),a;try{a=JSON.parse(await I.readFile(i,`utf8`))}catch{return}a.runId!==n||a.hookId!==r||await I.unlink(i).catch(()=>{})}function Tn(e,t,n,r){let i=fe(`sha256`).update(`${t}\x00${n}\x00${r}`).digest(`hex`);return R.join(e,`hooks`,`tokens`,`${i}.recovery.json`)}const En=A(()=>Math.random()),$=e=>{let t=RegExp(`^${e}_`,`g`);return n=>{let r=ot(n.replace(/\.json$/,``))+`.json`,i=r.indexOf(`-`);return i===-1?oe(r.replace(/\.json$/,``).replace(t,``)):e===`step`?null:oe(r.substring(i+1).replace(/\.json$/,``).replace(t,``))}},Dn=N({runId:E()}),On=N({hookId:E(),tag:E().optional()});function kn(e,t){return B(e,`hooks`,`token-index`,mn(t))}function An(e,t){return z(`hookId`,t),B(e,`hooks`,`id-index`,t)}function jn(e){return B(e,`hooks`,`by-run`)}function Mn(e){let t=ot(e);return t===e?void 0:e.slice(t.length+1)}function Nn(e,t){return t?ct(e)||st(e,t):ct(e)}async function Pn(e){try{return await K(e,T)}catch(e){if(e instanceof SyntaxError||e instanceof M)return null;throw e}}async function Fn(e,t,n,r,i,a){z(`runId`,n),z(`eventId`,i),a!==void 0&&z(`tag`,a);let o=a?`${i}.${a}.json`:`${i}.json`,s=JSON.stringify({runId:n});await Promise.all([J(R.join(kn(e,t),o),s),J(R.join(An(e,r),o),s)])}function In(e,t,n,r){return H(e,`hooks/by-run`,`${t}-${n}`,r)}async function Ln(e,t,n,r){await J(In(e,t,n,r),JSON.stringify(r?{hookId:n,tag:r}:{hookId:n}))}async function Rn(e,t,n,r){await q(In(e,t,n,r)),r&&await q(In(e,t,n))}async function zn(e,t){z(`runId`,t);let n=jn(e),r=`${t}-`,i=[];for(let e of await Y(n)){if(!e.startsWith(r))continue;let t=null;try{t=await K(R.join(n,`${e}.json`),On)}catch(e){if(!(e instanceof SyntaxError||e instanceof M))throw e}i.push({fileId:e,hookId:t?.hookId??null,tag:t?.tag})}return i}async function Bn(e,t){await q(R.join(jn(e),`${t}.json`))}const Vn=new Map;function Hn(){Vn.clear()}async function Un(e){let t=R.resolve(e),n=Vn.get(t);return n||(n=Gn(t).catch(e=>{throw Vn.delete(t),e}),Vn.set(t,n)),n}async function Wn(e,t,n){for(let r=0;r<e.length;r+=t)await Promise.all(e.slice(r,r+t).map(n))}async function Gn(e){let t=R.join(e,`hooks`,`.hook-index-complete`);try{await I.access(t);return}catch{}let n=R.join(e,`events`);await Wn(await Y(n),32,async t=>{let r=await Pn(R.join(n,`${t}.json`));if(!r||r.eventType!==`hook_created`||typeof r.correlationId!=`string`)return;let i=r.eventData?.token;if(typeof i==`string`)try{await Fn(e,i,r.runId,r.correlationId,r.eventId,Mn(t))}catch{}});let r=R.join(e,`hooks`);await Wn(await Y(r),32,async t=>{let n=null;try{n=await K(R.join(r,`${t}.json`),j)}catch(e){if(!(e instanceof SyntaxError||e instanceof M))throw e}if(n)try{await Ln(e,n.runId,n.hookId,Mn(t))}catch{}}),await J(t,``)}async function Kn(e,t,n,r){await Un(e);let i;try{i=t.kind===`token`?kn(e,t.token):An(e,t.hookId)}catch{return null}let a=(await Y(i)).filter(e=>Nn(e,r)).sort((e,t)=>ot(t).localeCompare(ot(e)));for(let t of a){let r=null;try{r=await K(R.join(i,`${t}.json`),Dn)}catch(e){if(!(e instanceof SyntaxError||e instanceof M))throw e}if(!r)continue;let a=ot(t),o;try{o=H(e,`events`,`${r.runId}-${a}`,Mn(t))}catch{continue}let s=await Pn(o);if(s&&s.eventType===`hook_created`&&typeof s.correlationId==`string`&&n(s))return s}return null}function qn(e,t){return t===`none`?{...e,input:void 0,output:void 0}:e}function Jn(e,t){return t===`none`?{...e,input:void 0,output:void 0}:e}function Yn(e,t){if(t===`none`){let{metadata:t,...n}=e;return n}return e}function Xn(e){if(e.eventType!==`hook_created`)return;let t=e.eventData.token;return typeof t==`string`?t:void 0}function Zn(e){let{token:t,metadata:n,isWebhook:r,isSystem:i}=e.eventData;return{runId:e.runId,hookId:e.correlationId,token:t,metadata:n,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:e.createdAt,specVersion:e.specVersion,isWebhook:r??!0,isSystem:i??!1}}function Qn(e,t){return e.eventType===`hook_created`&&typeof e.correlationId==`string`&&t(e)}async function $n(e,t,n){let r=await U(e,`runs`,t,D,n);return r?m(r.status):!1}async function er(e,t,n,r){let i=await Kn(e,t,e=>Qn(e,n),r);return!i||!Qn(i,n)||await $n(e,i.runId,r)||await gn(e,i.correlationId,r)?null:i}async function tr(e,t,n){let r=Zn(t);return await J(R.join(e,`hooks`,`tokens`,`${mn(r.token)}.json`),JSON.stringify({token:r.token,hookId:r.hookId,runId:r.runId,eventId:t.eventId})),await Ln(e,r.runId,r.hookId,n),await J(H(e,`hooks`,r.hookId,n),JSON.stringify(r,W,2)),r}async function nr(e,t,n){let r=await er(e,{kind:`token`,token:t},e=>Xn(e)===t,n);return r?tr(e,r,n):null}async function rr(e,t,n){let r=await er(e,{kind:`id`,hookId:t},e=>e.correlationId===t,n);return r?tr(e,r,n):null}function ir(e,t){let n=N({hookId:E().optional()});async function r(r){let i=null;try{i=await K(Cn(e,r),n)}catch(e){if(!(e instanceof SyntaxError||e instanceof M))throw e}if(i?.hookId)try{let n=await U(e,`hooks`,i.hookId,j,t);if(n&&n.token===r)return{...n,isWebhook:n.isWebhook??!0}}catch(e){if(!et.is(e))throw e}let a=R.join(e,`hooks`),o=await Y(a);for(let e of o){let t=await K(R.join(a,`${e}.json`),j);if(t&&t.token===r)return{...t,isWebhook:t.isWebhook??!0}}return null}async function i(n,r){z(`hookId`,n);let i=await U(e,`hooks`,n,j,t);if(!i){let i=await rr(e,n,t);if(!i)throw new f(n);let a=r?.resolveData||`all`;return Yn({...i,isWebhook:i.isWebhook??!0},a)}let a=r?.resolveData||`all`;return Yn({...i,isWebhook:i.isWebhook??!0},a)}async function a(n){let i=await r(n)??await nr(e,n,t);if(!i)throw new f(n);return i}async function o(t){let n=R.join(e,`hooks`),r=t.resolveData||`all`,i=await X({directory:n,schema:j,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,filePrefix:void 0,filter:e=>!(t.runId&&e.runId!==t.runId),getCreatedAt:()=>null,getId:e=>e.hookId});return{...i,data:i.data.map(e=>Yn(e,r))}}return{get:i,getByToken:a,list:o}}async function ar(e,t){await Un(e);for(let n of await zn(e,t)){if(n.hookId){let r=null,i=null;try{i=H(e,`hooks`,n.hookId,n.tag),r=await K(i,j)}catch(e){if(!et.is(e)&&!(e instanceof SyntaxError||e instanceof M))throw e}r&&i&&r.runId===t&&(await wn(e,r.token,r.runId,r.hookId),await q(Tn(e,r.token,r.runId,r.hookId)),await q(i))}await Bn(e,n.fileId)}}async function or(e,t,n,r,i,a){if(m(a.status)||await vn(e,t))throw new u(`Workflow run "${t}" is already in a terminal state`);let o=bn(e,t,n);await J(o,r);try{if(await vn(e,t)||await vt(o,i)!==`linked`)throw new u(`Workflow run "${t}" is already in a terminal state`)}finally{await I.unlink(o).catch(()=>{})}}async function sr(e,t,n,r,i){z(`runId`,t);let a=i?.resolveData??`all`;switch(n.eventType){case`run_cancelled`:{await J(_n(e,t),``),await xn(e,t);let n=new Date,i={runId:r.runId,deploymentId:r.deploymentId,workflowName:r.workflowName,specVersion:r.specVersion,executionContext:r.executionContext,input:r.input,createdAt:r.createdAt,expiredAt:r.expiredAt,startedAt:r.startedAt,status:`cancelled`,output:void 0,error:void 0,completedAt:n,updatedAt:n,attributes:r.attributes};return await G(B(e,`runs`,`${t}.json`),i,{overwrite:!0}),await ar(e,t),{event:void 0,run:qn(i,a)}}case`wait_completed`:case`hook_received`:{let i=`evnt_${En()}`,o=new Date,s={...n,runId:t,eventId:i,createdAt:o,specVersion:5},c=B(e,`events`,`${`${t}-${i}`}.json`);return n.eventType===`hook_received`?await or(e,t,i,JSON.stringify(s,W,2),c,r):await G(c,s),{event:S(s,a)}}default:throw Error(`Event type '${n.eventType}' not supported for legacy runs (specVersion: ${r.specVersion||`undefined`}). Please upgrade 'workflow' package.`)}}const cr=new Map;function lr(e,t){let n=cr.get(e),r={},i=(async()=>{n&&await n.catch(()=>void 0);try{return await t()}finally{cr.get(e)===r.task&&cr.delete(e)}})();return r.task=i,cr.set(e,i),i}function ur(e,t){let n=(async(n,r)=>{z(`runId`,n);let i=await U(e,`runs`,n,D,t);if(!i)throw new c(n);return qn(i,r?.resolveData??`all`)});return{get:n,getMany:(async(e,t)=>{let r=[...new Set(e)],i=await Promise.all(r.map(async e=>{try{return await n(e,t)}catch(e){if(e instanceof c)return null;throw e}})),a=new Map(r.map((e,t)=>[e,i[t]]));return e.map(e=>a.get(e)??null)}),list:(async t=>{let n=t?.resolveData??`all`,r=await X({directory:R.join(e,`runs`),schema:D,fileIdFilter:t?.fileIdFilter,filter:e=>!(t?.workflowName&&e.workflowName!==t.workflowName||t?.status&&e.status!==t.status),sortOrder:t?.pagination?.sortOrder??`desc`,limit:t?.pagination?.limit??200,cursor:t?.pagination?.cursor,getCreatedAt:$(`wrun`),getId:e=>e.runId});return n===`none`?{...r,data:r.data.map(e=>({...e,input:void 0,output:void 0}))}:r}),experimentalSetAttributes:async(n,r,i)=>(z(`runId`,n),lr(n,async()=>{let a=await U(e,`runs`,n,D,t);if(!a)throw new c(n);try{se(r,{existingKeys:Object.keys(a.attributes??{}),allowReservedAttributes:i?.allowReservedAttributes})}catch(e){throw e instanceof x,e}let o=y(a.attributes,r),s={...a,attributes:o,updatedAt:new Date};return await G(H(e,`runs`,n,t),s,{overwrite:!0}),{attributes:o}}))}}function dr(){let e=process.env.WORKFLOW_MAX_EVENTS,t=e===void 0?NaN:Number(e);return Number.isInteger(t)&&t>0?t:25e3}const fr=N({hookId:E().optional(),runId:E(),eventId:E().optional()}),pr=N({eventId:E()});async function mr(e){try{return await K(e,fr)}catch(e){if(e instanceof SyntaxError||e instanceof M)return null;throw e}}async function hr(e,t,n){if(t.hookId&&await gn(e,t.hookId,n))return!0;let r=await U(e,`runs`,t.runId,D,n);return!r||m(r.status)}async function gr(e){try{return await K(e,pr)}catch(e){if(e instanceof SyntaxError||e instanceof M)return null;throw e}}async function _r(e,t,n){return(await X({directory:R.join(e,`events`),schema:T,filePrefix:`${t}-`,filter:e=>e.eventType===`hook_created`&&e.correlationId===n,limit:1,getCreatedAt:$(`evnt`),getId:e=>e.eventId})).data[0]?.eventId??null}async function vr(e,t,n,r,i){let a=await U(e,`events`,`${t}-${r}`,T,i);if(!a||a.eventType!==`hook_created`||a.correlationId!==n||await U(e,`hooks`,n,j,i))return;let o=a.eventData??{};if(typeof o.token!=`string`)return;let s={runId:t,hookId:n,token:o.token,metadata:o.metadata,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:a.createdAt,specVersion:a.specVersion,isWebhook:o.isWebhook??!0,isSystem:o.isSystem??!1};await Fn(e,o.token,t,n,r,i),await Ln(e,t,n,i),await J(H(e,`hooks`,n,i),JSON.stringify(s,W,2))}async function yr(e,t,n,r,i){let a=Tn(e,t,n,r);return await J(a,JSON.stringify({eventId:i}))?i:(await gr(a))?.eventId??null}function br(e,t,n){let r=e.get(t),i={},a=(async()=>{r&&await r.catch(()=>void 0);try{return await n()}finally{e.get(t)===i.task&&e.delete(t)}})();return i.task=a,e.set(t,a),a}async function xr(e,t){let n=R.join(e,`waits`),r=await Y(n);for(let e of r)e.startsWith(`${t}-`)&&await q(R.join(n,`${e}.json`))}async function Sr(e,t,n,r){return lr(t,async()=>{let i=await K(H(e,`runs`,t,n),D),a={...r,attributes:i?.attributes??r.attributes};return await G(H(e,`runs`,t,n),a,{overwrite:!0}),a})}function Cr(e,t){let n=4*1024*1024,r=new Map,i=new Map,a=new Map,o=0;function x(e){let t=r.get(e);if(!t)return;r.delete(e),o-=i.get(e)??0,i.delete(e);let n=a.get(t.runId);n?.delete(e),n?.size===0&&a.delete(t.runId)}function C(e){for(let t of a.get(e)??[])x(t)}function w(){r.clear(),i.clear(),a.clear(),o=0}function re(e,t,s){if(s>n)return;for(;r.size>0&&(r.size>=1e3||o+s>n);){let e=r.keys().next().value;x(e)}r.set(e,t),i.set(e,s),o+=s;let c=a.get(t.runId)??new Set;c.add(e),a.set(t.runId,c)}function ie(e,t,r){if(le(e.eventType)){C(e.runId);return}let i=Buffer.byteLength(r);if(i>n)return;let a=T.safeParse(JSON.parse(r,mt));a.success&&re(t,a.data,i)}async function ae(n){let r=H(e,`events`,`${n.runId}-${n.eventId}`,t),i=JSON.stringify(n,W,2);await ht(r,i),ie(n,r,i)}let E=new Map,O=new Map;return{clearCache:w,async create(n,i,a){if(n!=null&&n!==``&&z(`runId`,n),`correlationId`in i&&typeof i.correlationId==`string`&&z(`correlationId`,i.correlationId),te(i.eventType)&&n&&i.correlationId){let e=t?`${n}-${i.correlationId}.${t}`:`${n}-${i.correlationId}`;return br(E,e,()=>o())}if(b(i.eventType)&&n&&i.correlationId){let e=t?`${n}-${i.correlationId}.hook.${t}`:`${n}-${i.correlationId}.hook`;return br(O,e,()=>o())}return o();async function o(){let o=`evnt_${En()}`,b=new Date,x;if(i.eventType===`run_created`&&(!n||n===``))x=`wrun_${En()}`;else if(n)x=n;else throw Error(`runId is required for non-run_created events`);if(i.eventType===`run_created`&&n&&n!==``){let e=ce(x,`wrun_`);if(e)throw new s(e)}let C=i.specVersion??5,w=null;if(i.eventType!==`run_created`&&![`step_completed`,`step_retrying`].includes(i.eventType)&&(w=await U(e,`runs`,x,D,t),i.eventType===`run_started`&&!w&&`eventData`in i&&i.eventData)){let n=i.eventData;if(n.deploymentId&&n.workflowName&&n.input!==void 0){se(Object.entries(n.attributes??{}).map(([e,t])=>({key:e,value:t})),{allowReservedAttributes:n.allowReservedAttributes===!0});let r={runId:x,deploymentId:n.deploymentId,status:`pending`,workflowName:n.workflowName,specVersion:C,executionContext:n.executionContext,input:n.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:n.attributes??{},encryptionPublicKey:n.encryptionPublicKey,createdAt:b,updatedAt:b};if(await J(H(e,`runs`,x,t),JSON.stringify(r,W))){let e=`evnt_${En()}`;await ae({eventType:`run_created`,runId:x,eventId:e,createdAt:b,specVersion:C,eventData:{deploymentId:n.deploymentId,workflowName:n.workflowName,input:n.input,executionContext:n.executionContext,attributes:n.attributes,allowReservedAttributes:n.allowReservedAttributes,encryptionPublicKey:n.encryptionPublicKey}}),w=r}else w=await U(e,`runs`,x,D,t)}}if(i.eventType===`run_failed`&&!w||i.eventType===`attr_set`&&!w)throw new c(x);if(w){if(ue(w.specVersion))throw new d(w.specVersion,5);if(de(w.specVersion))return sr(e,x,i,w,a)}let re=v(i),E=re&&i.eventType===`step_started`;if(w&&m(w.status)){if(i.eventType===`run_cancelled`&&w.status===`cancelled`){let e={...i,runId:x,eventId:o,createdAt:b,specVersion:C};return await ae(e),{event:S(e,a?.resolveData??`all`),run:w,...w?{maxEvents:dr()}:{}}}if(i.eventType===`run_started`)throw new u(`Workflow run "${x}" is already in terminal state "${w.status}"`);if(le(i.eventType))throw new p(`Cannot transition run from terminal state "${w.status}"`);if(re)throw new p(`Cannot create new entities on run in terminal state "${w.status}"`);if(i.eventType===`attr_set`)throw new p(`Cannot set attributes on run in terminal state "${w.status}"`)}let O=null;if(te(i.eventType)&&i.eventType!==`step_created`&&i.correlationId){if(O=await U(e,`steps`,`${x}-${i.correlationId}`,_,t),!O&&!E)throw new s(`Step "${i.correlationId}" not found`);if(E&&O)throw new p(`Step "${i.correlationId}" already created`);if(O){if(g(O.status))throw new p(`Cannot modify step in terminal state "${O.status}"`);if(w&&m(w.status)&&O.status!==`running`)throw new u(`Cannot modify non-running step on run in terminal state "${w.status}"`)}}if(ee(i.eventType)&&i.correlationId&&(i.eventType===`hook_received`&&await gn(e,i.correlationId,t)||!await U(e,`hooks`,i.correlationId,j,t)))throw new f(i.correlationId);let k={...i,runId:x,eventId:o,createdAt:b,specVersion:C};if(i.eventType===`run_started`&&`eventData`in k&&delete k.eventData,E&&k.eventType===`step_started`&&k.eventData){let{input:e,...t}=k.eventData;k={...k,eventData:t}}let A,M,N,P,fe=!1,pe;if(le(i.eventType)&&w){await J(_n(e,x,t),``),await xn(e,x,t);let n=await Sn(e,x,t);o=n.eventId,k={...k,eventId:o,createdAt:n.createdAt}}if(i.eventType===`run_created`&&`eventData`in i){let n=i.eventData;if(se(Object.entries(n.attributes??{}).map(([e,t])=>({key:e,value:t})),{allowReservedAttributes:n.allowReservedAttributes===!0}),A={runId:x,deploymentId:n.deploymentId,status:`pending`,workflowName:n.workflowName,specVersion:C,executionContext:n.executionContext,input:n.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:n.attributes??{},encryptionPublicKey:n.encryptionPublicKey,createdAt:b,updatedAt:b},!await J(H(e,`runs`,x,t),JSON.stringify(A,W,2)))throw new p(`Workflow run "${x}" already exists`)}else if(i.eventType===`run_started`){if(w){if(w.status===`running`)return{run:w,maxEvents:dr()};A=await Sr(e,x,t,{runId:w.runId,deploymentId:w.deploymentId,workflowName:w.workflowName,specVersion:w.specVersion,executionContext:w.executionContext,input:w.input,createdAt:w.createdAt,expiredAt:w.expiredAt,status:`running`,output:void 0,error:void 0,completedAt:void 0,startedAt:w.startedAt??b,updatedAt:b,attributes:w.attributes,encryptionPublicKey:w.encryptionPublicKey})}}else if(i.eventType===`run_completed`&&`eventData`in i){let n=i.eventData;w&&(A=await Sr(e,x,t,{runId:w.runId,deploymentId:w.deploymentId,workflowName:w.workflowName,specVersion:w.specVersion,executionContext:w.executionContext,input:w.input,createdAt:w.createdAt,expiredAt:w.expiredAt,startedAt:w.startedAt,status:`completed`,output:n.output,error:void 0,completedAt:b,updatedAt:b,attributes:w.attributes,encryptionPublicKey:w.encryptionPublicKey}),await Promise.all([ar(e,x),xr(e,x)]))}else if(i.eventType===`run_failed`&&`eventData`in i){let n=i.eventData;w&&(A=await Sr(e,x,t,{runId:w.runId,deploymentId:w.deploymentId,workflowName:w.workflowName,specVersion:w.specVersion,executionContext:w.executionContext,input:w.input,createdAt:w.createdAt,expiredAt:w.expiredAt,startedAt:w.startedAt,status:`failed`,output:void 0,error:n.error,errorCode:n.errorCode,completedAt:b,updatedAt:b,attributes:w.attributes,encryptionPublicKey:w.encryptionPublicKey}),await Promise.all([ar(e,x),xr(e,x)]))}else if(i.eventType===`run_cancelled`)w&&(A=await Sr(e,x,t,{runId:w.runId,deploymentId:w.deploymentId,workflowName:w.workflowName,specVersion:w.specVersion,executionContext:w.executionContext,input:w.input,createdAt:w.createdAt,expiredAt:w.expiredAt,startedAt:w.startedAt,status:`cancelled`,output:void 0,error:void 0,completedAt:b,updatedAt:b,attributes:w.attributes,encryptionPublicKey:w.encryptionPublicKey}),await Promise.all([ar(e,x),xr(e,x)]));else if(i.eventType===`attr_set`&&w)A=await lr(x,async()=>{let n=await K(H(e,`runs`,x,t),D);if(!n)throw new c(x);if(se(i.eventData.changes,{existingKeys:Object.keys(n.attributes),allowReservedAttributes:i.eventData.allowReservedAttributes===!0}),i.correlationId&&i.eventData.writer.type===`workflow`&&!await J(B(e,`.locks`,`attributes`,t?`${x}-${i.correlationId}.created.${t}`:`${x}-${i.correlationId}.created`),``))throw new p(`Attribute event "${i.correlationId}" already exists`);let r={...n,attributes:y(n.attributes,i.eventData.changes),updatedAt:b};return await G(H(e,`runs`,x,t),r,{overwrite:!0}),r});else if(i.eventType===`step_created`&&`eventData`in i){if(!await J(B(e,`.locks`,`steps`,t?`${x}-${i.correlationId}.created.${t}`:`${x}-${i.correlationId}.created`),``))throw new p(`Step "${i.correlationId}" already created`);let n=i.eventData;M={runId:x,stepId:i.correlationId,stepName:n.stepName,status:`pending`,input:n.input,output:void 0,error:void 0,attempt:0,startedAt:void 0,completedAt:void 0,createdAt:b,updatedAt:b,specVersion:C},await G(H(e,`steps`,`${x}-${i.correlationId}`,t),M)}else if(i.eventType===`step_started`){if(!O&&E){let n=i.eventData;if(await J(B(e,`.locks`,`steps`,t?`${x}-${i.correlationId}.created.${t}`:`${x}-${i.correlationId}.created`),``)){let r={runId:x,stepId:i.correlationId,stepName:n.stepName,status:`pending`,input:n.input,output:void 0,error:void 0,attempt:0,startedAt:void 0,completedAt:void 0,createdAt:b,updatedAt:b,specVersion:C};await G(H(e,`steps`,`${x}-${i.correlationId}`,t),r);let a=`evnt_${En()}`,o={eventType:`step_created`,runId:x,eventId:a,createdAt:b,specVersion:C,correlationId:i.correlationId,eventData:{stepName:n.stepName,input:n.input}};await G(H(e,`events`,`${x}-${a}`,t),o),O=r,fe=!0}else throw new p(`Step "${i.correlationId}" already created`)}if(O){if(O.retryAfter&&O.retryAfter.getTime()>Date.now())throw new l(`Cannot start step "${i.correlationId}": retryAfter timestamp has not been reached yet`,{retryAfter:Math.ceil((O.retryAfter.getTime()-Date.now())/1e3)});let n=`${x}-${i.correlationId}`,r=await U(e,`steps`,n,_,t);if(r&&g(r.status))throw new p(`Cannot modify step in terminal state "${r.status}"`);M={...O,status:`running`,startedAt:O.startedAt??b,attempt:O.attempt+1,retryAfter:void 0,updatedAt:b},await G(H(e,`steps`,n,t),M,{overwrite:!0})}}else if(i.eventType===`step_completed`&&`eventData`in i){let n=i.eventData;if(O){let r=`${x}-${i.correlationId}`;if(!await J(B(e,`.locks`,`steps`,t?`${r}.terminal.${t}`:`${r}.terminal`),``))throw new p(`Cannot modify step in terminal state`);M={...O,status:`completed`,output:n.result,completedAt:b,updatedAt:b},await G(H(e,`steps`,r,t),M,{overwrite:!0})}}else if(i.eventType===`step_failed`&&`eventData`in i){let n=i.eventData;if(O){let r=`${x}-${i.correlationId}`;if(!await J(B(e,`.locks`,`steps`,t?`${r}.terminal.${t}`:`${r}.terminal`),``))throw new p(`Cannot modify step in terminal state`);M={...O,status:`failed`,error:n.error,completedAt:b,updatedAt:b},await G(H(e,`steps`,r,t),M,{overwrite:!0})}}else if(i.eventType===`step_retrying`&&`eventData`in i){let n=i.eventData;if(O){let r=`${x}-${i.correlationId}`;M={...O,status:`pending`,error:n.error,retryAfter:n.retryAfter,updatedAt:b},await G(H(e,`steps`,r,t),M,{overwrite:!0})}}else if(i.eventType===`hook_created`&&`eventData`in i){let n=i.eventData,r=Cn(e,n.token),s=JSON.stringify({token:n.token,hookId:i.correlationId,runId:x,eventId:o}),c=!1,l=null,u=0,d=0;for(let a=0;a<10&&(await mr(r)||await nr(e,n.token,t),c=await J(r,s),!c);a++){if(l=await mr(r),!l){d++,d>=3&&await q(r);continue}if(l.runId===x&&l.hookId===i.correlationId||!await hr(e,l,t))break;u++,u<3?await new Promise(e=>setTimeout(e,10)):(await q(r),l.hookId&&(await q(H(e,`hooks`,l.hookId,t)),await q(Tn(e,n.token,l.runId,l.hookId)))),l=null}let f=!1;if(!c)if(l?.runId===x&&l.hookId===i.correlationId){let r;if(l.eventId)r=l.eventId;else{let a=await _r(e,x,i.correlationId);if(a!==null)throw await vr(e,x,i.correlationId,a,t),new p(`Hook "${i.correlationId}" already created`);let s=await yr(e,n.token,x,i.correlationId,o);if(s===null)throw new p(`Hook "${i.correlationId}" already created`);r=s}o=r;let a=oe(o.replace(/^evnt_/,``))??b;k={...i,runId:x,eventId:o,createdAt:a,specVersion:C},f=!0}else{let e={eventType:`hook_conflict`,correlationId:i.correlationId,eventData:{token:n.token,...l?{conflictingRunId:l.runId}:{}},runId:x,eventId:o,createdAt:b,specVersion:C};return await ae(e),{event:S(e,a?.resolveData??`all`),run:A,step:M,hook:void 0}}N={runId:x,hookId:i.correlationId,token:n.token,metadata:n.metadata,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:k.createdAt,specVersion:C,isWebhook:n.isWebhook??!1,isSystem:n.isSystem??!1},pe=f?{overwrite:!0}:void 0,await Fn(e,n.token,x,i.correlationId,o,t)}else if(i.eventType===`hook_disposed`){if(!await J(hn(e,i.correlationId,t),``))throw new p(`Hook "${i.correlationId}" already disposed`);let n=H(e,`hooks`,i.correlationId,t),r=await U(e,`hooks`,i.correlationId,j,t);r&&(await wn(e,r.token,r.runId,r.hookId),await q(Tn(e,r.token,r.runId,r.hookId))),await q(n),await Rn(e,x,i.correlationId,t)}else if(i.eventType===`wait_created`&&`eventData`in i){let n=`${x}-${i.correlationId}`;if(!await J(B(e,`.locks`,`waits`,t?`${n}.created.${t}`:`${n}.created`),``))throw new p(`Wait "${i.correlationId}" already exists`);let r=i.eventData;P={waitId:n,runId:x,status:`waiting`,resumeAt:r.resumeAt,completedAt:void 0,createdAt:b,updatedAt:b,specVersion:C},await G(H(e,`waits`,n,t),P)}else if(i.eventType===`wait_completed`){let n=`${x}-${i.correlationId}`,r=B(e,`.locks`,`waits`,t?`${n}.completed.${t}`:`${n}.completed`);if(!await J(r,``))throw new p(`Wait "${i.correlationId}" already completed`);let a=await U(e,`waits`,n,ne,t);if(!a)throw await I.unlink(r).catch(()=>{}),new s(`Wait "${i.correlationId}" not found`);P={...a,status:`completed`,completedAt:b,updatedAt:b},await G(H(e,`waits`,n,t),P,{overwrite:!0})}if(i.eventType===`hook_received`&&i.correlationId&&await gn(e,i.correlationId,t))throw new f(i.correlationId);let me=H(e,`events`,`${x}-${o}`,t),F=JSON.stringify(k,W,2),he;if(i.eventType===`hook_received`){let n=await vn(e,x,t),r=n?null:await U(e,`runs`,x,D,t);if(n||r&&m(r.status))throw new u(`Workflow run "${x}" is already in a terminal state`);let i=bn(e,x,o,t);if(!await J(i,F))throw new p(`Event "${o}" already exists for run "${x}"`);try{if(await vn(e,x,t))throw new u(`Workflow run "${x}" is already in a terminal state`);let n=await vt(i,me);if(n===`missing`)throw new u(`Workflow run "${x}" is already in a terminal state`);he=n===`linked`}finally{await q(i).catch(()=>{})}}else he=await J(me,F);if(!he)throw i.eventType===`hook_created`&&i.correlationId&&await vr(e,x,i.correlationId,o,t),new p(`Event "${o}" already exists for run "${x}"`);ie(k,me,F),N&&i.eventType===`hook_created`&&(await Ln(e,N.runId,N.hookId,t),await G(H(e,`hooks`,N.hookId,t),N,pe));let ge=a?.resolveData??`all`,_e=S(k,ge),L,ve,ye;if(i.eventType===`run_started`&&A){let t=await X({directory:R.join(e,`events`),schema:T,cachedItems:r,filePrefix:`${x}-`,sortOrder:`asc`,limit:1e3,getCreatedAt:$(`evnt`),getId:e=>e.eventId});L=t.data,ve=t.cursor,ye=t.hasMore}if(h(i.eventType)&&typeof a?.sinceCursor==`string`){let t=await X({directory:R.join(e,`events`),schema:T,filePrefix:`${x}-`,sortOrder:`asc`,cursor:a.sinceCursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});L=ge===`none`?t.data.map(e=>S(e,ge)):t.data,ve=t.cursor,ye=t.hasMore}return{event:_e,run:A,step:M,hook:N,wait:P,events:L,cursor:ve,hasMore:ye,...fe?{stepCreated:!0}:{},...A?{maxEvents:dr()}:{}}}},async get(n,r,i){z(`runId`,n),z(`eventId`,r);let a=await U(e,`events`,`${n}-${r}`,T,t);if(!a)throw Error(`Event ${r} in run ${n} not found`);return S(a,i?.resolveData??`all`)},async list(t){let{runId:n}=t;z(`runId`,n);let i=t.resolveData??`all`,a=await X({directory:R.join(e,`events`),schema:T,cachedItems:r,filePrefix:`${n}-`,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});return i===`none`?{...a,data:a.data.map(e=>S(e,i))}:a},async listByCorrelationId(t){let n=t.correlationId;z(`correlationId`,n);let i=t.resolveData??`all`,a=await X({directory:R.join(e,`events`),schema:T,cachedItems:r,filter:e=>e.correlationId===n,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});return i===`none`?{...a,data:a.data.map(e=>S(e,i))}:a}}}function wr(e,t){return{get:(async(n,r,i)=>{z(`runId`,n),z(`stepId`,r);let a=await U(e,`steps`,`${n}-${r}`,_,t);if(!a)throw Error(`Step ${r} in run ${n} not found`);return Jn(a,i?.resolveData??`all`)}),list:(async t=>{z(`runId`,t.runId);let n=t.resolveData??`all`,r=await X({directory:R.join(e,`steps`),schema:_,filePrefix:`${t.runId}-`,sortOrder:t.pagination?.sortOrder??`desc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`step`),getId:e=>e.stepId});return n===`none`?{...r,data:r.data.map(e=>({...e,input:void 0,output:void 0}))}:r})}}function Tr(e,t){let n=ur(e,t),r=wr(e,t),i=Cr(e,t),a=ir(e,t);return{runs:rn(`world.runs`,n),steps:rn(`world.steps`,r),events:rn(`world.events`,i),hooks:rn(`world.hooks`,a),clearCache:()=>i.clearCache()}}const Er=A(()=>Math.random()),Dr=N({streams:ie(E())});function Or(e){return e===1}function kr(e){let t=Buffer.from([+!!e.eof]);return Buffer.concat([t,e.chunk])}function Ar(e){return Or(e[0])}function jr(e){return{eof:Ar(e),chunk:Buffer.from(e.subarray(1))}}async function Mr(e){try{return await I.readdir(e)}catch(e){if(e.code===`ENOENT`)return[];throw e}}function Nr(e,t,n,r=n,i=()=>!0){for(let a of t){if(!a.endsWith(n))continue;let t=a.slice(0,-n.length);i(t)&&e.set(t,r)}}function Pr(e,t){return z(`streamName`,t),R.join(e,t)}async function Fr(e,t,n){let r=Pr(e,t),i=await Mr(r),a=new Map;return Nr(a,i,`.json`),Nr(a,i,`.bin`,`.bin`,n?e=>!e.endsWith(`.${n}`):void 0),n&&Nr(a,i,`.${n}.bin`),{files:[...a.keys()].sort(),extMap:a,dir:r}}function Ir(e,t){let n=t?`.${t}`:``,r=new Ee,i=new Set;async function a(n,r){z(`runId`,n),z(`streamName`,r);let a=`${n}:${r}`;if(i.has(a))return;let o=H(e,`streams/runs`,n,t),s=(await U(e,`streams/runs`,n,Dr,t))?.streams??[];s.includes(r)||(s.push(r),await G(o,{streams:s},{overwrite:!0})),i.add(a)}function o(e){return typeof e==`string`?Buffer.from(new TextEncoder().encode(e)):e instanceof Buffer?e:Buffer.from(e)}return{streams:{async write(t,i,s){let c=`chnk_${Er()}`;await a(await t,i);let l=o(s),u=kr({chunk:l,eof:!1});await ht(R.join(Pr(R.join(e,`streams`,`chunks`),i),`${c}${n}.bin`),u);let d=Uint8Array.from(l);r.emit(`chunk:${i}`,{streamName:i,chunkData:d,chunkId:c})},async writeMulti(t,i,s){if(s.length===0)return;let c=s.map(()=>`chnk_${Er()}`);await a(await t,i);let l=s.map(e=>o(e)).map(async(t,r)=>{let a=c[r],o=kr({chunk:t,eof:!1});return await ht(R.join(Pr(R.join(e,`streams`,`chunks`),i),`${a}${n}.bin`),o),{chunkId:a,chunkData:Uint8Array.from(t)}});for(let e of l){let{chunkId:t,chunkData:n}=await e;r.emit(`chunk:${i}`,{streamName:i,chunkData:n,chunkId:t})}},async close(t,i){let o=`chnk_${Er()}`;await a(await t,i),await ht(R.join(Pr(R.join(e,`streams`,`chunks`),i),`${o}${n}.bin`),kr({chunk:Buffer.from([]),eof:!0})),r.emit(`close:${i}`,{streamName:i})},async list(n){return z(`runId`,n),(await U(e,`streams/runs`,n,Dr,t))?.streams??[]},async getChunks(n,r,i){let a=i?.limit??100,{files:o,extMap:s,dir:c}=await Fr(R.join(e,`streams`,`chunks`),r,t),l=0;if(i?.cursor)try{l=JSON.parse(Buffer.from(i.cursor,`base64`).toString(`utf-8`)).i}catch{l=0}let u=!1,d=[],f=0;for(let e of o){let t=s.get(e)??`.bin`,n=R.join(c,`${e}${t}`);if(f<l){if(Or(await _t(n))){u=!0;break}f++;continue}if(d.length>=a){Or(await _t(n))?u=!0:f++;break}let r=jr(await gt(n));if(r.eof){u=!0;break}d.push({index:f,data:Uint8Array.from(r.chunk)}),f++}let p=!u&&f>l+d.length,m=l+d.length;return{data:d,cursor:p?Buffer.from(JSON.stringify({i:m})).toString(`base64`):null,hasMore:p,done:u}},async getInfo(n,r){let{files:i,extMap:a,dir:o}=await Fr(R.join(e,`streams`,`chunks`),r,t),s=!1,c=0;for(let e of i){let t=a.get(e)??`.bin`;if(Or(await _t(R.join(o,`${e}${t}`)))){s=!0;break}c++}return{tailIndex:c-1,done:s}},async get(n,i,a=0){let o=R.join(e,`streams`,`chunks`),s=()=>{},c=null,l=!1;return new ReadableStream({async start(e){let n=new Set,u=[],d=!0,f=!1,p=t=>{if(t.chunkData.byteLength===0){n.add(t.chunkId);return}d?(n.add(t.chunkId),u.push({chunkId:t.chunkId,chunkData:Uint8Array.from(t.chunkData)})):n.has(t.chunkId)||(n.add(t.chunkId),e.enqueue(Uint8Array.from(t.chunkData)))},m=()=>{if(d){f=!0;return}l=!0,s();try{e.close()}catch{}};s=()=>{r.off(`chunk:${i}`,p),r.off(`close:${i}`,m),c&&=(clearInterval(c),null)},r.on(`chunk:${i}`,p),r.on(`close:${i}`,m);let{files:h,extMap:g,dir:_}=await Fr(o,i,t),v=h.length;if(typeof a==`number`&&a<0&&h.length>0){let e=h[h.length-1],t=g.get(e)??`.bin`;Or(await _t(R.join(_,`${e}${t}`)))&&v--}let ee=typeof a==`number`&&a<0?Math.max(0,v+a):a,y=!1;for(let t=ee;t<h.length;t++){let r=h[t],i=r;if(n.has(i))continue;let a=g.get(r)??`.bin`,o=jr(await gt(R.join(_,`${r}${a}`)));if(o?.eof===!0){y=!0;break}n.add(i),o.chunk.byteLength&&e.enqueue(Uint8Array.from(o.chunk))}d=!1,u.sort((e,t)=>e.chunkId.localeCompare(t.chunkId));for(let t of u)e.enqueue(Uint8Array.from(t.chunkData));if(y){l=!0,s();try{e.close()}catch{}return}if(f){l=!0,s();try{e.close()}catch{}return}for(let e=0;e<ee&&e<h.length;e++)n.add(h[e]);if(l){s();return}let b=!1;c=setInterval(async()=>{if(!b){b=!0;try{let{files:r,extMap:a}=await Fr(o,i,t);for(let t of r){let r=t;if(n.has(r))continue;n.add(r);let i=a.get(t)??`.bin`,o=jr(await gt(R.join(_,`${t}${i}`)));if(o?.eof===!0){l=!0,s();try{e.close()}catch{}return}if(l)return;o.chunk.byteLength&&e.enqueue(Uint8Array.from(o.chunk))}}catch(e){e instanceof Error&&`code`in e||console.error(`[world-local] Unexpected polling error:`,e)}finally{b=!1}}},100)},cancel(){l=!0,s()}})}}}}function Lr(e){let t=e?Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0)):{},n={...Je.value,...t};Me(n.dataDir);let r=n.tag,i=pn(n),{clearCache:a,...o}=Tr(n.dataDir,r),s=Ye(n);return{specVersion:5,...i,...o,...rn(`world.streams`,{...Ir(n.dataDir,r),...n.streamFlushIntervalMs!==void 0&&{streamFlushIntervalMs:n.streamFlushIntervalMs}}),async start(){if(await Ft(n.dataDir),!s)return;let e=r?e=>st(e,r):ct;await O({...o.runs,list:(t=>o.runs.list({...t,fileIdFilter:e}))},i.queue,`world-local`)},async close(){a(),await i.close()},async clear(){if(a(),r){let e=n.dataDir,t=R.join(e,`hooks`),i=await lt(t,r),{HookSchema:a}=await import(`../../_chunks/workflow/dist-WjtNsOyf.js`).then(e=>e.t);await Promise.all(i.map(async n=>{let r=await K(R.join(t,n),a);r?.token&&(await q(R.join(t,`tokens`,`${mn(r.token)}.json`)),await q(Tn(e,r.token,r.runId,r.hookId)))})),await Promise.all([`runs`,`steps`,`events`,`hooks`,`hooks/by-run`,`waits`,`streams/runs`].map(async t=>{let n=R.join(e,t),i=await lt(n,r);await Promise.all(i.map(e=>q(R.join(n,e))))}));for(let t of[`token-index`,`id-index`]){let n=R.join(e,`hooks`,t),i;try{i=await F.readdir(n,{withFileTypes:!0})}catch{i=[]}await Promise.all(i.filter(e=>e.isDirectory()).map(async e=>{let t=R.join(n,e.name),i=await lt(t,r);await Promise.all(i.map(e=>q(R.join(t,e))))}))}await F.rm(R.join(e,`.locks`),{recursive:!0,force:!0}).catch(()=>{});let o=R.join(e,`streams`,`chunks`),s;try{s=await F.readdir(o,{withFileTypes:!0})}catch{s=[]}await Promise.all(s.filter(e=>e.isDirectory()).map(async e=>{let t=R.join(o,e.name),n=await ut(t,r,`.bin`);await Promise.all(n.map(e=>F.unlink(R.join(t,e)).catch(()=>{})))})),it()}else it(),Hn(),await be(n.dataDir,{recursive:!0,force:!0}),await Ft(n.dataDir)}}}export{Tt as DataDirAccessError,Et as DataDirVersionError,Oe as UnwritableDataDirError,Lr as createWorld,jt as ensureDataDir,Ft as initDataDir,Dt as parseVersion};
|