eve 0.52.4 → 0.52.5
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 +14 -0
- package/dist/src/cli/commands/init-agent-workspace.d.ts +2 -0
- package/dist/src/cli/commands/init-agent-workspace.js +1 -1
- package/dist/src/cli/commands/init-install.d.ts +8 -0
- package/dist/src/cli/commands/init-install.js +1 -0
- package/dist/src/cli/commands/init.d.ts +3 -4
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/run.js +2 -2
- package/dist/src/cli/telemetry/index.d.ts +3 -0
- package/dist/src/cli/telemetry/index.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +3 -2
- package/dist/src/compiled/@workflow/world-local/index.js +1 -1
- package/dist/src/compiler/extension-compatibility.d.ts +2 -2
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/context/dynamic-model-lifecycle.js +1 -1
- package/dist/src/context/keys.d.ts +11 -2
- package/dist/src/context/keys.js +1 -1
- package/dist/src/evals/mock-model.js +1 -1
- package/dist/src/evals/runner/run-evals.d.ts +1 -1
- package/dist/src/evals/runner/run-evals.js +1 -1
- package/dist/src/execution/activity-cohort.d.ts +20 -0
- package/dist/src/execution/activity-cohort.js +1 -0
- package/dist/src/execution/authorization-callback-match.d.ts +1 -0
- package/dist/src/execution/authorization-callback-match.js +1 -1
- package/dist/src/execution/parked-delivery-wait.js +1 -1
- package/dist/src/execution/session-activity-projection.d.ts +2 -0
- package/dist/src/execution/session-activity-projection.js +1 -1
- package/dist/src/execution/skills/instructions.js +1 -1
- package/dist/src/execution/tools/sleep-workflow.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/harness/approval-delivery-coordinator.js +1 -1
- package/dist/src/harness/authorization.d.ts +1 -0
- package/dist/src/harness/authorization.js +1 -1
- package/dist/src/harness/compaction.js +1 -1
- package/dist/src/harness/current-messages.d.ts +8 -2
- package/dist/src/harness/current-messages.js +1 -1
- package/dist/src/harness/hitl/approval-input-requests.js +1 -1
- package/dist/src/harness/input-requests.js +1 -1
- package/dist/src/harness/pending-input-batches.d.ts +4 -0
- package/dist/src/harness/pending-input-batches.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/turn-client-context.d.ts +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/mock-model-identity.d.ts +2 -0
- package/dist/src/internal/mock-model-identity.js +1 -0
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/public/tools/index.d.ts +1 -0
- package/dist/src/public/tools/index.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/tasks/delivery-context.d.ts +2 -2
- package/dist/src/tasks/delivery-context.js +2 -18
- package/dist/src/tasks/delivery-policy.js +1 -1
- package/dist/src/tools/durable-callbacks.d.ts +18 -1
- package/dist/src/tools/durable-callbacks.js +1 -1
- package/docs/channels/overview.mdx +2 -0
- package/docs/channels/slack.mdx +2 -0
- package/docs/evals/running.mdx +3 -1
- package/docs/guides/dynamic-capabilities.md +36 -1
- package/docs/guides/instrumentation.md +3 -2
- package/docs/instructions.mdx +1 -1
- package/docs/reference/cli.md +1 -1
- package/docs/reference/telemetry.md +1 -1
- package/docs/reference/typescript-api.md +36 -35
- package/docs/tools/overview.mdx +4 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# eve
|
|
2
2
|
|
|
3
|
+
## 0.52.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 1a9556c: Preserve framework announcements in conversation history so changing task and skill snapshots append to earlier model requests instead of replacing their context. Unchanged announcements are skipped until history is cleared or compacted, and completed compaction is retained if the next model request fails.
|
|
8
|
+
- a24b68c: Export `defineDurableCallback` so provider packages can create replayable dynamic tools outside eve's authored-source transform.
|
|
9
|
+
- d630b21: Retry transient Windows file-sharing errors when reading local workflow state while still surfacing persistent access errors and malformed state. Preserve pending tasks that fit the compaction budget and keep explicitly configured `mockModel()` responders during step-scoped dynamic model selection when authored-model mocking is enabled.
|
|
10
|
+
- cf1510f: Redact BYOK credentials and credential-shaped provider options from `/eve/v1/info` responses while preserving non-secret provider settings.
|
|
11
|
+
- 1a9556c: Remove the instruction that forced silence while background tasks were pending. This prevents that instruction from carrying into later user turns and suppressing their answers.
|
|
12
|
+
- 3bbf8e5: Only batch adjacent queued deliveries when their full auth contexts match, preventing one sender's input from running under another sender's auth. Anonymous deliveries stay separate; matching authenticated follow-ups still batch with their attachments and context in order.
|
|
13
|
+
- 71fbdb8: Classify CLI setup and onboarding failures into bounded, privacy-preserving categories, including package-manager startup and pnpm workspace-probe failures. Telemetry continues to exclude error messages and command output.
|
|
14
|
+
- ee02527: Print each eval session's workflow run ID when `eve eval --verbose` runs, including primary and secondary sessions.
|
|
15
|
+
- 51c4719: Keep experimental channel activity grouped with the user request that originated it across background task reporting, human approval and question resumes, and authorization callbacks.
|
|
16
|
+
|
|
3
17
|
## 0.52.4
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AgentReasoningDefinition } from "#shared/agent-definition.js";
|
|
2
|
+
import type { WorkspaceRootMutation } from "#setup/scaffold/workspace-root.js";
|
|
2
3
|
import { validateModelSlug } from "#setup/flows/model-source-change.js";
|
|
3
4
|
export interface InitCommandOptions {
|
|
4
5
|
agents?: readonly string[];
|
|
@@ -10,5 +11,6 @@ export interface InitCliLogger {
|
|
|
10
11
|
error(message: string): void;
|
|
11
12
|
log(message: string): void;
|
|
12
13
|
}
|
|
14
|
+
export declare function formatWorkspaceRootMutationWarning(mutation: WorkspaceRootMutation): string;
|
|
13
15
|
export declare function convertScaffoldToAgentWorkspace(projectRoot: string, names: readonly string[], options: InitCommandOptions): Promise<void>;
|
|
14
16
|
export declare function addAgentsToWorkspace(logger: InitCliLogger, workspaceRoot: string, target: string | undefined, options: InitCommandOptions, validateModel?: typeof validateModelSlug): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{mkdir,readFile,rename}from"node:fs/promises";import{join}from"node:path";import pc from"#compiled/picocolors/index.js";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{createPrompter}from"#setup/prompter.js";import{findEveProjectContext}from"#internal/project-context.js";import{pathExists}from"#setup/path-exists.js";import{agentTemplateFiles}from"#setup/scaffold/create/project.js";import{assertValidPublicAgentName}from"#internal/agent-name.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{writeTextFile}from"#setup/scaffold/files.js";function validateAgentNames(e){if(e.length===0)throw Error(`--agents requires at least one agent name.`);let t=new Set;for(let n of e){if(assertValidPublicAgentName(n,`Agent`),t.has(n))throw Error(`Agent name ${JSON.stringify(n)} is repeated.`);t.add(n)}}async function writeWorkspaceAgent(e,t,n){let r=join(e,`agents`,t);if(await pathExists(r))throw Error(`Cannot create agent ${JSON.stringify(t)} because ${r} already exists.`);let i=agentTemplateFiles(n.model??DEFAULT_AGENT_MODEL_ID,n.reasoning);await Promise.all(Object.entries(i).map(([e,t])=>writeTextFile(join(r,e),t)))}async function convertScaffoldToAgentWorkspace(e,t,n){if(validateAgentNames(t),n.channelWebNextjs===!0)throw Error(`--channel-web-nextjs cannot be combined with --agents.`);let[r,...i]=t;await mkdir(join(e,`agents`,r),{recursive:!0}),await rename(join(e,`agent`),join(e,`agents`,r,`agent`));let a=join(e,`tsconfig.json`),o=await readFile(a,`utf8`);await writeTextFile(a,o.replace(`"agent/**/*.ts"`,`"agents/**/*.ts"`),{force:!0});for(let t of i)await writeWorkspaceAgent(e,t,n)}async function addAgentsToWorkspace(e,t,n,r,i=validateModelSlug){if((await findEveProjectContext(t))?.kind!==`workspace`)return!1;if(r.channelWebNextjs===!0)throw Error(`--channel-web-nextjs is not supported when adding a workspace agent.`);let a=r.agents;if(n!==void 0&&a!==void 0)throw Error(`Pass either an agent name or --agents, not both.`);if(a===void 0&&n!==void 0&&(a=[n]),a===void 0){if(!(process.stdin.isTTY&&process.stdout.isTTY))throw Error(`This directory is an eve agent workspace. Pass an agent name, for example: eve init billing.`);a=[await createPrompter().text({message:`Name the new agent`})]}if(validateAgentNames(a),r.model!==void 0){let e=await i(t,r.model);if(e!==null)throw Error(e)}for(let e of a)await writeWorkspaceAgent(t,e,r);return e.log(`${pc.green(`✓`)} Added ${a.length===1?`agent`:`agents`} ${a.map(e=>pc.bold(e)).join(`, `)}`),e.log(pc.dim(`$ eve dev --agent <name>`)),!0}export{addAgentsToWorkspace,convertScaffoldToAgentWorkspace};
|
|
1
|
+
import{mkdir,readFile,rename}from"node:fs/promises";import{join}from"node:path";import pc from"#compiled/picocolors/index.js";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{createPrompter}from"#setup/prompter.js";import{findEveProjectContext}from"#internal/project-context.js";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.js";import{pathExists}from"#setup/path-exists.js";import{agentTemplateFiles}from"#setup/scaffold/create/project.js";import{assertValidPublicAgentName}from"#internal/agent-name.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{writeTextFile}from"#setup/scaffold/files.js";function formatWorkspaceRootMutationWarning(e){let t=e.kind===`package-json`?`package.json`:`configuration`,n=e.nodeEngineOverride===void 0?``:` (${formatNodeEngineOverrideWarning(e.nodeEngineOverride)})`;return`Updated workspace root ${t} at ${e.path}${n}`}function validateAgentNames(e){if(e.length===0)throw Error(`--agents requires at least one agent name.`);let t=new Set;for(let n of e){if(assertValidPublicAgentName(n,`Agent`),t.has(n))throw Error(`Agent name ${JSON.stringify(n)} is repeated.`);t.add(n)}}async function writeWorkspaceAgent(e,t,n){let r=join(e,`agents`,t);if(await pathExists(r))throw Error(`Cannot create agent ${JSON.stringify(t)} because ${r} already exists.`);let i=agentTemplateFiles(n.model??DEFAULT_AGENT_MODEL_ID,n.reasoning);await Promise.all(Object.entries(i).map(([e,t])=>writeTextFile(join(r,e),t)))}async function convertScaffoldToAgentWorkspace(e,t,n){if(validateAgentNames(t),n.channelWebNextjs===!0)throw Error(`--channel-web-nextjs cannot be combined with --agents.`);let[r,...i]=t;await mkdir(join(e,`agents`,r),{recursive:!0}),await rename(join(e,`agent`),join(e,`agents`,r,`agent`));let a=join(e,`tsconfig.json`),o=await readFile(a,`utf8`);await writeTextFile(a,o.replace(`"agent/**/*.ts"`,`"agents/**/*.ts"`),{force:!0});for(let t of i)await writeWorkspaceAgent(e,t,n)}async function addAgentsToWorkspace(e,t,n,r,i=validateModelSlug){if((await findEveProjectContext(t))?.kind!==`workspace`)return!1;if(r.channelWebNextjs===!0)throw Error(`--channel-web-nextjs is not supported when adding a workspace agent.`);let a=r.agents;if(n!==void 0&&a!==void 0)throw Error(`Pass either an agent name or --agents, not both.`);if(a===void 0&&n!==void 0&&(a=[n]),a===void 0){if(!(process.stdin.isTTY&&process.stdout.isTTY))throw Error(`This directory is an eve agent workspace. Pass an agent name, for example: eve init billing.`);a=[await createPrompter().text({message:`Name the new agent`})]}if(validateAgentNames(a),r.model!==void 0){let e=await i(t,r.model);if(e!==null)throw Error(e)}for(let e of a)await writeWorkspaceAgent(t,e,r);return e.log(`${pc.green(`✓`)} Added ${a.length===1?`agent`:`agents`} ${a.map(e=>pc.bold(e)).join(`, `)}`),e.log(pc.dim(`$ eve dev --agent <name>`)),!0}export{addAgentsToWorkspace,convertScaffoldToAgentWorkspace,formatWorkspaceRootMutationWarning};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EveCliSetupFailureCode } from "#cli/telemetry/index.js";
|
|
2
|
+
import type { PackageManagerKind } from "#setup/package-manager.js";
|
|
3
|
+
import { type PackageManagerInstallResult } from "#setup/primitives/index.js";
|
|
4
|
+
import type { ProcessOutputLine } from "#setup/primitives/process-output.js";
|
|
5
|
+
export declare function installProgressDetail(packageManager: PackageManagerKind, line: ProcessOutputLine): string | undefined;
|
|
6
|
+
export declare const NPM_NOISE_LINE: RegExp;
|
|
7
|
+
export declare const INSTALL_OUTPUT_FALLBACK_LINES = 20;
|
|
8
|
+
export declare function packageManagerInstallFailureCode(result: PackageManagerInstallResult): EveCliSetupFailureCode;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"#setup/primitives/index.js";function installProgressDetail(e,t){let n=t.text.trim();if(n===``||e!==`npm`)return n||void 0;let r=/^npm silly fetch manifest (.+)$/u.exec(n);if(r!==null)return`Resolving ${r[1]}`;let i=/^npm http fetch \S+ \S+ attempt (\d+) failed with (\S+)$/u.exec(n);if(i!==null)return`npm registry · attempt ${i[1]} failed: ${i[2]}`;if(t.stream===`stdout`||/^npm (?:error|warn)\b/u.test(n))return n}const NPM_NOISE_LINE=/^\s*npm (?:silly|verbose|http|timing)\b/u,INSTALL_OUTPUT_FALLBACK_LINES=20;function packageManagerInstallFailureCode(e){return e.kind===`workspace-probe-failed`?`workspace_probe_failed`:e.kind===`workspace-probe-unrecognized`?`workspace_probe_unrecognized`:e.result.termination.kind===`spawn-error`?e.result.termination.code===`ENOENT`?`package_manager_not_found`:`package_manager_start_failed`:`dependency_installation`}export{INSTALL_OUTPUT_FALLBACK_LINES,NPM_NOISE_LINE,installProgressDetail,packageManagerInstallFailureCode};
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import { isCodingAgentLaunch } from "#cli/agent-detection.js";
|
|
2
|
-
import type { EveCliSetupStep, EveCliSetupTerminalResult } from "#cli/telemetry/index.js";
|
|
2
|
+
import type { EveCliSetupFailureCode, EveCliSetupStep, EveCliSetupTerminalResult } from "#cli/telemetry/index.js";
|
|
3
3
|
import { detectInvokingPackageManager, detectPackageManager } from "#setup/package-manager.js";
|
|
4
4
|
import { runPackageManagerInstall, spawnPackageManager } from "#setup/primitives/index.js";
|
|
5
5
|
import { addAgentToProject } from "#setup/scaffold/create/add-to-project.js";
|
|
6
6
|
import { ensureChannel, scaffoldBaseProject } from "#setup/scaffold/index.js";
|
|
7
7
|
import { validateModelSlug } from "#setup/flows/model-source-change.js";
|
|
8
8
|
import { type InitCliLogger, type InitCommandOptions } from "./init-agent-workspace.js";
|
|
9
|
-
import { confirmInitInNonEmptyDirectory } from "./init-confirm.js";
|
|
10
9
|
import { tryInitializeGit } from "./init-git.js";
|
|
11
10
|
import { selectInitHandoff, spawnCodingAgentRepl } from "./init-repl.js";
|
|
12
11
|
export type { InitCliLogger, InitCommandOptions } from "./init-agent-workspace.js";
|
|
13
12
|
export interface InitCommandDependencies {
|
|
14
13
|
addAgentToProject: typeof addAgentToProject;
|
|
15
|
-
confirmInitInNonEmptyDirectory: typeof confirmInitInNonEmptyDirectory;
|
|
16
14
|
detectInvokingPackageManager: typeof detectInvokingPackageManager;
|
|
17
15
|
detectPackageManager: typeof detectPackageManager;
|
|
18
16
|
ensureChannel: typeof ensureChannel;
|
|
@@ -27,4 +25,5 @@ export interface InitCommandDependencies {
|
|
|
27
25
|
validateModelSlug: typeof validateModelSlug;
|
|
28
26
|
}
|
|
29
27
|
export declare const EVE_INIT_PACKAGE_SPEC_ENV = "EVE_INIT_PACKAGE_SPEC";
|
|
30
|
-
|
|
28
|
+
type InitTerminalTracker = (step: EveCliSetupStep, result: EveCliSetupTerminalResult, failureCode?: EveCliSetupFailureCode) => void;
|
|
29
|
+
export declare function runInitCommand(logger: InitCliLogger, parentDirectory: string, target: string | undefined, options: InitCommandOptions, dependencies?: InitCommandDependencies, trackStep?: (step: EveCliSetupStep) => void, trackTerminal?: InitTerminalTracker): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{initAgentDevHandoff,initAgentReadySummary,initAgentReplPrompt}from"./agent-instructions.js";import{tryInitializeGit}from"./init-git.js";import{addAgentsToWorkspace,convertScaffoldToAgentWorkspace}from"./init-agent-workspace.js";import{confirmInitInNonEmptyDirectory}from"./init-confirm.js";import{cleanupFreshInitTarget,workspaceFailureNote}from"./init-recovery.js";import{selectInitHandoff,spawnCodingAgentRepl}from"./init-repl.js";import{resolveInitTarget}from"./init-target.js";import{mkdtemp,readdir,rename,rm}from"node:fs/promises";import{createLogger,isLogLevelEnabled}from"#internal/logging.js";import{basename,join,relative,resolve}from"node:path";import pc from"#compiled/picocolors/index.js";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{ensureChannel,scaffoldBaseProject}from"#setup/scaffold/index.js";import{eveDevArguments,packageManagerInstallFailureMessage,packageManagerInstallSucceeded,resultSucceeded,runPackageManagerInstall,spawnPackageManager}from"#setup/primitives/index.js";import{performance}from"node:perf_hooks";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{EVE_WORDMARK}from"#cli/banner.js";import{formatElapsed}from"#cli/format-elapsed.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.js";import{detectInvokingPackageManager,detectPackageManager}from"#setup/package-manager.js";import{pathExists}from"#setup/path-exists.js";import{DEFAULT_EVE_PACKAGE_CONTRACT}from"#setup/scaffold/create/project.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{addAgentToProject}from"#setup/scaffold/create/add-to-project.js";import{WizardCancelledError}from"#setup/step.js";import{isPackageManagerWorkspaceMember}from"#setup/scaffold/workspace-root.js";const defaultDependencies={addAgentToProject,confirmInitInNonEmptyDirectory,detectInvokingPackageManager,detectPackageManager,ensureChannel,isCodingAgentLaunch,now:()=>performance.now(),runPackageManagerInstall,scaffoldBaseProject,selectInitHandoff,spawnCodingAgentRepl,spawnPackageManager,tryInitializeGit,validateModelSlug},EVE_INIT_PACKAGE_SPEC_ENV=`EVE_INIT_PACKAGE_SPEC`,initLog=createLogger(`init`);async function moveDirectoryContents(e,t){for(let n of await readdir(e))await rename(join(e,n),join(t,n))}function uniqueWorkspaceRootMutations(e){let t=new Map;for(let n of e){let e=`${n.kind}:${n.path}`,r=t.get(e);t.set(e,{...n,nodeEngineOverride:n.nodeEngineOverride??r?.nodeEngineOverride})}return[...t.values()]}function formatWorkspaceRootMutationWarning(e){let t=e.kind===`package-json`?`package.json`:`configuration`,n=e.nodeEngineOverride===void 0?``:` (${formatNodeEngineOverrideWarning(e.nodeEngineOverride)})`;return`Updated workspace root ${t} at ${e.path}${n}`}async function addToExistingProject(e,t,n,r){if(t.channelWebNextjs===!0)throw Error("`--channel-web-nextjs` is not supported when adding an agent to an existing project. Run `eve add channel/web` from the project afterwards instead.");if(t.model!==void 0){let r=await n.validateModelSlug(e,t.model);if(r!==null)throw Error(r)}let i=await n.detectPackageManager(e),a=await n.addAgentToProject({projectRoot:e,model:t.model??DEFAULT_AGENT_MODEL_ID,reasoning:t.reasoning,packageManager:i.kind,evePackage:r});return{configurationFilesChanged:a.configurationFilesChanged,dependenciesAdded:a.dependenciesAdded,filesWritten:a.filesWritten,packageManager:i.kind,nodeEngineOverride:a.nodeEngineOverride}}async function resolveScaffoldPackageManager(e,t){let n=await t.detectPackageManager(e);return n.source==="default"?t.detectInvokingPackageManager()??`pnpm`:n.kind}async function scaffoldProject(e,t,n,r,i,a,o,s){let c=resolve(e,`..`),l=!n&&await pathExists(e)&&(await readdir(e)).length===0;if(!n&&await pathExists(e)&&!l)throw Error(`Cannot create project because "${e}" already exists.`);let u=n&&s?void 0:await mkdtemp(join(c,`.eve-init-`)),d=[];try{let c=u??e;if(i.model!==void 0){let e=await a.validateModelSlug(c,i.model);if(e!==null)throw Error(e)}let f={projectName:u===void 0?`.`:n?basename(e):t,model:i.model??DEFAULT_AGENT_MODEL_ID,reasoning:i.reasoning,evePackage:o,targetDirectory:c,overwriteExisting:s,workspaceProbeDirectory:e,packageManager:r,onWorkspaceRootMutation:e=>{d.push(e)}},p=await a.scaffoldBaseProject(f);return i.agents!==void 0&&await convertScaffoldToAgentWorkspace(p,i.agents,i),i.channelWebNextjs===!0&&await a.ensureChannel({projectRoot:p,kind:`web`,packageManager:r,force:s,workspaceProbeDirectory:e,configureVercelServices:!1,onWorkspaceRootMutation:e=>{d.push(e)}}),u!==void 0&&(n||l?await moveDirectoryContents(p,e):await rename(p,e)),{projectPath:e,workspaceRootMutations:uniqueWorkspaceRootMutations(d)}}finally{u!==void 0&&await rm(u,{recursive:!0,force:!0})}}function installProgressDetail(e,t){let n=t.text.trim();if(n===``||e!==`npm`)return n||void 0;let r=/^npm silly fetch manifest (.+)$/u.exec(n);if(r!==null)return`Resolving ${r[1]}`;let i=/^npm http fetch \S+ \S+ attempt (\d+) failed with (\S+)$/u.exec(n);if(i!==null)return`npm registry · attempt ${i[1]} failed: ${i[2]}`;if(t.stream===`stdout`||/^npm (?:error|warn)\b/u.test(n))return n}const NPM_NOISE_LINE=/^\s*npm (?:silly|verbose|http|timing)\b/u;function reportExistingProjectChanges(e,t){e.log(`Updated existing project:`);for(let n of t.filesWritten)e.log(` Created ${relative(t.projectPath,n).replaceAll(`\\`,`/`)}`);t.dependenciesAdded.length>0&&e.log(` Added dependencies: ${t.dependenciesAdded.join(`, `)}`);for(let n of t.configurationFilesChanged)e.log(` Updated ${n}`);t.nodeEngineOverride!==void 0&&e.log(pc.yellow(` ⚠ ${formatNodeEngineOverrideWarning(t.nodeEngineOverride)}`))}async function runInitSteps(e){let{dependencies:t,logger:n,options:r,parentDirectory:i,target:a,trackStep:o}=e,s=isLogLevelEnabled(`debug`),c=await t.isCodingAgentLaunch(),l=await resolveInitTarget({parentDirectory:i,target:a}),u=resolveInitEvePackageOverride(),d=startCliLiveRow(n);d.update(`Preparing project`);try{let e=l.kind===`fresh`?`creating agent`:`adding agent`;o?.(`scaffold`),d.update(l.kind===`fresh`?`Creating agent`:`Adding agent`),initLog.debug(e);let i=t.now(),a;if(l.kind===`fresh`){let e=await resolveScaffoldPackageManager(l.projectPath,t),n=isPackageManagerWorkspaceMember(e,l.projectPath),i;try{i=await scaffoldProject(l.projectPath,l.projectName,l.createInPlace,e,r,t,u,l.overwriteExisting)}catch(e){if(l.failurePolicy===`clear`){let t=await cleanupFreshInitTarget(l.projectPath,l.failurePolicy,l.preservedEntries),r=e instanceof Error?e.message:String(e),i=t?`eve restored "${l.projectPath}" to its original state.`:`eve could not completely clean "${l.projectPath}".`;throw Error(`${r}\n\n${i}${workspaceFailureNote(n)}`)}if(l.failurePolicy===`remove`&&n){let t=e instanceof Error?e.message:String(e);throw Error(`${t}${workspaceFailureNote(!0)}`)}throw e}a={failurePolicy:l.failurePolicy,kind:`created`,packageManager:e,preservedTargetEntries:l.preservedEntries,projectPath:i.projectPath,retryCommand:`eve init ${l.projectPath}`,workspaceMember:n,workspaceRootMutations:i.workspaceRootMutations}}else{let e=await addToExistingProject(l.projectPath,r,t,u);a=e.nodeEngineOverride===void 0?{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,packageManager:e.packageManager,projectPath:l.projectPath}:{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,nodeEngineOverride:e.nodeEngineOverride,packageManager:e.packageManager,projectPath:l.projectPath}}let f=t.now()-i;initLog.debug(`${e} done`,{ms:f}),a.kind===`added`&&(d.stop(),reportExistingProjectChanges(n,a),d=startCliLiveRow(n)),o?.(`install_dependencies`),d.update(`Installing dependencies`,`${a.packageManager} install`),initLog.debug(`installing dependencies with ${a.packageManager}`);let p=t.now(),m=[],h=[],g=await t.runPackageManagerInstall(a.packageManager,a.projectPath,{progressDetails:process.stdout.isTTY===!0&&!s,onOutput:e=>{e.text.trim()!==``&&(h.push(e.text),h.length>20&&h.shift(),NPM_NOISE_LINE.test(e.text)||m.push(e.text)),s&&initLog.debug(e.text);let t=installProgressDetail(a.packageManager,e);t!==void 0&&d.update(`Installing dependencies`,t)}}),_=t.now()-p;if(!packageManagerInstallSucceeded(g)){initLog.debug(`dependency installation failed`,{ms:_}),d.stop();let e=m.length>0?m:h;for(let t of e)n.error(t);if(e.length===0){let e=packageManagerInstallFailureMessage(g);e!==void 0&&n.error(e)}if(a.failurePolicy!==`preserve`){if(await cleanupFreshInitTarget(a.projectPath,a.failurePolicy,a.preservedTargetEntries)){let e=a.failurePolicy===`remove`?`eve removed the incomplete project at "${a.projectPath}".`:`eve restored "${a.projectPath}" to its original state.`,t=a.workspaceMember||a.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies.\n\n${e}\n\nResolve the package-manager error above, then retry:\n ${a.retryCommand}${workspaceFailureNote(t)}`)}let e=a.workspaceMember||a.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies, and eve could not completely clean "${a.projectPath}".\n\nResolve the package-manager error above, then install dependencies with ${a.packageManager} in that directory. Or clean the target manually before rerunning eve init.${workspaceFailureNote(e)}`)}throw Error(`The eve agent was added, but dependency installation failed.\n\nResolve the package-manager error above, then install dependencies with ${a.packageManager} in "${a.projectPath}".\n\nDo not rerun eve init; the agent is already configured.`)}return initLog.debug(`dependencies installed`,{ms:_}),a.kind===`created`?(o?.(`initialize_git`),d.update(`Initializing Git repository`),initLog.debug(`initializing git repository`),{...a,agentElapsedMs:f,agentLaunched:c,gitResult:await t.tryInitializeGit(a.projectPath),installElapsedMs:_}):{...a,agentElapsedMs:f,agentLaunched:c,installElapsedMs:_}}finally{d.stop()}}async function runInitCommand(e,t,n,r,i=defaultDependencies,a,o){if(a?.(`resolve_target`),await addAgentsToWorkspace(e,t,n,r,i.validateModelSlug)){a?.(`handoff`),o?.(`handoff`,`completed`);return}let s;try{s=await runInitSteps({dependencies:i,logger:e,options:r,parentDirectory:t,target:n,trackStep:a})}catch(e){if(e instanceof WizardCancelledError){o?.(`resolve_target`,`cancelled`);return}throw e}if(a?.(`handoff`),s.kind===`created`){e.log(`${pc.green(`✓`)} Created an ${EVE_WORDMARK} agent in ${pc.bold(s.projectPath)} ${pc.dim(`in ${formatElapsed(s.agentElapsedMs)}`)}`);for(let t of s.workspaceRootMutations)e.log(pc.yellow(`⚠ ${formatWorkspaceRootMutationWarning(t)}`))}else e.log(`${pc.green(`✓`)} Added an ${EVE_WORDMARK} agent to ${pc.bold(s.projectPath)} ${pc.dim(`in ${formatElapsed(s.agentElapsedMs)}`)}`);e.log(`${pc.green(`✓`)} Installed dependencies ${pc.dim(`in ${formatElapsed(s.installElapsedMs)}`)}`),s.kind===`created`&&s.gitResult.kind===`failed`&&(e.error(pc.yellow(`Git initialization failed during ${s.gitResult.stage}: ${s.gitResult.reason}`)),s.gitResult.stage===`commit`&&e.error(pc.yellow(`The eve agent was created successfully. Git repository metadata and staged files were preserved at "${s.projectPath}"; the initial commit is optional.\n\nTo create it later, configure Git identity and run:\n git -C ${JSON.stringify(s.projectPath)} commit -m "Initial commit from eve"`)));let c=eveDevArguments(s.packageManager),l=[s.packageManager,...c].join(` `),u=initAgentDevHandoff({projectPath:s.projectPath,devCommand:l});if(s.agentLaunched){e.log(initAgentReadySummary(r.model,s.projectPath,{workspace:r.agents!==void 0})),e.log(u);return}let d;try{d=await i.selectInitHandoff({agentName:basename(s.projectPath)})}catch(e){if(e instanceof WizardCancelledError)return;throw e}if(d===`exit`)return;if(d!==`eve-dev`){if(e.log(pc.dim(`$ ${d}`)),!await i.spawnCodingAgentRepl({command:d,cwd:s.projectPath,prompt:initAgentReplPrompt({devCommand:l}),onPromptUnseeded:t=>{e.log(pc.yellow(`Could not seed ${d} automatically. Paste this prompt into it:`)),e.log(t)}}))throw Error(`Coding-agent REPL exited unsuccessfully in "${s.projectPath}".`);return}let f=s.kind===`created`?[...c,`--onboard`]:c;if(e.log(pc.dim(`$ eve dev`)),!resultSucceeded(await i.spawnPackageManager(s.packageManager,s.projectPath,f)))throw Error(`Development server exited unsuccessfully in "${s.projectPath}".`)}function resolveInitEvePackageOverride(){let e=process.env[EVE_INIT_PACKAGE_SPEC_ENV]?.trim();if(e!==void 0&&e.length!==0)return{nodeEngine:DEFAULT_EVE_PACKAGE_CONTRACT.nodeEngine,version:e}}export{EVE_INIT_PACKAGE_SPEC_ENV,runInitCommand};
|
|
1
|
+
import{initAgentDevHandoff,initAgentReadySummary,initAgentReplPrompt}from"./agent-instructions.js";import{tryInitializeGit}from"./init-git.js";import{addAgentsToWorkspace,convertScaffoldToAgentWorkspace,formatWorkspaceRootMutationWarning}from"./init-agent-workspace.js";import{NPM_NOISE_LINE,installProgressDetail,packageManagerInstallFailureCode}from"./init-install.js";import{cleanupFreshInitTarget,workspaceFailureNote}from"./init-recovery.js";import{selectInitHandoff,spawnCodingAgentRepl}from"./init-repl.js";import{resolveInitTarget}from"./init-target.js";import{mkdtemp,readdir,rename,rm}from"node:fs/promises";import{createLogger,isLogLevelEnabled}from"#internal/logging.js";import{basename,join,relative,resolve}from"node:path";import pc from"#compiled/picocolors/index.js";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{ensureChannel,scaffoldBaseProject}from"#setup/scaffold/index.js";import{eveDevArguments,packageManagerInstallFailureMessage,packageManagerInstallSucceeded,resultSucceeded,runPackageManagerInstall,spawnPackageManager}from"#setup/primitives/index.js";import{performance}from"node:perf_hooks";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{EVE_WORDMARK}from"#cli/banner.js";import{formatElapsed}from"#cli/format-elapsed.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{formatNodeEngineOverrideWarning}from"#setup/node-engine.js";import{detectInvokingPackageManager,detectPackageManager}from"#setup/package-manager.js";import{pathExists}from"#setup/path-exists.js";import{DEFAULT_EVE_PACKAGE_CONTRACT}from"#setup/scaffold/create/project.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{addAgentToProject}from"#setup/scaffold/create/add-to-project.js";import{WizardCancelledError}from"#setup/step.js";import{isPackageManagerWorkspaceMember}from"#setup/scaffold/workspace-root.js";const defaultDependencies={addAgentToProject,detectInvokingPackageManager,detectPackageManager,ensureChannel,isCodingAgentLaunch,now:()=>performance.now(),runPackageManagerInstall,scaffoldBaseProject,selectInitHandoff,spawnCodingAgentRepl,spawnPackageManager,tryInitializeGit,validateModelSlug},EVE_INIT_PACKAGE_SPEC_ENV=`EVE_INIT_PACKAGE_SPEC`,initLog=createLogger(`init`);async function moveDirectoryContents(e,t){for(let n of await readdir(e))await rename(join(e,n),join(t,n))}function uniqueWorkspaceRootMutations(e){let t=new Map;for(let n of e){let e=`${n.kind}:${n.path}`,r=t.get(e);t.set(e,{...n,nodeEngineOverride:n.nodeEngineOverride??r?.nodeEngineOverride})}return[...t.values()]}async function addToExistingProject(e,t,n,r){if(t.channelWebNextjs===!0)throw Error("`--channel-web-nextjs` is not supported when adding an agent to an existing project. Run `eve add channel/web` from the project afterwards instead.");if(t.model!==void 0){let r=await n.validateModelSlug(e,t.model);if(r!==null)throw Error(r)}let i=await n.detectPackageManager(e),a=await n.addAgentToProject({projectRoot:e,model:t.model??DEFAULT_AGENT_MODEL_ID,reasoning:t.reasoning,packageManager:i.kind,evePackage:r});return{configurationFilesChanged:a.configurationFilesChanged,dependenciesAdded:a.dependenciesAdded,filesWritten:a.filesWritten,packageManager:i.kind,nodeEngineOverride:a.nodeEngineOverride}}async function resolveScaffoldPackageManager(e,t){let n=await t.detectPackageManager(e);return n.source==="default"?t.detectInvokingPackageManager()??`pnpm`:n.kind}async function scaffoldProject(e,t,n,r,i,a,o,s){let c=resolve(e,`..`),l=!n&&await pathExists(e)&&(await readdir(e)).length===0;if(!n&&await pathExists(e)&&!l)throw Error(`Cannot create project because "${e}" already exists.`);let u=n&&s?void 0:await mkdtemp(join(c,`.eve-init-`)),d=[];try{let c=u??e;if(i.model!==void 0){let e=await a.validateModelSlug(c,i.model);if(e!==null)throw Error(e)}let f={projectName:u===void 0?`.`:n?basename(e):t,model:i.model??DEFAULT_AGENT_MODEL_ID,reasoning:i.reasoning,evePackage:o,targetDirectory:c,overwriteExisting:s,workspaceProbeDirectory:e,packageManager:r,onWorkspaceRootMutation:e=>{d.push(e)}},p=await a.scaffoldBaseProject(f);return i.agents!==void 0&&await convertScaffoldToAgentWorkspace(p,i.agents,i),i.channelWebNextjs===!0&&await a.ensureChannel({projectRoot:p,kind:`web`,packageManager:r,force:s,workspaceProbeDirectory:e,configureVercelServices:!1,onWorkspaceRootMutation:e=>{d.push(e)}}),u!==void 0&&(n||l?await moveDirectoryContents(p,e):await rename(p,e)),{projectPath:e,workspaceRootMutations:uniqueWorkspaceRootMutations(d)}}finally{u!==void 0&&await rm(u,{recursive:!0,force:!0})}}function reportExistingProjectChanges(e,t){e.log(`Updated existing project:`);for(let n of t.filesWritten)e.log(` Created ${relative(t.projectPath,n).replaceAll(`\\`,`/`)}`);t.dependenciesAdded.length>0&&e.log(` Added dependencies: ${t.dependenciesAdded.join(`, `)}`);for(let n of t.configurationFilesChanged)e.log(` Updated ${n}`);t.nodeEngineOverride!==void 0&&e.log(pc.yellow(` ⚠ ${formatNodeEngineOverrideWarning(t.nodeEngineOverride)}`))}async function runInitSteps(e){let{dependencies:t,logger:n,options:r,parentDirectory:i,target:a,trackStep:o,trackTerminal:s}=e,c=isLogLevelEnabled(`debug`),l=await t.isCodingAgentLaunch(),u=await resolveInitTarget({parentDirectory:i,target:a}),d=resolveInitEvePackageOverride(),f=startCliLiveRow(n),p=`scaffold`,m;f.update(`Preparing project`);try{let e=u.kind===`fresh`?`creating agent`:`adding agent`;o?.(p),f.update(u.kind===`fresh`?`Creating agent`:`Adding agent`),initLog.debug(e);let i=t.now(),a;if(u.kind===`fresh`){let e=await resolveScaffoldPackageManager(u.projectPath,t),n=isPackageManagerWorkspaceMember(e,u.projectPath),i;try{i=await scaffoldProject(u.projectPath,u.projectName,u.createInPlace,e,r,t,d,u.overwriteExisting)}catch(e){if(u.failurePolicy===`clear`){let t=await cleanupFreshInitTarget(u.projectPath,u.failurePolicy,u.preservedEntries),r=e instanceof Error?e.message:String(e),i=t?`eve restored "${u.projectPath}" to its original state.`:`eve could not completely clean "${u.projectPath}".`;throw Error(`${r}\n\n${i}${workspaceFailureNote(n)}`)}if(u.failurePolicy===`remove`&&n){let t=e instanceof Error?e.message:String(e);throw Error(`${t}${workspaceFailureNote(!0)}`)}throw e}a={failurePolicy:u.failurePolicy,kind:`created`,packageManager:e,preservedTargetEntries:u.preservedEntries,projectPath:i.projectPath,retryCommand:`eve init ${u.projectPath}`,workspaceMember:n,workspaceRootMutations:i.workspaceRootMutations}}else{let e=await addToExistingProject(u.projectPath,r,t,d);a=e.nodeEngineOverride===void 0?{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,packageManager:e.packageManager,projectPath:u.projectPath}:{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,nodeEngineOverride:e.nodeEngineOverride,packageManager:e.packageManager,projectPath:u.projectPath}}let s=t.now()-i;initLog.debug(`${e} done`,{ms:s}),a.kind===`added`&&(f.stop(),reportExistingProjectChanges(n,a),f=startCliLiveRow(n)),p=`install_dependencies`,o?.(p),f.update(`Installing dependencies`,`${a.packageManager} install`),initLog.debug(`installing dependencies with ${a.packageManager}`);let h=t.now(),g=[],_=[],v=await t.runPackageManagerInstall(a.packageManager,a.projectPath,{progressDetails:process.stdout.isTTY===!0&&!c,onOutput:e=>{e.text.trim()!==``&&(_.push(e.text),_.length>20&&_.shift(),NPM_NOISE_LINE.test(e.text)||g.push(e.text)),c&&initLog.debug(e.text);let t=installProgressDetail(a.packageManager,e);t!==void 0&&f.update(`Installing dependencies`,t)}}),y=t.now()-h;if(!packageManagerInstallSucceeded(v)){m=packageManagerInstallFailureCode(v),initLog.debug(`dependency installation failed`,{ms:y}),f.stop();let e=g.length>0?g:_;for(let t of e)n.error(t);if(e.length===0){let e=packageManagerInstallFailureMessage(v);e!==void 0&&n.error(e)}if(a.failurePolicy!==`preserve`){if(await cleanupFreshInitTarget(a.projectPath,a.failurePolicy,a.preservedTargetEntries)){let e=a.failurePolicy===`remove`?`eve removed the incomplete project at "${a.projectPath}".`:`eve restored "${a.projectPath}" to its original state.`,t=a.workspaceMember||a.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies.\n\n${e}\n\nResolve the package-manager error above, then retry:\n ${a.retryCommand}${workspaceFailureNote(t)}`)}let e=a.workspaceMember||a.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies, and eve could not completely clean "${a.projectPath}".\n\nResolve the package-manager error above, then install dependencies with ${a.packageManager} in that directory. Or clean the target manually before rerunning eve init.${workspaceFailureNote(e)}`)}throw Error(`The eve agent was added, but dependency installation failed.\n\nResolve the package-manager error above, then install dependencies with ${a.packageManager} in "${a.projectPath}".\n\nDo not rerun eve init; the agent is already configured.`)}return initLog.debug(`dependencies installed`,{ms:y}),a.kind===`created`?(p=`initialize_git`,o?.(p),f.update(`Initializing Git repository`),initLog.debug(`initializing git repository`),{...a,agentElapsedMs:s,agentLaunched:l,gitResult:await t.tryInitializeGit(a.projectPath),installElapsedMs:y}):{...a,agentElapsedMs:s,agentLaunched:l,installElapsedMs:y}}catch(e){throw s?.(p,`error`,p===`install_dependencies`?m:void 0),e}finally{f.stop()}}async function runInitCommand(e,t,n,r,i=defaultDependencies,a,o){if(a?.(`resolve_target`),await addAgentsToWorkspace(e,t,n,r,i.validateModelSlug)){a?.(`handoff`),o?.(`handoff`,`completed`);return}let s;try{s=await runInitSteps({dependencies:i,logger:e,options:r,parentDirectory:t,target:n,trackStep:a,trackTerminal:o})}catch(e){if(e instanceof WizardCancelledError){o?.(`resolve_target`,`cancelled`);return}throw e}if(a?.(`handoff`),s.kind===`created`){e.log(`${pc.green(`✓`)} Created an ${EVE_WORDMARK} agent in ${pc.bold(s.projectPath)} ${pc.dim(`in ${formatElapsed(s.agentElapsedMs)}`)}`);for(let t of s.workspaceRootMutations)e.log(pc.yellow(`⚠ ${formatWorkspaceRootMutationWarning(t)}`))}else e.log(`${pc.green(`✓`)} Added an ${EVE_WORDMARK} agent to ${pc.bold(s.projectPath)} ${pc.dim(`in ${formatElapsed(s.agentElapsedMs)}`)}`);e.log(`${pc.green(`✓`)} Installed dependencies ${pc.dim(`in ${formatElapsed(s.installElapsedMs)}`)}`),s.kind===`created`&&s.gitResult.kind===`failed`&&(e.error(pc.yellow(`Git initialization failed during ${s.gitResult.stage}: ${s.gitResult.reason}`)),s.gitResult.stage===`commit`&&e.error(pc.yellow(`The eve agent was created successfully. Git repository metadata and staged files were preserved at "${s.projectPath}"; the initial commit is optional.\n\nTo create it later, configure Git identity and run:\n git -C ${JSON.stringify(s.projectPath)} commit -m "Initial commit from eve"`)));let c=eveDevArguments(s.packageManager),l=[s.packageManager,...c].join(` `),u=initAgentDevHandoff({projectPath:s.projectPath,devCommand:l});if(s.agentLaunched){e.log(initAgentReadySummary(r.model,s.projectPath,{workspace:r.agents!==void 0})),e.log(u);return}let d;try{d=await i.selectInitHandoff({agentName:basename(s.projectPath)})}catch(e){if(e instanceof WizardCancelledError)return;throw e}if(d===`exit`)return;if(d!==`eve-dev`){if(e.log(pc.dim(`$ ${d}`)),!await i.spawnCodingAgentRepl({command:d,cwd:s.projectPath,prompt:initAgentReplPrompt({devCommand:l}),onPromptUnseeded:t=>{e.log(pc.yellow(`Could not seed ${d} automatically. Paste this prompt into it:`)),e.log(t)}}))throw Error(`Coding-agent REPL exited unsuccessfully in "${s.projectPath}".`);return}let f=s.kind===`created`?[...c,`--onboard`]:c;if(e.log(pc.dim(`$ eve dev`)),!resultSucceeded(await i.spawnPackageManager(s.packageManager,s.projectPath,f)))throw Error(`Development server exited unsuccessfully in "${s.projectPath}".`)}function resolveInitEvePackageOverride(){let e=process.env[EVE_INIT_PACKAGE_SPEC_ENV]?.trim();if(e!==void 0&&e.length!==0)return{nodeEngine:DEFAULT_EVE_PACKAGE_CONTRACT.nodeEngine,version:e}}export{EVE_INIT_PACKAGE_SPEC_ENV,runInitCommand};
|
package/dist/src/cli/run.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Command,CommanderError,InvalidArgumentError,Option}from"#compiled/commander/index.js";import{agentCommand}from"#cli/agent-command.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal}from"#cli/shutdown.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{findEveProjectContext,resolveEveProjectContext}from"#internal/project-context.js";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{eveCliBanner}from"#cli/banner.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{registerBuildCommand}from"#cli/commands/build.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{findCliApplicationRoot,resolveCliApplicationProject}from"#cli/application-root.js";import{registerIntegrationCommands}from"#cli/commands/register-integration-commands.js";import{registerProjectCommands}from"#cli/commands/register-project-commands.js";import{registerRegistryCommands}from"#cli/commands/register-registry-commands.js";import{runInteractiveDevelopmentUi}from"#cli/dev/run-interactive-ui.js";import{resolveDevUiMode,resolveTuiDisplayOptions}from"#cli/dev/ui-options.js";import{registerAcpCommand}from"#cli/acp/command.js";import{waitForServerOrStop,waitForUiOrServer}from"#cli/dev/wait-for-ui.js";import{registerRuntimeInvokeCommand}from"#cli/invoke/command.js";import{parseAgentNamesOption,parseContextSizeOption,parseDisplayMode,parseLogsMode,parsePortOption,parseReasoningOption,parseStatsMode}from"#cli/option-parsers.js";import{createDevBootProgressReporter}from"#cli/dev/boot-progress.js";import{registerEveTelemetryCommands}from"#cli/telemetry/command.js";import{canonicalCommand,createEveCliTelemetry}from"#cli/telemetry/index.js";async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadDevelopmentTuiModule(){return await import(`#cli/dev/tui/tui.js`)}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}const loadIsActiveDevelopmentServerForApp=async()=>(await import(`#internal/nitro/host.js`)).isActiveDevelopmentServerForApp;async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function createCliProgram(e,t,n,r){let i=resolveInstalledPackageInfo().version,a=new Command,o=createCliTheme();a.name(`eve`).description(`Build and run an eve application.`).version(i).showHelpAfterError().exitOverride().hook(`preAction`,(t,n)=>{let{json:r}=n.opts();[`info`,`init`].includes(n.name())&&!r&&e.log(eveCliBanner())}).configureOutput({writeErr:t=>{e.error(t.trimEnd())},writeOut:t=>{e.log(t.trimEnd())}}),agentCommand(a.command(`channels`).description(`Manage user-authored channels in the current project.`).command(`list`),n).description(`List user-authored channels in the current project.`).option(`--json`,`Output as JSON`).action(async t=>{let{runChannelsListCommand:r}=await import(`#cli/commands/channels.js`);await r(e,n.project,t)}),registerEveTelemetryCommands(a,e),registerIntegrationCommands({program:a,logger:e,applicationContext:n});let s=a.command(`extension`).description(`Create and build reusable eve extension packages.`);s.command(`init [target]`).description(`Create a new eve extension package.`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,i)=>{i.yes&&e.error(`warning: --yes has no effect for eve extension init.`);let{runExtensionInitCommand:a}=await import(`#cli/commands/extension-init.js`);await a(e,n.root,t,void 0,e=>{r.trackSetupStep({flow:`extension_init`,step:e})})}),s.command(`build`).description(`Build the current package as an eve extension.`).action(async()=>{let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);await t(n.root);let{runExtensionBuildCommand:r}=await import(`#cli/commands/extension-build.js`);await r(e,n.root)}),registerRegistryCommands({program:a,logger:e,applicationContext:n}),a.command(`init [target]`).description(`Create a new eve agent, or add one to an existing project directory.`).option(`--channel-web-nextjs`,`Add the Web Chat application (Next.js)`).option(`--agents <names>`,`Create an agents/ workspace with comma-separated agent names`,parseAgentNamesOption).option(`--model <model>`,`Set the agent model (provider/model-id)`).option(`--reasoning <effort>`,`Set reasoning (provider-default|none|minimal|low|medium|high|xhigh)`,parseReasoningOption).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,i)=>{i.yes&&e.error(`warning: --yes has no effect for eve init.`);let{runInitCommand:a}=await import(`#cli/commands/init.js`);await a(e,n.root,t,{agents:i.agents,channelWebNextjs:i.channelWebNextjs,model:i.model,reasoning:i.reasoning},void 0,e=>{r.trackSetupStep({flow:`init`,step:e})},(e,t)=>{r.trackSetupTerminal({flow:`init`,step:e,result:t})})}),agentCommand(a.command(`set`),n).description(`Change root agent model settings.`).option(`--model <model>`,`Set the agent model (provider/model-id)`).option(`--reasoning <effort>`,`Set reasoning (provider-default|none|minimal|low|medium|high|xhigh)`,parseReasoningOption).action(async t=>{let{runSetCommand:r}=await import(`#cli/commands/set.js`);await r(e,n.root,t)}),registerProjectCommands({program:a,logger:e,applicationContext:n}),registerBuildCommand({applicationContext:n,buildHost:t.buildHost,logger:e,program:a}),agentCommand(a.command(`start`),n).description(`Start a built eve application.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).action(async r=>{let{loadDevelopmentEnvironmentFiles:i}=await import(`#cli/dev/environment.js`);await i(n.root);let a=await(t.startProductionHost??await loadStartProductionHost())(n.root,{host:r.host,port:r.port});e.log(renderCliTaggedLine(o,{message:`server listening at ${a.url}`,tag:`start`,tone:`success`})),await waitForShutdownSignal({close:()=>a.close(),wait:()=>a.wait()})}),registerRuntimeInvokeCommand({applicationContext:n,logger:e,program:a,runtime:t}),registerAcpCommand({applicationContext:n,eveVersion:i,program:a,resolveVerifiedRemoteDevelopmentClient:t.resolveVerifiedRemoteDevelopmentClient,runAcpServer:t.runAcpServer,startHost:t.startHost}),agentCommand(a.command(`dev`),n,e=>{let t=e.opts();return resolveDevelopmentUrlTarget(t,e.processedArgs[0])===void 0}).description(`Start the eve development server or connect to an existing URL.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 2000)`,parsePortOption).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).option(`--no-ui`,`Start the server without an interactive UI`).option(`--name <name>`,`Title shown in the terminal UI (defaults to the app folder name)`).option(`--input <text>`,`Pre-fill the prompt input`).addOption(new Option(`--onboard`,`Start fresh-agent onboarding`).hideHelp()).option(`--tools <mode>`,`How tool calls render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--reasoning <mode>`,`How reasoning renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--subagents <mode>`,`How subagent sections render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--connection-auth <mode>`,`How connection authorization renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--assistant-response-stats <mode>`,`Assistant header statistic: tokens | tokensPerSecond`,parseStatsMode).option(`--context-size <tokens>`,`Model context window size, shown as a usage percentage`,parseContextSizeOption).option(`--logs <mode>`,`Which server/agent logs to show: all | stderr | sandbox | none`,parseLogsMode).addHelpText(`after`,`
|
|
1
|
+
import{Command,CommanderError,InvalidArgumentError,Option}from"#compiled/commander/index.js";import{agentCommand}from"#cli/agent-command.js";import{parseDevelopmentHeaderOption,resolveDevelopmentUrlTarget}from"#cli/dev/url-target.js";import{parseDevelopmentServerUrl}from"#cli/dev/url.js";import{FORCED_EXIT_BACKSTOP_MS,installShutdownSignal,waitForShutdownSignal}from"#cli/shutdown.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{findEveProjectContext,resolveEveProjectContext}from"#internal/project-context.js";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{eveCliBanner}from"#cli/banner.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{registerBuildCommand}from"#cli/commands/build.js";import{resolveApplicationRoot}from"#internal/application/paths.js";import{findCliApplicationRoot,resolveCliApplicationProject}from"#cli/application-root.js";import{registerIntegrationCommands}from"#cli/commands/register-integration-commands.js";import{registerProjectCommands}from"#cli/commands/register-project-commands.js";import{registerRegistryCommands}from"#cli/commands/register-registry-commands.js";import{runInteractiveDevelopmentUi}from"#cli/dev/run-interactive-ui.js";import{resolveDevUiMode,resolveTuiDisplayOptions}from"#cli/dev/ui-options.js";import{registerAcpCommand}from"#cli/acp/command.js";import{waitForServerOrStop,waitForUiOrServer}from"#cli/dev/wait-for-ui.js";import{registerRuntimeInvokeCommand}from"#cli/invoke/command.js";import{parseAgentNamesOption,parseContextSizeOption,parseDisplayMode,parseLogsMode,parsePortOption,parseReasoningOption,parseStatsMode}from"#cli/option-parsers.js";import{createDevBootProgressReporter}from"#cli/dev/boot-progress.js";import{registerEveTelemetryCommands}from"#cli/telemetry/command.js";import{canonicalCommand,createEveCliTelemetry}from"#cli/telemetry/index.js";async function loadPrintApplicationInfo(){return(await import(`#cli/commands/info.js`)).printApplicationInfo}async function loadDevelopmentTuiModule(){return await import(`#cli/dev/tui/tui.js`)}async function loadRunEvalCommand(){return(await import(`#evals/cli/eval.js`)).runEvalCommand}async function loadStartHost(){return(await import(`#cli/dev/local-server-process.js`)).createDevelopmentServer}const loadIsActiveDevelopmentServerForApp=async()=>(await import(`#internal/nitro/host.js`)).isActiveDevelopmentServerForApp;async function loadStartProductionHost(){return(await import(`#internal/nitro/host.js`)).startProductionServer}function hasInteractiveTerminal(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}function createCliProgram(e,t,n,r){let i=resolveInstalledPackageInfo().version,a=new Command,o=createCliTheme();a.name(`eve`).description(`Build and run an eve application.`).version(i).showHelpAfterError().exitOverride().hook(`preAction`,(t,n)=>{let{json:r}=n.opts();[`info`,`init`].includes(n.name())&&!r&&e.log(eveCliBanner())}).configureOutput({writeErr:t=>{e.error(t.trimEnd())},writeOut:t=>{e.log(t.trimEnd())}}),agentCommand(a.command(`channels`).description(`Manage user-authored channels in the current project.`).command(`list`),n).description(`List user-authored channels in the current project.`).option(`--json`,`Output as JSON`).action(async t=>{let{runChannelsListCommand:r}=await import(`#cli/commands/channels.js`);await r(e,n.project,t)}),registerEveTelemetryCommands(a,e),registerIntegrationCommands({program:a,logger:e,applicationContext:n});let s=a.command(`extension`).description(`Create and build reusable eve extension packages.`);s.command(`init [target]`).description(`Create a new eve extension package.`).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,i)=>{i.yes&&e.error(`warning: --yes has no effect for eve extension init.`);let{runExtensionInitCommand:a}=await import(`#cli/commands/extension-init.js`);await a(e,n.root,t,void 0,e=>{r.trackSetupStep({flow:`extension_init`,step:e})})}),s.command(`build`).description(`Build the current package as an eve extension.`).action(async()=>{let{loadDevelopmentEnvironmentFiles:t}=await import(`#cli/dev/environment.js`);await t(n.root);let{runExtensionBuildCommand:r}=await import(`#cli/commands/extension-build.js`);await r(e,n.root)}),registerRegistryCommands({program:a,logger:e,applicationContext:n}),a.command(`init [target]`).description(`Create a new eve agent, or add one to an existing project directory.`).option(`--channel-web-nextjs`,`Add the Web Chat application (Next.js)`).option(`--agents <names>`,`Create an agents/ workspace with comma-separated agent names`,parseAgentNamesOption).option(`--model <model>`,`Set the agent model (provider/model-id)`).option(`--reasoning <effort>`,`Set reasoning (provider-default|none|minimal|low|medium|high|xhigh)`,parseReasoningOption).option(`-y, --yes`,`Accepted for compatibility; has no effect`).action(async(t,i)=>{i.yes&&e.error(`warning: --yes has no effect for eve init.`);let{runInitCommand:a}=await import(`#cli/commands/init.js`);await a(e,n.root,t,{agents:i.agents,channelWebNextjs:i.channelWebNextjs,model:i.model,reasoning:i.reasoning},void 0,e=>{r.trackSetupStep({flow:`init`,step:e})},(e,t,n)=>{r.trackSetupTerminal({flow:`init`,step:e,result:t,failureCode:n})})}),agentCommand(a.command(`set`),n).description(`Change root agent model settings.`).option(`--model <model>`,`Set the agent model (provider/model-id)`).option(`--reasoning <effort>`,`Set reasoning (provider-default|none|minimal|low|medium|high|xhigh)`,parseReasoningOption).action(async t=>{let{runSetCommand:r}=await import(`#cli/commands/set.js`);await r(e,n.root,t)}),registerProjectCommands({program:a,logger:e,applicationContext:n}),registerBuildCommand({applicationContext:n,buildHost:t.buildHost,logger:e,program:a}),agentCommand(a.command(`start`),n).description(`Start a built eve application.`).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 3000)`,parsePortOption).action(async r=>{let{loadDevelopmentEnvironmentFiles:i}=await import(`#cli/dev/environment.js`);await i(n.root);let a=await(t.startProductionHost??await loadStartProductionHost())(n.root,{host:r.host,port:r.port});e.log(renderCliTaggedLine(o,{message:`server listening at ${a.url}`,tag:`start`,tone:`success`})),await waitForShutdownSignal({close:()=>a.close(),wait:()=>a.wait()})}),registerRuntimeInvokeCommand({applicationContext:n,logger:e,program:a,runtime:t}),registerAcpCommand({applicationContext:n,eveVersion:i,program:a,resolveVerifiedRemoteDevelopmentClient:t.resolveVerifiedRemoteDevelopmentClient,runAcpServer:t.runAcpServer,startHost:t.startHost}),agentCommand(a.command(`dev`),n,e=>{let t=e.opts();return resolveDevelopmentUrlTarget(t,e.processedArgs[0])===void 0}).description(`Start the eve development server or connect to an existing URL.`).argument(`[url]`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`--host <host>`,`Host interface to bind`).option(`--port <port>`,`Port to listen on (defaults to $PORT, then 2000)`,parsePortOption).option(`-u, --url <url>`,`Connect to an existing server URL`,parseDevelopmentServerUrl).option(`-H, --header <header>`,`Request header for a URL target, in "Name: value" form (repeatable)`,parseDevelopmentHeaderOption).option(`--no-ui`,`Start the server without an interactive UI`).option(`--name <name>`,`Title shown in the terminal UI (defaults to the app folder name)`).option(`--input <text>`,`Pre-fill the prompt input`).addOption(new Option(`--onboard`,`Start fresh-agent onboarding`).hideHelp()).option(`--tools <mode>`,`How tool calls render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--reasoning <mode>`,`How reasoning renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--subagents <mode>`,`How subagent sections render: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--connection-auth <mode>`,`How connection authorization renders: full | collapsed | auto-collapsed | hidden`,parseDisplayMode).option(`--assistant-response-stats <mode>`,`Assistant header statistic: tokens | tokensPerSecond`,parseStatsMode).option(`--context-size <tokens>`,`Model context window size, shown as a usage percentage`,parseContextSizeOption).option(`--logs <mode>`,`Which server/agent logs to show: all | stderr | sandbox | none`,parseLogsMode).addHelpText(`after`,`
|
|
2
2
|
You can also pass a bare URL, for example: eve dev https://example.com
|
|
3
3
|
`).action(async(i,a)=>{let s=resolveDevelopmentUrlTarget(a,i),c=s?.serverUrl,l=hasInteractiveTerminal(),u=resolveDevUiMode({options:a,interactive:l});if(r.trackDevContext({target:s?`remote`:`local`,ui:u}),u===`headless`&&e.log(eveCliBanner()),a.input!==void 0&&u===`headless`)throw new InvalidArgumentError(`--input requires the interactive UI.`);let d=!1;if(c!==void 0&&(d=await(t.isActiveDevelopmentServerForApp??await loadIsActiveDevelopmentServerForApp())({appRoot:n.root,serverUrl:c})),c){let{loadDevelopmentEnvironmentFiles:i}=await import(`#cli/dev/environment.js`);if(await i(n.root),e.log(`↗ ${d?`local`:`remote`} mode targeting ${o.info(new URL(c).host)}`),u===`headless`){e.log(renderCliTaggedLine(o,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`}));return}e.log(``);let l=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS});try{await runInteractiveDevelopmentUi({applicationRoot:n.root,existingLocalServer:d,lifecycle:l,onOnboardingStep:r.trackSetupStep,onOnboardingTerminal:r.trackSetupTerminal,options:a,remoteTarget:s,runDevelopmentTui:t.runDevelopmentTui,server:{serverUrl:c}})}finally{l.dispose()}return}let f=u===`tui`?startCliLiveRow(e):void 0,p=createDevBootProgressReporter(f);f?.update(`Building your agent`);let m,h,closeServer=()=>m===void 0?Promise.resolve():(h??=m.close(),h.catch(()=>void 0),h),g=installShutdownSignal({exitAfterMs:FORCED_EXIT_BACKSTOP_MS,onStop:()=>{closeServer()}}),_,v=u===`tui`&&a.onboard!==!0&&t.runDevelopmentTui===void 0?loadDevelopmentTuiModule().then(e=>(p({type:`before-first-paint`}),e.startDevelopmentTuiStartup({appRoot:n.root,initialInput:a.input,onExitRequest:g.requestStop,...resolveTuiDisplayOptions(a)}))):void 0;try{m=(t.startHost??await loadStartHost())(n.root,{existing:u===`tui`?`attach-if-unconfigured`:`reject`,host:a.host,onBootProgress:p,port:a.port});let[i,s]=await Promise.all([Promise.race([m.start().then(e=>({handle:e})),g.stopped.then(()=>({handle:void 0}))]),v]),c=i.handle;if(c===void 0){_=s,await _?.shutdown();return}if(_=s,u!==`tui`&&e.log(renderCliTaggedLine(o,{message:`server listening at ${c.url}`,tag:`dev`,tone:`success`})),u===`headless`){a.ui!==!1&&!l&&e.log(renderCliTaggedLine(o,{message:`Interactive UI disabled because the current terminal is not a TTY.`,tag:`dev`,tone:`warning`})),await waitForServerOrStop(m,g);return}await waitForUiOrServer({handle:c,lifecycle:g,server:m,runUi:async()=>await runInteractiveDevelopmentUi({applicationRoot:n.root,existingLocalServer:!1,lifecycle:g,onOnboardingStep:r.trackSetupStep,onOnboardingTerminal:r.trackSetupTerminal,options:a,report:p,runDevelopmentTui:t.runDevelopmentTui,server:{appRoot:c.appRoot,serverUrl:c.url},startup:_})})}finally{f?.stop(),_===void 0&&(_=await v?.catch(()=>void 0),await _?.shutdown()),await closeServer(),g.dispose()}});let c=a.command(`logs`).description("Inspect local `eve dev` diagnostic logs (.eve/logs).");return agentCommand(c.command(`show [logid]`,{isDefault:!0}),n).description(`Print a diagnostic log (the most recent when logid is omitted).`).option(`--dump`,`Prepend the log's environment dump (.dump sibling)`).option(`--events`,`Interleave session events from the local workflow store`).action(async(t,r)=>{let{runLogsShowCommand:i}=await import(`#cli/commands/logs.js`);await i(e,n.root,t,r)}),agentCommand(c.command(`ls`),n).description(`List diagnostic logs, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runLogsListCommand:r}=await import(`#cli/commands/logs.js`);await r(e,n.root,t)}),agentCommand(a.command(`traces [trace]`),n).usage(`[options] [trace]
|
|
4
|
-
eve traces ls [options]`).description("Show a local `eve dev` trace (the most recent when trace is omitted).").option(`--verbose`,`Expand every span with all attributes and events`).option(`--json`,`Output as JSON`).action(async(t,r)=>{let{runTraceShowCommand:i}=await import(`#cli/commands/trace.js`);await i(e,n.root,t,r)}).command(`ls`).description(`List local traces, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runTraceListCommand:r}=await import(`#cli/commands/trace.js`);await r(e,n.root,t)}),agentCommand(a.command(`info`),n).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async r=>{await(t.printApplicationInfo??await loadPrintApplicationInfo())(e,n.root,r)}),agentCommand(a.command(`eval`),n,e=>e.opts().url===void 0).description(`Run evals against an eve agent.`).argument(`[evalIds...]`,`Eval ids (or directory prefixes) to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`,parseDevelopmentServerUrl).option(`--tag <tag...>`,`Run only evals carrying a tag`).option(`--exclude-tag <tag...>`,`Skip evals carrying a tag`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--list`,`Print discovered evals without running them`).option(`--timeout <ms>`,`Per-eval timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent eval executions`).option(`--json`,`Output results as JSON`).option(`--junit <path>`,`Write JUnit XML results to a file`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).option(`--verbose`,`Stream per-eval
|
|
4
|
+
eve traces ls [options]`).description("Show a local `eve dev` trace (the most recent when trace is omitted).").option(`--verbose`,`Expand every span with all attributes and events`).option(`--json`,`Output as JSON`).action(async(t,r)=>{let{runTraceShowCommand:i}=await import(`#cli/commands/trace.js`);await i(e,n.root,t,r)}).command(`ls`).description(`List local traces, most recent first.`).option(`--json`,`Output as JSON`).action(async t=>{let{runTraceListCommand:r}=await import(`#cli/commands/trace.js`);await r(e,n.root,t)}),agentCommand(a.command(`info`),n).description(`Print resolved application information.`).option(`--json`,`Output as JSON`).action(async r=>{await(t.printApplicationInfo??await loadPrintApplicationInfo())(e,n.root,r)}),agentCommand(a.command(`eval`),n,e=>e.opts().url===void 0).description(`Run evals against an eve agent.`).argument(`[evalIds...]`,`Eval ids (or directory prefixes) to run (all discovered evals when omitted)`).option(`--url <url>`,`Remote agent URL (skip local host startup)`,parseDevelopmentServerUrl).option(`--tag <tag...>`,`Run only evals carrying a tag`).option(`--exclude-tag <tag...>`,`Skip evals carrying a tag`).option(`--strict`,`Fail the exit code when any score falls below its threshold`).option(`--list`,`Print discovered evals without running them`).option(`--timeout <ms>`,`Per-eval timeout in milliseconds`).option(`--max-concurrency <n>`,`Max concurrent eval executions`).option(`--json`,`Output results as JSON`).option(`--junit <path>`,`Write JUnit XML results to a file`).option(`--skip-report`,`Skip eval-defined reporters (e.g. Braintrust)`).option(`--verbose`,`Stream per-eval logs and workflow run IDs to stdout`).action(async(r,i)=>{await(t.runEvalCommand??await loadRunEvalCommand())(r,i,e,n.root)}),a}async function runCli(e=process.argv.slice(2),t=console,n={}){let r={root:resolveApplicationRoot(),async resolve(){let e=await(n.resolveApplicationProject??resolveCliApplicationProject)(r.root);r.project=e,r.root=e.appRoot},async resolveAgent(){return resolveEveProjectContext(r.root)}},i=createEveCliTelemetry(resolveInstalledPackageInfo().version),a=createCliProgram(t,n,r,i),o=e;if(o.length===0){let e=await(n.findApplicationRoot??findCliApplicationRoot)(r.root);e===void 0?o=(await findEveProjectContext(r.root))?.kind===`workspace`?[`dev`]:[`init`]:(r.root=e,o=[`dev`])}let s=canonicalCommand(o);i.trackCommand(s),s!==`telemetry`&&await i.notify(t);try{await a.parseAsync(o,{from:`user`}),i.trackOutcome(`success`)}catch(e){if(e instanceof CommanderError&&e.exitCode===0){i.trackOutcome(`success`);return}if(i.trackOutcome(e instanceof CommanderError?`usage_error`:`error`),e instanceof CommanderError){let r=await(n.isCodingAgentLaunch??isCodingAgentLaunch)();if(o[0]===`init`&&r){let{initAgentInstructions:e}=await import(`#cli/commands/agent-instructions.js`);t.log(e())}throw Error(e.message)}throw e}finally{await i.flush()}}export{createCliProgram,resolveDevUiMode,resolveTuiDisplayOptions,runCli};
|
|
@@ -7,6 +7,8 @@ export type EveCliTelemetryEvent = {
|
|
|
7
7
|
export type EveCliSetupFlow = "init" | "extension_init" | "onboarding";
|
|
8
8
|
export type EveCliSetupStep = "resolve_target" | "scaffold" | "install_dependencies" | "initialize_git" | "handoff" | "model_provider" | "model_settings" | "registry_channels" | "registry_integrations" | "registry_review" | "registry_install";
|
|
9
9
|
export type EveCliSetupTerminalResult = "completed" | "cancelled" | "error";
|
|
10
|
+
/** A bounded, non-sensitive reason for a failed setup terminal event. */
|
|
11
|
+
export type EveCliSetupFailureCode = "target_resolution" | "scaffolding" | "package_manager_not_found" | "package_manager_start_failed" | "workspace_probe_failed" | "workspace_probe_unrecognized" | "dependency_installation" | "git_initialization" | "handoff" | "onboarding";
|
|
10
12
|
export type EveCliSetupStepEvent = {
|
|
11
13
|
flow: EveCliSetupFlow;
|
|
12
14
|
step: EveCliSetupStep;
|
|
@@ -16,6 +18,7 @@ export type EveCliSetupTerminalEvent = {
|
|
|
16
18
|
flow: EveCliSetupFlow;
|
|
17
19
|
step: EveCliSetupStep;
|
|
18
20
|
result: EveCliSetupTerminalResult;
|
|
21
|
+
failureCode?: EveCliSetupFailureCode;
|
|
19
22
|
};
|
|
20
23
|
export type EveCliTelemetry = {
|
|
21
24
|
trackCommand(command: string): void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{randomUUID}from"node:crypto";import{spawn}from"node:child_process";import{markEveTelemetryNotified,readEveTelemetryPreference,readOrCreateEveTelemetryIdentity}from"#cli/telemetry/preference.js";import os from"node:os";import{createEveTelemetryIdentity,isEphemeralEveTelemetryEnvironment,resolveEveTelemetryProjectId}from"#cli/telemetry/identity.js";async function isEnabled(){return process.env.NODE_ENV!==`test`&&!process.env.EVE_TELEMETRY_DISABLED&&(await readEveTelemetryPreference()).enabled}function event(e,t){return{id:randomUUID(),event_time:Date.now(),key:e,value:t}}const CLI_TELEMETRY_COMMANDS=new Map([[`acp`,`acp`],[`add`,`add`],[`build`,`build`],[`channels`,`channels`],[`channels:list`,`channels:list`],[`deploy`,`deploy`],[`dev`,`dev`],[`eval`,`eval`],[`extension`,`extension`],[`extension:build`,`extension:build`],[`extension:init`,`extension:init`],[`info`,`info`],[`init`,`init`],[`integration`,`integration`],[`integration:connect`,`integration:connect`],[`integration:setup`,`integration:setup`],[`invoke`,`invoke`],[`link`,`link`],[`logs`,`logs:show`],[`logs:ls`,`logs:ls`],[`logs:show`,`logs:show`],[`registry`,`registry`],[`registry:add`,`registry:add`],[`registry:list`,`registry:list`],[`registry:search`,`registry:search`],[`registry:view`,`registry:view`],[`set`,`set`],[`start`,`start`],[`telemetry`,`telemetry`],[`telemetry:disable`,`telemetry:disable`],[`telemetry:enable`,`telemetry:enable`],[`telemetry:status`,`telemetry:status`],[`traces`,`traces:show`],[`traces:ls`,`traces:ls`]]),cliTelemetryCommandPaths=new Set(CLI_TELEMETRY_COMMANDS.keys()),internalCliCommandPaths=new Set([`telemetry:flush`]);function canonicalCommand(e){let t=e[0];if(t===`--help`||t===`-h`)return`help`;if(t===`--version`||t===`-V`)return`version`;let n=e.findIndex(e=>!e.startsWith(`-`)),r=e[n];if(r===void 0||/^https?:\/\//.test(r))return`dev`;let i=e.slice(n+1).find(e=>!e.startsWith(`-`));if(i!==void 0){let e=CLI_TELEMETRY_COMMANDS.get(`${r}:${i}`);if(e!==void 0)return e}return CLI_TELEMETRY_COMMANDS.get(r)??`unknown`}function createEveCliTelemetry(e){let t=[event(`version`,e),event(`platform`,os.platform()),event(`arch`,os.arch()),event(`stdin_is_tty`,process.stdin.isTTY?`true`:`false`)],n=randomUUID(),r=[],i,a=!1;return{trackCommand(e){t.push(event(`command`,e))},trackDevContext(e){t.push(event(`target`,e.target),event(`ui`,e.ui))},trackSetupStep(e){i={flow:e.flow,step:e.step},r.push(event(`setup_flow`,e.flow),event(`setup_step`,e.step)),e.registrySelectedCount!==void 0&&r.push(event(`registry_selected_count`,String(e.registrySelectedCount)))},trackSetupTerminal(e){a=!0,r.push(event(`setup_flow`,e.flow),event(`setup_terminal_step`,e.step),event(`setup_terminal_result`,e.result))},trackOutcome(e){i!==void 0&&!a&&this.trackSetupTerminal({...i,result:e===`success`?`completed`:`error`}),t.push(event(`outcome`,e))},async notify(e){let t=await readEveTelemetryPreference();if(process.env.NODE_ENV!==`test`&&!process.env.EVE_TELEMETRY_DISABLED&&t.enabled&&!t.notified&&process.stderr.isTTY){e.error(`Attention: eve collects CLI telemetry to improve the command-line interface.
|
|
1
|
+
import{randomUUID}from"node:crypto";import{spawn}from"node:child_process";import{markEveTelemetryNotified,readEveTelemetryPreference,readOrCreateEveTelemetryIdentity}from"#cli/telemetry/preference.js";import os from"node:os";import{createEveTelemetryIdentity,isEphemeralEveTelemetryEnvironment,resolveEveTelemetryProjectId}from"#cli/telemetry/identity.js";async function isEnabled(){return process.env.NODE_ENV!==`test`&&!process.env.EVE_TELEMETRY_DISABLED&&(await readEveTelemetryPreference()).enabled}function event(e,t){return{id:randomUUID(),event_time:Date.now(),key:e,value:t}}function setupFailureCode(e){switch(e){case`resolve_target`:return`target_resolution`;case`scaffold`:return`scaffolding`;case`install_dependencies`:case`registry_install`:return`dependency_installation`;case`initialize_git`:return`git_initialization`;case`handoff`:return`handoff`;case`model_provider`:case`model_settings`:case`registry_channels`:case`registry_integrations`:case`registry_review`:return`onboarding`}}const CLI_TELEMETRY_COMMANDS=new Map([[`acp`,`acp`],[`add`,`add`],[`build`,`build`],[`channels`,`channels`],[`channels:list`,`channels:list`],[`deploy`,`deploy`],[`dev`,`dev`],[`eval`,`eval`],[`extension`,`extension`],[`extension:build`,`extension:build`],[`extension:init`,`extension:init`],[`info`,`info`],[`init`,`init`],[`integration`,`integration`],[`integration:connect`,`integration:connect`],[`integration:setup`,`integration:setup`],[`invoke`,`invoke`],[`link`,`link`],[`logs`,`logs:show`],[`logs:ls`,`logs:ls`],[`logs:show`,`logs:show`],[`registry`,`registry`],[`registry:add`,`registry:add`],[`registry:list`,`registry:list`],[`registry:search`,`registry:search`],[`registry:view`,`registry:view`],[`set`,`set`],[`start`,`start`],[`telemetry`,`telemetry`],[`telemetry:disable`,`telemetry:disable`],[`telemetry:enable`,`telemetry:enable`],[`telemetry:status`,`telemetry:status`],[`traces`,`traces:show`],[`traces:ls`,`traces:ls`]]),cliTelemetryCommandPaths=new Set(CLI_TELEMETRY_COMMANDS.keys()),internalCliCommandPaths=new Set([`telemetry:flush`]);function canonicalCommand(e){let t=e[0];if(t===`--help`||t===`-h`)return`help`;if(t===`--version`||t===`-V`)return`version`;let n=e.findIndex(e=>!e.startsWith(`-`)),r=e[n];if(r===void 0||/^https?:\/\//.test(r))return`dev`;let i=e.slice(n+1).find(e=>!e.startsWith(`-`));if(i!==void 0){let e=CLI_TELEMETRY_COMMANDS.get(`${r}:${i}`);if(e!==void 0)return e}return CLI_TELEMETRY_COMMANDS.get(r)??`unknown`}function createEveCliTelemetry(e){let t=[event(`version`,e),event(`platform`,os.platform()),event(`arch`,os.arch()),event(`stdin_is_tty`,process.stdin.isTTY?`true`:`false`)],n=randomUUID(),r=[],i,a=!1;return{trackCommand(e){t.push(event(`command`,e))},trackDevContext(e){t.push(event(`target`,e.target),event(`ui`,e.ui))},trackSetupStep(e){i={flow:e.flow,step:e.step},r.push(event(`setup_flow`,e.flow),event(`setup_step`,e.step)),e.registrySelectedCount!==void 0&&r.push(event(`registry_selected_count`,String(e.registrySelectedCount)))},trackSetupTerminal(e){a=!0,r.push(event(`setup_flow`,e.flow),event(`setup_terminal_step`,e.step),event(`setup_terminal_result`,e.result)),e.result===`error`&&r.push(event(`setup_failure_code`,e.failureCode??setupFailureCode(e.step)))},trackOutcome(e){i!==void 0&&!a&&this.trackSetupTerminal({...i,result:e===`success`?`completed`:`error`}),t.push(event(`outcome`,e))},async notify(e){let t=await readEveTelemetryPreference();if(process.env.NODE_ENV!==`test`&&!process.env.EVE_TELEMETRY_DISABLED&&t.enabled&&!t.notified&&process.stderr.isTTY){e.error(`Attention: eve collects CLI telemetry to improve the command-line interface.
|
|
2
2
|
Disable it with \`eve telemetry disable\`, or for one command set EVE_TELEMETRY_DISABLED=1.
|
|
3
3
|
Learn more: https://eve.dev/docs/reference/telemetry`);try{await markEveTelemetryNotified()}catch{}}},async flush(){if(await isEnabled()&&t.length!==0){try{let e=isEphemeralEveTelemetryEnvironment(),n=e?createEveTelemetryIdentity():await readOrCreateEveTelemetryIdentity();t.push(event(`identity_kind`,e?`ephemeral`:`persistent`),event(`installation_id`,n.installationId),event(`project_id`,await resolveEveTelemetryProjectId({identity:n}))),t.push(...r)}catch{return}if(process.env.EVE_TELEMETRY_DEBUG){process.stderr.write(`[eve telemetry] ${JSON.stringify(t)}\n`);return}try{let e=spawn(process.execPath,[process.argv[1]??``,`telemetry`,`flush`,JSON.stringify({events:t,sessionId:n})],{detached:!0,env:{...process.env,EVE_TELEMETRY_DISABLED:`1`},stdio:`ignore`,windowsHide:!0});e.on(`error`,()=>{}),e.unref()}catch{}}}}}export{canonicalCommand,cliTelemetryCommandPaths,createEveCliTelemetry,internalCliCommandPaths};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"moduleFingerprints": {
|
|
3
|
-
"@eve/catalog": "1a52c83c427f093856c0f21512b04d1546e959c80bb1c58672520cbead580260"
|
|
3
|
+
"@eve/catalog": "1a52c83c427f093856c0f21512b04d1546e959c80bb1c58672520cbead580260",
|
|
4
|
+
"@workflow/world-local": "006372fa64bf6487348d0902cb03828fa2e1a1f042b48869bef40a9d166d2eab"
|
|
4
5
|
},
|
|
5
6
|
"moduleVersions": {
|
|
6
7
|
"@agentclientprotocol/sdk": "1.3.0",
|
|
@@ -53,7 +54,7 @@
|
|
|
53
54
|
"zod": "4.5.4",
|
|
54
55
|
"zod-validation-error": "5.0.0"
|
|
55
56
|
},
|
|
56
|
-
"scriptHash": "
|
|
57
|
+
"scriptHash": "f7e6cd75d406953a1b855ad2840988df0e983b5ef3d960dc12a73e804a6eea1f",
|
|
57
58
|
"toolVersions": {
|
|
58
59
|
"rolldown": "1.2.7",
|
|
59
60
|
"typescript": "7.0.2"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import{i as e,t}from"../../_chunks/workflow/rolldown-runtime-DPpTSio4.js";import{t as n}from"../../_chunks/workflow/debug-log-CVPstO1D.js";import{C as r,Di as i,E as a,Fr as o,G as s,Il as c,J as l,Jr as u,L as d,Ln as f,O as p,Q as m,R as h,U as g,W as _,X as v,Y as y,Z as b,_ as x,a as S,at as C,c as ee,ct as te,d as ne,dt as re,f as ie,ft as ae,k as w,l as oe,lt as se,m as ce,n as le,o as ue,q as de,r as fe,u as pe,v as T,x as me,y as E,z as he}from"../../_chunks/workflow/dist-veFIAdWV.js";import{A as D,O as ge,d as O,f as _e,o as k,r as A,y as ve}from"../../_chunks/workflow/dist-BIO9Inoc.js";import{i as ye,n as j,r as M,t as N}from"../../_chunks/workflow/workflow-routes-CwqB063q.js";import{a as P,i as F,n as be,r as xe,t as Se}from"../../_chunks/workflow/signal-exit-Dsy-TT0V.js";import{createHash as I}from"node:crypto";import{promisify as Ce}from"node:util";import{fileURLToPath as we}from"node:url";import{promises as L}from"node:fs";import R,{access as Te,constants as z,mkdir as Ee,readFile as De,readdir as Oe,readlink as ke,rm as Ae,unlink as je,writeFile as Me}from"node:fs/promises";import B from"node:path";import{tmpdir as Ne}from"node:os";import{execFile as Pe}from"node:child_process";import{setTimeout as Fe}from"node:timers/promises";import Ie from"node:assert";import{EventEmitter as Le}from"node:events";var Re=class extends D{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 from the environment when the process starts: the Vercel world is used when VERCEL_DEPLOYMENT_ID is set, unless WORKFLOW_TARGET_WORLD says otherwise. Unset WORKFLOW_TARGET_WORLD in this deployment, or set WORKFLOW_TARGET_WORLD=vercel, to use the Vercel world. 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 ze=new Set([`EROFS`,`EACCES`,`EPERM`]);function Be(e){return e!==void 0&&ze.has(e)}const Ve=c(`@workflow/world-local//buildTargetWarnings`,1,()=>({warnedAboutVercelDeployment:!1}));function He(e){if(Ve.warnedAboutVercelDeployment||!process.env.VERCEL_DEPLOYMENT_ID)return;let t=B.resolve(e),n=Ne();t===n||t.startsWith(`${n}${B.sep}`)||(Ve.warnedAboutVercelDeployment=!0,console.warn(`[workflow] Warning: the local (filesystem) world is running inside a Vercel deployment, writing to ${t}. That filesystem is read-only, so workflow runs will fail before their first step. The world is selected from the environment when the process starts: the Vercel world is used when VERCEL_DEPLOYMENT_ID is set, unless WORKFLOW_TARGET_WORLD says otherwise. Unset WORKFLOW_TARGET_WORLD in this deployment, or set WORKFLOW_TARGET_WORLD=vercel, to use the Vercel world.`))}function Ue(e,t=10){let n=parseInt(e,t);if(!Number.isNaN(n)&&n>=0&&n<=65535)return n}function We(e,t){let n=[],r=e.trim().split(`
|
|
2
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=Ue(i.slice(s+1));c!==void 0&&n.push(c)}return n}const Ge=Ce(Pe);function Ke(e,t=10){let n=parseInt(e,t);if(!Number.isNaN(n)&&n>=0&&n<=65535)return n}const qe=((e,t)=>e.join(t))([``,`proc`],`/`);async function Je(e){let t=[`${qe}/net/tcp`,`${qe}/net/tcp6`],n=[],r=new Set,i=`${qe}/${e}/fd`;try{let e=(await Oe(i)).sort((e,t)=>Number.parseInt(e,10)-Number.parseInt(t,10)),t=await Promise.allSettled(e.map(async e=>(await ke(`${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 De(e,`utf8`)).split(`
|
|
3
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=Ke(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 Ye(e){try{let{stdout:t}=await Ge(`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=Ke(t.slice(e+1));r!==void 0&&n.push(r)}}}return n}catch{return[]}}async function Xe(e){try{let{stdout:t}=await Ge(`cmd`,[`/c`,`netstat -ano -p tcp | findstr LISTENING`]);return We(t,e)}catch{return[]}}async function Ze(){let{pid:e,platform:t}=process;try{switch(t){case`linux`:return await Je(e);case`darwin`:return await Ye(e);case`win32`:return await Xe(e);default:return[]}}catch(e){return n(`[getAllPorts] Detection failed:`,e),[]}}const Qe=`${N}/flow?__health`;async function $e(e,t={}){let{endpoint:n=Qe,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 et(e){let t=await Ze();if(t.length===0)return;if(t.length===1)return t[0];let r=(await Promise.all(t.map(async t=>({port:t,isWorkflow:await $e(t,e)})))).find(e=>e.isWorkflow);return r?r.port:(n(`[getWorkflowPort] Probing failed, falling back to first port:`,t[0]),t[0])}function tt(e){let t={get value(){let n=e();return Object.defineProperty(t,"value",{value:n}),n}};return t}const nt=()=>process.env.WORKFLOW_LOCAL_DATA_DIR||`.workflow-data`,rt=()=>process.env.WORKFLOW_LOCAL_BASE_URL,it=tt(()=>({dataDir:nt(),baseUrl:rt()}));function at(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 ot(e){return e.baseUrl??process.env.WORKFLOW_LOCAL_BASE_URL??j(`http://localhost`)}async function st(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 j(`http://localhost:${e.port}`);if(process.env.PORT)return j(`http://localhost:${process.env.PORT}`);let t=await et({endpoint:M()});if(t)return j(`http://localhost:${t}`);throw Error(`Unable to resolve base URL for workflow queue.`)}const V=c(`@workflow/world-local//fs`,1,()=>({ulid:ue(()=>Math.random()),createdFilesCache:new Set,createdDirectoriesCache:new Set}));function ct(e){let t=typeof e==`string`?e:String(e);return t.length>48?`${t.slice(0,48)}…`:t}var lt=class extends D{constructor(e,t){super(`Unsafe ${e} "${ct(t)}": must not be empty, contain ".", "/", "\\", or null bytes`),this.name=`UnsafeEntityIdError`}static is(e){return e instanceof Error&&e.name===`UnsafeEntityIdError`}};function H(e,t){if(t.length===0||t.startsWith(`.`)||t.includes(`/`)||t.includes(`\\`)||t.includes(`\0`)||t.includes(`.`))throw new lt(e,t)}function U(e,...t){let n=B.resolve(e),r=B.resolve(e,...t);if(r!==n&&!r.startsWith(n+B.sep))throw new lt(`path`,t.join(`/`));return r}const ut=process.platform===`win32`;async function W(e,t=5){if(!ut)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`)}function dt(){V.createdFilesCache.clear(),V.createdDirectoriesCache.clear()}const ft=/\.[a-zA-Z][a-zA-Z0-9-]*$/;function G(e){return e.replace(ft,``)}function pt(e,t){return e.endsWith(`.${t}`)}function mt(e){return!ft.test(e)}function K(e,t,n,r){return H(`fileId`,n),r!==void 0&&H(`tag`,r),U(e,t,r?`${n}.${r}.json`:`${n}.json`)}async function q(e,t,n,r,i){if(H(`fileId`,n),i!==void 0&&H(`tag`,i),i){let a=await X(U(e,t,`${n}.${i}.json`),r);if(a!==null)return a}return X(U(e,t,`${n}.json`),r)}async function ht(e,t){let n=`.${t}.json`;try{return(await L.readdir(e)).filter(e=>e.endsWith(n))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function gt(e,t,n){let r=`.${t}${n}`;try{return(await L.readdir(e)).filter(e=>e.endsWith(r))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function _t(e){let t=B.resolve(e);if(!V.createdDirectoriesCache.has(t))try{await L.mkdir(t,{recursive:!0}),V.createdDirectoriesCache.add(t)}catch(e){let n=e.code;if(Be(n)&&!await vt(t))throw new Re(t,n)}}async function vt(e){try{return(await L.stat(e)).isDirectory()}catch{return!1}}async function yt(e,t){await _t(e);try{return await t()}catch(n){if(n.code!==`ENOENT`)throw n;return V.createdDirectoriesCache.delete(B.resolve(e)),await _t(e),t()}}function J(e,t){return t instanceof Uint8Array?{__type:`Uint8Array`,data:Buffer.from(t).toString(`base64`)}:t}function bt(e,t){return typeof t==`object`&&t&&t.__type===`Uint8Array`&&typeof t.data==`string`?new Uint8Array(Buffer.from(t.data,`base64`)):t}async function Y(e,t,n){return xt(e,JSON.stringify(t,J,2),n)}async function xt(e,t,n){if(!n?.overwrite){if(V.createdFilesCache.has(e))throw new A(`File ${e} already exists and 'overwrite' is false`);try{throw await L.access(e),V.createdFilesCache.add(e),new A(`File ${e} already exists and 'overwrite' is false`)}catch(e){if(e.code!==`ENOENT`)throw e}}let r=`${e}.tmp.${V.ulid()}`,i=!1;try{await yt(B.dirname(e),async()=>{await L.writeFile(r,t),i=!0,await W(()=>L.rename(r,e))}),V.createdFilesCache.add(e)}catch(e){throw i&&await W(()=>L.unlink(r),3).catch(()=>{}),e}}async function X(e,t){try{let n=await L.readFile(e,`utf-8`);return t.parse(JSON.parse(n,bt))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function St(e){return await L.readFile(e)}async function Ct(e){let t=await L.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 Z(e){try{await W(()=>L.unlink(e))}catch(e){if(e.code!==`ENOENT`)throw e}}async function Q(e,t){let n=`${e}.tmp.${V.ulid()}`,r=!1;try{return await yt(B.dirname(e),async()=>{await L.writeFile(n,t,{flag:`wx`}),r=!0;try{return await W(()=>L.link(n,e)),!0}catch(e){if(e.code===`EEXIST`)return!1;throw e}})}finally{r&&await W(()=>L.unlink(n),3).catch(()=>{})}}async function wt(e,t){try{return await yt(B.dirname(t),()=>W(()=>L.link(e,t))),`linked`}catch(e){if(e.code===`EEXIST`)return`exists`;if(e.code===`ENOENT`)return`missing`;throw e}}async function Tt(e){return Et(e,`.json`)}async function Et(e,t){try{return(await L.readdir(e)).filter(e=>e.endsWith(t)).map(e=>e.slice(0,-t.length))}catch(e){if(e.code===`ENOENT`)return[];throw e}}const Dt=`key:`;function Ot(e){if(!e)return null;if(e.startsWith(`key:`))return{timestamp:new Date(0),id:null,sortKey:e.slice(4)};let t=e.split(`|`);return{timestamp:new Date(t[0]),id:t[1]||null,sortKey:null}}function kt(e,t,n){return n?`${Dt}${n}`:t?`${e.toISOString()}|${t}`:e.toISOString()}async function At(e){let{directory:t,schema:n,cachedItems:r,filePrefix:a,fileIdFilter:o,filter:s,sortOrder:c=`desc`,limit:l=20,cursor:u,getCreatedAt:d,getId:f,getSortKey:p,getSortKeyFromFileId:m}=e;a!==void 0&&H(`filePrefix`,a);let h=B.resolve(t),g=await Tt(h),_=a?g.filter(e=>e.startsWith(a)):g,v=o?_.filter(o):_,y=Ot(u),b=v;if(y?.sortKey&&m){let e=y.sortKey;b=v.filter(t=>{let n=m(t);if(n===null)return!0;let r=n.localeCompare(e);return c===`desc`?r<0:r>0})}else y&&!y.sortKey&&(b=v.filter(e=>{let t=d(`${e}.json`);if(t){let e=y.timestamp.getTime(),n=t.getTime();return y.id?c===`desc`?n<=e:n>=e:c===`desc`?n<e:n>e}return!0}));let x=[];for(let e=0;e<b.length;e+=32){let t=b.slice(e,e+32),a=await Promise.all(t.map(async e=>{let t=B.join(h,`${e}.json`),a;try{let e=r?.get(t);a=e===void 0?await X(t,n):structuredClone(e)}catch(t){if(t instanceof i)return console.warn(`Skipping item ${e} due to malformed JSON: ${t.message}`),null;throw t}return a&&s&&!await s(a)?null:a}));for(let e of a){if(!e)continue;let t=p?.(e)??null;if(y?.sortKey){if(t){let e=t.localeCompare(y.sortKey);if(c===`desc`?e>=0:e<=0)continue}x.push(e);continue}if(y){let t=e.createdAt.getTime(),n=y.timestamp.getTime();if(c===`desc`){if(t>n||t===n&&y.id&&f&&f(e)>=y.id)continue}else if(t<n||t===n&&y.id&&f&&f(e)<=y.id)continue}x.push(e)}}x.sort((e,t)=>{if(p){let n=p(e),r=p(t);if(n!==null&&r!==null)return c===`asc`?n.localeCompare(r):r.localeCompare(n)}let n=e.createdAt.getTime(),r=t.createdAt.getTime(),i=c===`asc`?n-r:r-n;if(i===0&&f){let n=f(e),r=f(t);return c===`asc`?n.localeCompare(r):r.localeCompare(n)}return i});let S=x.length>l,C=S?x.slice(0,l):x;return{data:C,cursor:C.length>0?kt(C[C.length-1].createdAt,f?.(C[C.length-1]),p?.(C[C.length-1])):null,hasMore:S}}const jt=c(`@workflow/world-local//packageInfo`,1,()=>({cached:null}));function Mt(){return typeof import.meta.url==`string`&&import.meta.url?B.dirname(we(import.meta.url)):null}async function Nt(){if(jt.cached)return jt.cached;let e=Mt();if(e)try{let t=await De(B.join(e,`../package.json`),`utf-8`);return jt.cached=JSON.parse(t),jt.cached}catch{}return jt.cached={name:`@workflow/world-local`,version:`5.0.0-beta.42`},jt.cached}const Pt=`version.txt`;var Ft=class extends Error{dataDir;code;constructor(e,t,n){super(e),this.name=`DataDirAccessError`,this.dataDir=t,this.code=n}},It=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 Lt(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 $(e){let t=`${e.major}.${e.minor}.${e.patch}`;return e.prerelease?`${t}-${e.prerelease}`:t}function Rt(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:Lt(t.substring(n+1))}}function zt(e,t){return`${e}@${$(t)}`}function Bt(e,t){console.log(`[world-local] Upgrading from version ${$(e)} to ${$(t)}`)}async function Vt(e){let t=B.resolve(e);try{await Ee(t,{recursive:!0})}catch(e){let n=e;if(n.code!==`EEXIST`)throw new Ft(`Failed to create data directory "${t}": ${n.message}`,t,n.code)}try{await Te(t,z.R_OK)}catch(e){let n=e;throw new Ft(`Data directory "${t}" is not readable: ${n.message}`,t,n.code)}let n=B.join(t,`.workflow-write-test-${Date.now()}`);try{await Me(n,``),await je(n).catch(e=>{if(e.code!==`ENOENT`)throw e})}catch(e){let n=e;throw new Ft(`Data directory "${t}" is not writable: ${n.message}`,t,n.code)}}async function Ht(e){let t=B.join(B.resolve(e),Pt);try{return Rt(await De(t,`utf-8`))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function Ut(e,t){let n=B.join(B.resolve(e),Pt),r=zt((await Nt()).name,t);await Me(n,r)}function Wt(e,t){return t||$(e)}async function Gt(e){await Vt(e);let t=await Nt(),n=Lt(t.version),r=await Ht(e);if(r===null){await Ut(e,n);return}let{version:i}=r;if($(i)!==$(n))try{Bt(i,n),await Ut(e,n)}catch(e){let r=Wt(i,e instanceof It?e.suggestedVersion:void 0);throw console.error(`[world-local] Failed to upgrade data directory from version ${$(i)} to ${$(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}}const Kt=c(`@workflow/world-local//telemetry`,1,()=>({apiPromise:null,tracerPromise:null}));async function qt(){return Kt.apiPromise||=import(`../../@opentelemetry/api/index.js`).catch(()=>null),Kt.apiPromise}async function Jt(){return Kt.tracerPromise||=qt().then(e=>e?e.trace.getTracer(`workflow`):null),Kt.tracerPromise}async function Yt(e,...t){let[n,r]=await Promise.all([Jt(),qt()]),{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 Xt(e){let t=await qt();if(t)return t.SpanKind[e]}function Zt(...e){return t=>Object.fromEntries(e.map(e=>[e,t]))}const Qt=Zt(`peer.service`),$t=Zt(`rpc.system`),en=Zt(`rpc.service`),tn=Zt(`rpc.method`),nn=Zt(`workflow.run.id`),rn=Zt(`step.id`),an={peerService:`world-local`,rpcSystem:`local`,rpcService:`world-local`},on={"world.runs.get":0,"world.runs.experimentalSetAttributes":0,"world.steps.get":0,"world.events.create":0,"world.events.get":0},sn=new Set([`world.steps.list`,`world.events.list`,`world.hooks.list`]);function cn(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 ln(e,t){return typeof e[t]==`string`?e[t]:void 0}function un(e){if(typeof e!=`object`||!e)return;let t=e.runId;return typeof t==`string`?t:void 0}function dn(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 fn(e,t,n){let r=`${e}.${t}`,i={},a=on[r],o=a===void 0?sn.has(r)?un(n[0]):void 0:ln(n,a);if(o&&Object.assign(i,nn(o)),r===`world.steps.get`){let e=ln(n,1);e&&Object.assign(i,rn(e))}return i}function pn(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=cn(t);r&&(n=`${e}.${a} ${r}`)}return Yt(n,{kind:await Xt(`INTERNAL`)},async r=>{r?.setAttributes({...Qt(an.peerService),...$t(an.rpcSystem),...en(an.rpcService),...tn(n),...fn(e,a,t)});let o=await i(...t),s=dn(o);return s&&r?.setAttributes(nn(s)),o})}}return n}var mn=t((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}))(),hn=be(),gn=class{contentType=`application/json`;serialize(e){return Buffer.from(JSON.stringify(e,J))}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,bt)}};const _n=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_MAX_VISIBILITY??`0`,10)||1/0,vn=2147483647,yn=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_CONCURRENCY??`0`,10)||1e3;function bn(e,t){let n=process.env[e];if(n===void 0||n===``)return t;let r=Number.parseInt(n,10);return Number.isFinite(r)&&r>=0?r:t}function xn(){return{bodyTimeout:bn(`WORKFLOW_LOCAL_BODY_TIMEOUT_MS`,3e4),connections:1e3,headersTimeout:bn(`WORKFLOW_LOCAL_HEADERS_TIMEOUT_MS`,3e4),keepAliveTimeout:3e4}}const Sn=`Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer`;function Cn(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(Sn))return!0;t=`cause`in t?t.cause:void 0}return!1}function wn(e){let t=xn(),i=T()?xe({maxSockets:t.connections,keepAliveMs:t.keepAliveTimeout}):void 0,s=i?void 0:new hn.Agent(t),c=new gn,l=ue(),u=new mn.Sema(yn),d=new AbortController,f=d.signal,p=new Map,m=new Map,h=async(r,o,d)=>{let h=[];if(d?.idempotencyKey){let e=p.get(d.idempotencyKey);if(e)return{messageId:e}}let g=c.serialize(o),{prefix:_}=a(r),v=me.parse(`msg_${l()}`),y=o,b=y.runId??void 0,x=y.stepId??void 0;if(d?.idempotencyKey){let e=d.idempotencyKey;p.set(e,v),h.push(()=>{p.delete(e)})}return(async()=>{if(d?.delaySeconds&&d.delaySeconds>0){let e=Math.min(d.delaySeconds*1e3,vn);await Fe(e,void 0,{signal:f})}u.tryAcquire()||(n(`[world-local]: concurrency limit (${yn}) reached, waiting for queue to free up`),await u.acquire());let a=0;try{for(let n=0;n<256;n++){let o={...d?.headers,"content-type":`application/json`,"x-vqs-queue-name":r,"x-vqs-message-id":v,"x-vqs-message-attempt":String(a+1)},c=m.get(_),l,u;try{if(c)l=await c(new Request(ye(ot(e),{type:`flow`}),{method:`POST`,headers:o,body:g}));else{let n=await st(e),r=ye(n,{type:`flow`});l=i?await P(r,{method:`POST`,headers:new Headers(o),body:g,agents:i,signal:f,headersTimeoutMs:t.headersTimeout,bodyTimeoutMs:t.bodyTimeout}):await fetch(r,{method:`POST`,duplex:`half`,dispatcher:s,headers:o,body:g,signal:f})}a++,u=await l.text()}catch(e){let t=e?.name;if(f.aborted||t===`AbortError`||t===`ResponseAborted`)return;if(Cn(e))throw e;console.error(`[world-local] Queue delivery failed at the transport (loop ${n+1}), retrying`,{queueName:r,messageId:v,...b&&{runId:b},...x&&{stepId:x},error:String(e)}),await Fe(5e3,void 0,{signal:f});continue}if(l.ok){try{let e=Number(JSON.parse(u).timeoutSeconds);if(Number.isFinite(e)&&e>=0){if(e>0){let t=Math.min(e*1e3,vn);await Fe(t,void 0,{signal:f})}continue}}catch{}return}console.error(`[world-local] Queue message failed (attempt ${a}, HTTP ${l.status})`,{queueName:r,messageId:v,...b&&{runId:b},...x&&{stepId:x},handlerError:u}),await Fe(5e3,void 0,{signal:f})}console.error(`[world-local] Queue message exhausted safety limit (256 attempts)`,{queueName:r,messageId:v,...b&&{runId:b},...x&&{stepId:x}})}finally{u.release()}})().catch(e=>{e?.name!==`AbortError`&&e?.name!==`ResponseAborted`&&(Cn(e)?console.error(`[local world] Queue operation failed: detected "${Sn}". 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:r,messageId:v,...b&&{runId:b},...x&&{stepId:x},originalError:e}):console.error(`[local world] Queue operation failed:`,e))}).finally(()=>{for(let e of h)e()}),{messageId:v}},g=o({"x-vqs-queue-name":r,"x-vqs-message-id":me,"x-vqs-message-attempt":ae()});return{queue:h,createQueueHandler:(e,t)=>async n=>{let r=g.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 gn().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,_n)),n==null?Response.json({ok:!0}):Response.json({timeoutSeconds:n})}catch(e){return Response.json(String(e),{status:500})}},getDeploymentId:async()=>`dpl_local@${(await Nt()).version}`,registerHandler(e,t){m.set(e,t)},async close(){f.aborted||(d.abort(),i&&F(i),await s?.close())}}}var Tn=t(((t,n)=>{var r=e(`constants`),i=process.cwd,a=null,o=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return a||=i.call(process),a};try{process.cwd()}catch{}if(typeof process.chdir==`function`){var s=process.chdir;process.chdir=function(e){a=null,s.call(process,e)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,s)}n.exports=c;function c(e){r.hasOwnProperty(`O_SYMLINK`)&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&t(e),e.lutimes||n(e),e.chown=s(e.chown),e.fchown=s(e.fchown),e.lchown=s(e.lchown),e.chmod=i(e.chmod),e.fchmod=i(e.fchmod),e.lchmod=i(e.lchmod),e.chownSync=c(e.chownSync),e.fchownSync=c(e.fchownSync),e.lchownSync=c(e.lchownSync),e.chmodSync=a(e.chmodSync),e.fchmodSync=a(e.fchmodSync),e.lchmodSync=a(e.lchmodSync),e.stat=l(e.stat),e.fstat=l(e.fstat),e.lstat=l(e.lstat),e.statSync=u(e.statSync),e.fstatSync=u(e.fstatSync),e.lstatSync=u(e.lstatSync),e.chmod&&!e.lchmod&&(e.lchmod=function(e,t,n){n&&process.nextTick(n)},e.lchmodSync=function(){}),e.chown&&!e.lchown&&(e.lchown=function(e,t,n,r){r&&process.nextTick(r)},e.lchownSync=function(){}),o===`win32`&&(e.rename=typeof e.rename==`function`?(function(t){function n(n,r,i){var a=Date.now(),o=0;t(n,r,function s(c){if(c&&(c.code===`EACCES`||c.code===`EPERM`||c.code===`EBUSY`)&&Date.now()-a<6e4){setTimeout(function(){e.stat(r,function(e,a){e&&e.code===`ENOENT`?t(n,r,s):i(c)})},o),o<100&&(o+=10);return}i&&i(c)})}return Object.setPrototypeOf&&Object.setPrototypeOf(n,t),n})(e.rename):e.rename),e.read=typeof e.read==`function`?(function(t){function n(n,r,i,a,o,s){var c;if(s&&typeof s==`function`){var l=0;c=function(u,d,f){if(u&&u.code===`EAGAIN`&&l<10)return l++,t.call(e,n,r,i,a,o,c);s.apply(this,arguments)}}return t.call(e,n,r,i,a,o,c)}return Object.setPrototypeOf&&Object.setPrototypeOf(n,t),n})(e.read):e.read,e.readSync=typeof e.readSync==`function`?(function(t){return function(n,r,i,a,o){for(var s=0;;)try{return t.call(e,n,r,i,a,o)}catch(e){if(e.code===`EAGAIN`&&s<10){s++;continue}throw e}}})(e.readSync):e.readSync;function t(e){e.lchmod=function(t,n,i){e.open(t,r.O_WRONLY|r.O_SYMLINK,n,function(t,r){if(t){i&&i(t);return}e.fchmod(r,n,function(t){e.close(r,function(e){i&&i(t||e)})})})},e.lchmodSync=function(t,n){var i=e.openSync(t,r.O_WRONLY|r.O_SYMLINK,n),a=!0,o;try{o=e.fchmodSync(i,n),a=!1}finally{if(a)try{e.closeSync(i)}catch{}else e.closeSync(i)}return o}}function n(e){r.hasOwnProperty(`O_SYMLINK`)&&e.futimes?(e.lutimes=function(t,n,i,a){e.open(t,r.O_SYMLINK,function(t,r){if(t){a&&a(t);return}e.futimes(r,n,i,function(t){e.close(r,function(e){a&&a(t||e)})})})},e.lutimesSync=function(t,n,i){var a=e.openSync(t,r.O_SYMLINK),o,s=!0;try{o=e.futimesSync(a,n,i),s=!1}finally{if(s)try{e.closeSync(a)}catch{}else e.closeSync(a)}return o}):e.futimes&&(e.lutimes=function(e,t,n,r){r&&process.nextTick(r)},e.lutimesSync=function(){})}function i(t){return t&&function(n,r,i){return t.call(e,n,r,function(e){d(e)&&(e=null),i&&i.apply(this,arguments)})}}function a(t){return t&&function(n,r){try{return t.call(e,n,r)}catch(e){if(!d(e))throw e}}}function s(t){return t&&function(n,r,i,a){return t.call(e,n,r,i,function(e){d(e)&&(e=null),a&&a.apply(this,arguments)})}}function c(t){return t&&function(n,r,i){try{return t.call(e,n,r,i)}catch(e){if(!d(e))throw e}}}function l(t){return t&&function(n,r,i){typeof r==`function`&&(i=r,r=null);function a(e,t){t&&(t.uid<0&&(t.uid+=4294967296),t.gid<0&&(t.gid+=4294967296)),i&&i.apply(this,arguments)}return r?t.call(e,n,r,a):t.call(e,n,a)}}function u(t){return t&&function(n,r){var i=r?t.call(e,n,r):t.call(e,n);return i&&(i.uid<0&&(i.uid+=4294967296),i.gid<0&&(i.gid+=4294967296)),i}}function d(e){return!(e&&e.code!==`ENOSYS`&&(process.getuid&&process.getuid()===0||e.code!==`EINVAL`&&e.code!==`EPERM`))}}})),En=t(((t,n)=>{var r=e(`stream`).Stream;n.exports=i;function i(e){return{ReadStream:t,WriteStream:n};function t(n,i){if(!(this instanceof t))return new t(n,i);r.call(this);var a=this;this.path=n,this.fd=null,this.readable=!0,this.paused=!1,this.flags=`r`,this.mode=438,this.bufferSize=65536,i||={};for(var o=Object.keys(i),s=0,c=o.length;s<c;s++){var l=o[s];this[l]=i[l]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!=`number`)throw TypeError(`start must be a Number`);if(this.end===void 0)this.end=1/0;else if(typeof this.end!=`number`)throw TypeError(`end must be a Number`);if(this.start>this.end)throw Error(`start must be <= end`);this.pos=this.start}if(this.fd!==null){process.nextTick(function(){a._read()});return}e.open(this.path,this.flags,this.mode,function(e,t){if(e){a.emit(`error`,e),a.readable=!1;return}a.fd=t,a.emit(`open`,t),a._read()})}function n(t,i){if(!(this instanceof n))return new n(t,i);r.call(this),this.path=t,this.fd=null,this.writable=!0,this.flags=`w`,this.encoding=`binary`,this.mode=438,this.bytesWritten=0,i||={};for(var a=Object.keys(i),o=0,s=a.length;o<s;o++){var c=a[o];this[c]=i[c]}if(this.start!==void 0){if(typeof this.start!=`number`)throw TypeError(`start must be a Number`);if(this.start<0)throw Error(`start must be >= zero`);this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=e.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}})),Dn=t(((e,t)=>{t.exports=r;var n=Object.getPrototypeOf||function(e){return e.__proto__};function r(e){if(typeof e!=`object`||!e)return e;if(e instanceof Object)var t={__proto__:n(e)};else var t=Object.create(null);return Object.getOwnPropertyNames(e).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}),t}})),On=t(((t,n)=>{var r=e(`fs`),i=Tn(),a=En(),o=Dn(),s=e(`util`),c,l;typeof Symbol==`function`&&typeof Symbol.for==`function`?(c=Symbol.for(`graceful-fs.queue`),l=Symbol.for(`graceful-fs.previous`)):(c=`___graceful-fs.queue`,l=`___graceful-fs.previous`);function u(){}function d(e,t){Object.defineProperty(e,c,{get:function(){return t}})}var f=u;s.debuglog?f=s.debuglog(`gfs4`):/\bgfs4\b/i.test(process.env.NODE_DEBUG||``)&&(f=function(){var e=s.format.apply(s,arguments);e=`GFS4: `+e.split(/\n/).join(`
|
|
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 Xe(e){try{let{stdout:t}=await Ge(`cmd`,[`/c`,`netstat -ano -p tcp | findstr LISTENING`]);return We(t,e)}catch{return[]}}async function Ze(){let{pid:e,platform:t}=process;try{switch(t){case`linux`:return await Je(e);case`darwin`:return await Ye(e);case`win32`:return await Xe(e);default:return[]}}catch(e){return n(`[getAllPorts] Detection failed:`,e),[]}}const Qe=`${N}/flow?__health`;async function $e(e,t={}){let{endpoint:n=Qe,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 et(e){let t=await Ze();if(t.length===0)return;if(t.length===1)return t[0];let r=(await Promise.all(t.map(async t=>({port:t,isWorkflow:await $e(t,e)})))).find(e=>e.isWorkflow);return r?r.port:(n(`[getWorkflowPort] Probing failed, falling back to first port:`,t[0]),t[0])}function tt(e){let t={get value(){let n=e();return Object.defineProperty(t,"value",{value:n}),n}};return t}const nt=()=>process.env.WORKFLOW_LOCAL_DATA_DIR||`.workflow-data`,rt=()=>process.env.WORKFLOW_LOCAL_BASE_URL,it=tt(()=>({dataDir:nt(),baseUrl:rt()}));function at(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 ot(e){return e.baseUrl??process.env.WORKFLOW_LOCAL_BASE_URL??j(`http://localhost`)}async function st(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 j(`http://localhost:${e.port}`);if(process.env.PORT)return j(`http://localhost:${process.env.PORT}`);let t=await et({endpoint:M()});if(t)return j(`http://localhost:${t}`);throw Error(`Unable to resolve base URL for workflow queue.`)}const V=c(`@workflow/world-local//fs`,1,()=>({ulid:ue(()=>Math.random()),createdFilesCache:new Set,createdDirectoriesCache:new Set}));function ct(e){let t=typeof e==`string`?e:String(e);return t.length>48?`${t.slice(0,48)}…`:t}var lt=class extends D{constructor(e,t){super(`Unsafe ${e} "${ct(t)}": must not be empty, contain ".", "/", "\\", or null bytes`),this.name=`UnsafeEntityIdError`}static is(e){return e instanceof Error&&e.name===`UnsafeEntityIdError`}};function H(e,t){if(t.length===0||t.startsWith(`.`)||t.includes(`/`)||t.includes(`\\`)||t.includes(`\0`)||t.includes(`.`))throw new lt(e,t)}function U(e,...t){let n=B.resolve(e),r=B.resolve(e,...t);if(r!==n&&!r.startsWith(n+B.sep))throw new lt(`path`,t.join(`/`));return r}const ut=process.platform===`win32`;async function W(e,t=5){if(!ut)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`)}function dt(){V.createdFilesCache.clear(),V.createdDirectoriesCache.clear()}const ft=/\.[a-zA-Z][a-zA-Z0-9-]*$/;function G(e){return e.replace(ft,``)}function pt(e,t){return e.endsWith(`.${t}`)}function mt(e){return!ft.test(e)}function K(e,t,n,r){return H(`fileId`,n),r!==void 0&&H(`tag`,r),U(e,t,r?`${n}.${r}.json`:`${n}.json`)}async function q(e,t,n,r,i){if(H(`fileId`,n),i!==void 0&&H(`tag`,i),i){let a=await X(U(e,t,`${n}.${i}.json`),r);if(a!==null)return a}return X(U(e,t,`${n}.json`),r)}async function ht(e,t){let n=`.${t}.json`;try{return(await L.readdir(e)).filter(e=>e.endsWith(n))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function gt(e,t,n){let r=`.${t}${n}`;try{return(await L.readdir(e)).filter(e=>e.endsWith(r))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function _t(e){let t=B.resolve(e);if(!V.createdDirectoriesCache.has(t))try{await L.mkdir(t,{recursive:!0}),V.createdDirectoriesCache.add(t)}catch(e){let n=e.code;if(Be(n)&&!await vt(t))throw new Re(t,n)}}async function vt(e){try{return(await L.stat(e)).isDirectory()}catch{return!1}}async function yt(e,t){await _t(e);try{return await t()}catch(n){if(n.code!==`ENOENT`)throw n;return V.createdDirectoriesCache.delete(B.resolve(e)),await _t(e),t()}}function J(e,t){return t instanceof Uint8Array?{__type:`Uint8Array`,data:Buffer.from(t).toString(`base64`)}:t}function bt(e,t){return typeof t==`object`&&t&&t.__type===`Uint8Array`&&typeof t.data==`string`?new Uint8Array(Buffer.from(t.data,`base64`)):t}async function Y(e,t,n){return xt(e,JSON.stringify(t,J,2),n)}async function xt(e,t,n){if(!n?.overwrite){if(V.createdFilesCache.has(e))throw new A(`File ${e} already exists and 'overwrite' is false`);try{throw await L.access(e),V.createdFilesCache.add(e),new A(`File ${e} already exists and 'overwrite' is false`)}catch(e){if(e.code!==`ENOENT`)throw e}}let r=`${e}.tmp.${V.ulid()}`,i=!1;try{await yt(B.dirname(e),async()=>{await L.writeFile(r,t),i=!0,await W(()=>L.rename(r,e))}),V.createdFilesCache.add(e)}catch(e){throw i&&await W(()=>L.unlink(r),3).catch(()=>{}),e}}async function X(e,t){try{let n=await W(()=>L.readFile(e,`utf-8`));return t.parse(JSON.parse(n,bt))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function St(e){return await L.readFile(e)}async function Ct(e){let t=await L.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 Z(e){try{await W(()=>L.unlink(e))}catch(e){if(e.code!==`ENOENT`)throw e}}async function Q(e,t){let n=`${e}.tmp.${V.ulid()}`,r=!1;try{return await yt(B.dirname(e),async()=>{await L.writeFile(n,t,{flag:`wx`}),r=!0;try{return await W(()=>L.link(n,e)),!0}catch(e){if(e.code===`EEXIST`)return!1;throw e}})}finally{r&&await W(()=>L.unlink(n),3).catch(()=>{})}}async function wt(e,t){try{return await yt(B.dirname(t),()=>W(()=>L.link(e,t))),`linked`}catch(e){if(e.code===`EEXIST`)return`exists`;if(e.code===`ENOENT`)return`missing`;throw e}}async function Tt(e){return Et(e,`.json`)}async function Et(e,t){try{return(await L.readdir(e)).filter(e=>e.endsWith(t)).map(e=>e.slice(0,-t.length))}catch(e){if(e.code===`ENOENT`)return[];throw e}}const Dt=`key:`;function Ot(e){if(!e)return null;if(e.startsWith(`key:`))return{timestamp:new Date(0),id:null,sortKey:e.slice(4)};let t=e.split(`|`);return{timestamp:new Date(t[0]),id:t[1]||null,sortKey:null}}function kt(e,t,n){return n?`${Dt}${n}`:t?`${e.toISOString()}|${t}`:e.toISOString()}async function At(e){let{directory:t,schema:n,cachedItems:r,filePrefix:a,fileIdFilter:o,filter:s,sortOrder:c=`desc`,limit:l=20,cursor:u,getCreatedAt:d,getId:f,getSortKey:p,getSortKeyFromFileId:m}=e;a!==void 0&&H(`filePrefix`,a);let h=B.resolve(t),g=await Tt(h),_=a?g.filter(e=>e.startsWith(a)):g,v=o?_.filter(o):_,y=Ot(u),b=v;if(y?.sortKey&&m){let e=y.sortKey;b=v.filter(t=>{let n=m(t);if(n===null)return!0;let r=n.localeCompare(e);return c===`desc`?r<0:r>0})}else y&&!y.sortKey&&(b=v.filter(e=>{let t=d(`${e}.json`);if(t){let e=y.timestamp.getTime(),n=t.getTime();return y.id?c===`desc`?n<=e:n>=e:c===`desc`?n<e:n>e}return!0}));let x=[];for(let e=0;e<b.length;e+=32){let t=b.slice(e,e+32),a=await Promise.all(t.map(async e=>{let t=B.join(h,`${e}.json`),a;try{let e=r?.get(t);a=e===void 0?await X(t,n):structuredClone(e)}catch(t){if(t instanceof i)return console.warn(`Skipping item ${e} due to malformed JSON: ${t.message}`),null;throw t}return a&&s&&!await s(a)?null:a}));for(let e of a){if(!e)continue;let t=p?.(e)??null;if(y?.sortKey){if(t){let e=t.localeCompare(y.sortKey);if(c===`desc`?e>=0:e<=0)continue}x.push(e);continue}if(y){let t=e.createdAt.getTime(),n=y.timestamp.getTime();if(c===`desc`){if(t>n||t===n&&y.id&&f&&f(e)>=y.id)continue}else if(t<n||t===n&&y.id&&f&&f(e)<=y.id)continue}x.push(e)}}x.sort((e,t)=>{if(p){let n=p(e),r=p(t);if(n!==null&&r!==null)return c===`asc`?n.localeCompare(r):r.localeCompare(n)}let n=e.createdAt.getTime(),r=t.createdAt.getTime(),i=c===`asc`?n-r:r-n;if(i===0&&f){let n=f(e),r=f(t);return c===`asc`?n.localeCompare(r):r.localeCompare(n)}return i});let S=x.length>l,C=S?x.slice(0,l):x;return{data:C,cursor:C.length>0?kt(C[C.length-1].createdAt,f?.(C[C.length-1]),p?.(C[C.length-1])):null,hasMore:S}}const jt=c(`@workflow/world-local//packageInfo`,1,()=>({cached:null}));function Mt(){return typeof import.meta.url==`string`&&import.meta.url?B.dirname(we(import.meta.url)):null}async function Nt(){if(jt.cached)return jt.cached;let e=Mt();if(e)try{let t=await De(B.join(e,`../package.json`),`utf-8`);return jt.cached=JSON.parse(t),jt.cached}catch{}return jt.cached={name:`@workflow/world-local`,version:`5.0.0-beta.42`},jt.cached}const Pt=`version.txt`;var Ft=class extends Error{dataDir;code;constructor(e,t,n){super(e),this.name=`DataDirAccessError`,this.dataDir=t,this.code=n}},It=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 Lt(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 $(e){let t=`${e.major}.${e.minor}.${e.patch}`;return e.prerelease?`${t}-${e.prerelease}`:t}function Rt(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:Lt(t.substring(n+1))}}function zt(e,t){return`${e}@${$(t)}`}function Bt(e,t){console.log(`[world-local] Upgrading from version ${$(e)} to ${$(t)}`)}async function Vt(e){let t=B.resolve(e);try{await Ee(t,{recursive:!0})}catch(e){let n=e;if(n.code!==`EEXIST`)throw new Ft(`Failed to create data directory "${t}": ${n.message}`,t,n.code)}try{await Te(t,z.R_OK)}catch(e){let n=e;throw new Ft(`Data directory "${t}" is not readable: ${n.message}`,t,n.code)}let n=B.join(t,`.workflow-write-test-${Date.now()}`);try{await Me(n,``),await je(n).catch(e=>{if(e.code!==`ENOENT`)throw e})}catch(e){let n=e;throw new Ft(`Data directory "${t}" is not writable: ${n.message}`,t,n.code)}}async function Ht(e){let t=B.join(B.resolve(e),Pt);try{return Rt(await De(t,`utf-8`))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function Ut(e,t){let n=B.join(B.resolve(e),Pt),r=zt((await Nt()).name,t);await Me(n,r)}function Wt(e,t){return t||$(e)}async function Gt(e){await Vt(e);let t=await Nt(),n=Lt(t.version),r=await Ht(e);if(r===null){await Ut(e,n);return}let{version:i}=r;if($(i)!==$(n))try{Bt(i,n),await Ut(e,n)}catch(e){let r=Wt(i,e instanceof It?e.suggestedVersion:void 0);throw console.error(`[world-local] Failed to upgrade data directory from version ${$(i)} to ${$(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}}const Kt=c(`@workflow/world-local//telemetry`,1,()=>({apiPromise:null,tracerPromise:null}));async function qt(){return Kt.apiPromise||=import(`../../@opentelemetry/api/index.js`).catch(()=>null),Kt.apiPromise}async function Jt(){return Kt.tracerPromise||=qt().then(e=>e?e.trace.getTracer(`workflow`):null),Kt.tracerPromise}async function Yt(e,...t){let[n,r]=await Promise.all([Jt(),qt()]),{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 Xt(e){let t=await qt();if(t)return t.SpanKind[e]}function Zt(...e){return t=>Object.fromEntries(e.map(e=>[e,t]))}const Qt=Zt(`peer.service`),$t=Zt(`rpc.system`),en=Zt(`rpc.service`),tn=Zt(`rpc.method`),nn=Zt(`workflow.run.id`),rn=Zt(`step.id`),an={peerService:`world-local`,rpcSystem:`local`,rpcService:`world-local`},on={"world.runs.get":0,"world.runs.experimentalSetAttributes":0,"world.steps.get":0,"world.events.create":0,"world.events.get":0},sn=new Set([`world.steps.list`,`world.events.list`,`world.hooks.list`]);function cn(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 ln(e,t){return typeof e[t]==`string`?e[t]:void 0}function un(e){if(typeof e!=`object`||!e)return;let t=e.runId;return typeof t==`string`?t:void 0}function dn(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 fn(e,t,n){let r=`${e}.${t}`,i={},a=on[r],o=a===void 0?sn.has(r)?un(n[0]):void 0:ln(n,a);if(o&&Object.assign(i,nn(o)),r===`world.steps.get`){let e=ln(n,1);e&&Object.assign(i,rn(e))}return i}function pn(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=cn(t);r&&(n=`${e}.${a} ${r}`)}return Yt(n,{kind:await Xt(`INTERNAL`)},async r=>{r?.setAttributes({...Qt(an.peerService),...$t(an.rpcSystem),...en(an.rpcService),...tn(n),...fn(e,a,t)});let o=await i(...t),s=dn(o);return s&&r?.setAttributes(nn(s)),o})}}return n}var mn=t((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}))(),hn=be(),gn=class{contentType=`application/json`;serialize(e){return Buffer.from(JSON.stringify(e,J))}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,bt)}};const _n=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_MAX_VISIBILITY??`0`,10)||1/0,vn=2147483647,yn=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_CONCURRENCY??`0`,10)||1e3;function bn(e,t){let n=process.env[e];if(n===void 0||n===``)return t;let r=Number.parseInt(n,10);return Number.isFinite(r)&&r>=0?r:t}function xn(){return{bodyTimeout:bn(`WORKFLOW_LOCAL_BODY_TIMEOUT_MS`,3e4),connections:1e3,headersTimeout:bn(`WORKFLOW_LOCAL_HEADERS_TIMEOUT_MS`,3e4),keepAliveTimeout:3e4}}const Sn=`Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer`;function Cn(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(Sn))return!0;t=`cause`in t?t.cause:void 0}return!1}function wn(e){let t=xn(),i=T()?xe({maxSockets:t.connections,keepAliveMs:t.keepAliveTimeout}):void 0,s=i?void 0:new hn.Agent(t),c=new gn,l=ue(),u=new mn.Sema(yn),d=new AbortController,f=d.signal,p=new Map,m=new Map,h=async(r,o,d)=>{let h=[];if(d?.idempotencyKey){let e=p.get(d.idempotencyKey);if(e)return{messageId:e}}let g=c.serialize(o),{prefix:_}=a(r),v=me.parse(`msg_${l()}`),y=o,b=y.runId??void 0,x=y.stepId??void 0;if(d?.idempotencyKey){let e=d.idempotencyKey;p.set(e,v),h.push(()=>{p.delete(e)})}return(async()=>{if(d?.delaySeconds&&d.delaySeconds>0){let e=Math.min(d.delaySeconds*1e3,vn);await Fe(e,void 0,{signal:f})}u.tryAcquire()||(n(`[world-local]: concurrency limit (${yn}) reached, waiting for queue to free up`),await u.acquire());let a=0;try{for(let n=0;n<256;n++){let o={...d?.headers,"content-type":`application/json`,"x-vqs-queue-name":r,"x-vqs-message-id":v,"x-vqs-message-attempt":String(a+1)},c=m.get(_),l,u;try{if(c)l=await c(new Request(ye(ot(e),{type:`flow`}),{method:`POST`,headers:o,body:g}));else{let n=await st(e),r=ye(n,{type:`flow`});l=i?await P(r,{method:`POST`,headers:new Headers(o),body:g,agents:i,signal:f,headersTimeoutMs:t.headersTimeout,bodyTimeoutMs:t.bodyTimeout}):await fetch(r,{method:`POST`,duplex:`half`,dispatcher:s,headers:o,body:g,signal:f})}a++,u=await l.text()}catch(e){let t=e?.name;if(f.aborted||t===`AbortError`||t===`ResponseAborted`)return;if(Cn(e))throw e;console.error(`[world-local] Queue delivery failed at the transport (loop ${n+1}), retrying`,{queueName:r,messageId:v,...b&&{runId:b},...x&&{stepId:x},error:String(e)}),await Fe(5e3,void 0,{signal:f});continue}if(l.ok){try{let e=Number(JSON.parse(u).timeoutSeconds);if(Number.isFinite(e)&&e>=0){if(e>0){let t=Math.min(e*1e3,vn);await Fe(t,void 0,{signal:f})}continue}}catch{}return}console.error(`[world-local] Queue message failed (attempt ${a}, HTTP ${l.status})`,{queueName:r,messageId:v,...b&&{runId:b},...x&&{stepId:x},handlerError:u}),await Fe(5e3,void 0,{signal:f})}console.error(`[world-local] Queue message exhausted safety limit (256 attempts)`,{queueName:r,messageId:v,...b&&{runId:b},...x&&{stepId:x}})}finally{u.release()}})().catch(e=>{e?.name!==`AbortError`&&e?.name!==`ResponseAborted`&&(Cn(e)?console.error(`[local world] Queue operation failed: detected "${Sn}". 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:r,messageId:v,...b&&{runId:b},...x&&{stepId:x},originalError:e}):console.error(`[local world] Queue operation failed:`,e))}).finally(()=>{for(let e of h)e()}),{messageId:v}},g=o({"x-vqs-queue-name":r,"x-vqs-message-id":me,"x-vqs-message-attempt":ae()});return{queue:h,createQueueHandler:(e,t)=>async n=>{let r=g.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 gn().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,_n)),n==null?Response.json({ok:!0}):Response.json({timeoutSeconds:n})}catch(e){return Response.json(String(e),{status:500})}},getDeploymentId:async()=>`dpl_local@${(await Nt()).version}`,registerHandler(e,t){m.set(e,t)},async close(){f.aborted||(d.abort(),i&&F(i),await s?.close())}}}var Tn=t(((t,n)=>{var r=e(`constants`),i=process.cwd,a=null,o=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return a||=i.call(process),a};try{process.cwd()}catch{}if(typeof process.chdir==`function`){var s=process.chdir;process.chdir=function(e){a=null,s.call(process,e)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,s)}n.exports=c;function c(e){r.hasOwnProperty(`O_SYMLINK`)&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&t(e),e.lutimes||n(e),e.chown=s(e.chown),e.fchown=s(e.fchown),e.lchown=s(e.lchown),e.chmod=i(e.chmod),e.fchmod=i(e.fchmod),e.lchmod=i(e.lchmod),e.chownSync=c(e.chownSync),e.fchownSync=c(e.fchownSync),e.lchownSync=c(e.lchownSync),e.chmodSync=a(e.chmodSync),e.fchmodSync=a(e.fchmodSync),e.lchmodSync=a(e.lchmodSync),e.stat=l(e.stat),e.fstat=l(e.fstat),e.lstat=l(e.lstat),e.statSync=u(e.statSync),e.fstatSync=u(e.fstatSync),e.lstatSync=u(e.lstatSync),e.chmod&&!e.lchmod&&(e.lchmod=function(e,t,n){n&&process.nextTick(n)},e.lchmodSync=function(){}),e.chown&&!e.lchown&&(e.lchown=function(e,t,n,r){r&&process.nextTick(r)},e.lchownSync=function(){}),o===`win32`&&(e.rename=typeof e.rename==`function`?(function(t){function n(n,r,i){var a=Date.now(),o=0;t(n,r,function s(c){if(c&&(c.code===`EACCES`||c.code===`EPERM`||c.code===`EBUSY`)&&Date.now()-a<6e4){setTimeout(function(){e.stat(r,function(e,a){e&&e.code===`ENOENT`?t(n,r,s):i(c)})},o),o<100&&(o+=10);return}i&&i(c)})}return Object.setPrototypeOf&&Object.setPrototypeOf(n,t),n})(e.rename):e.rename),e.read=typeof e.read==`function`?(function(t){function n(n,r,i,a,o,s){var c;if(s&&typeof s==`function`){var l=0;c=function(u,d,f){if(u&&u.code===`EAGAIN`&&l<10)return l++,t.call(e,n,r,i,a,o,c);s.apply(this,arguments)}}return t.call(e,n,r,i,a,o,c)}return Object.setPrototypeOf&&Object.setPrototypeOf(n,t),n})(e.read):e.read,e.readSync=typeof e.readSync==`function`?(function(t){return function(n,r,i,a,o){for(var s=0;;)try{return t.call(e,n,r,i,a,o)}catch(e){if(e.code===`EAGAIN`&&s<10){s++;continue}throw e}}})(e.readSync):e.readSync;function t(e){e.lchmod=function(t,n,i){e.open(t,r.O_WRONLY|r.O_SYMLINK,n,function(t,r){if(t){i&&i(t);return}e.fchmod(r,n,function(t){e.close(r,function(e){i&&i(t||e)})})})},e.lchmodSync=function(t,n){var i=e.openSync(t,r.O_WRONLY|r.O_SYMLINK,n),a=!0,o;try{o=e.fchmodSync(i,n),a=!1}finally{if(a)try{e.closeSync(i)}catch{}else e.closeSync(i)}return o}}function n(e){r.hasOwnProperty(`O_SYMLINK`)&&e.futimes?(e.lutimes=function(t,n,i,a){e.open(t,r.O_SYMLINK,function(t,r){if(t){a&&a(t);return}e.futimes(r,n,i,function(t){e.close(r,function(e){a&&a(t||e)})})})},e.lutimesSync=function(t,n,i){var a=e.openSync(t,r.O_SYMLINK),o,s=!0;try{o=e.futimesSync(a,n,i),s=!1}finally{if(s)try{e.closeSync(a)}catch{}else e.closeSync(a)}return o}):e.futimes&&(e.lutimes=function(e,t,n,r){r&&process.nextTick(r)},e.lutimesSync=function(){})}function i(t){return t&&function(n,r,i){return t.call(e,n,r,function(e){d(e)&&(e=null),i&&i.apply(this,arguments)})}}function a(t){return t&&function(n,r){try{return t.call(e,n,r)}catch(e){if(!d(e))throw e}}}function s(t){return t&&function(n,r,i,a){return t.call(e,n,r,i,function(e){d(e)&&(e=null),a&&a.apply(this,arguments)})}}function c(t){return t&&function(n,r,i){try{return t.call(e,n,r,i)}catch(e){if(!d(e))throw e}}}function l(t){return t&&function(n,r,i){typeof r==`function`&&(i=r,r=null);function a(e,t){t&&(t.uid<0&&(t.uid+=4294967296),t.gid<0&&(t.gid+=4294967296)),i&&i.apply(this,arguments)}return r?t.call(e,n,r,a):t.call(e,n,a)}}function u(t){return t&&function(n,r){var i=r?t.call(e,n,r):t.call(e,n);return i&&(i.uid<0&&(i.uid+=4294967296),i.gid<0&&(i.gid+=4294967296)),i}}function d(e){return!(e&&e.code!==`ENOSYS`&&(process.getuid&&process.getuid()===0||e.code!==`EINVAL`&&e.code!==`EPERM`))}}})),En=t(((t,n)=>{var r=e(`stream`).Stream;n.exports=i;function i(e){return{ReadStream:t,WriteStream:n};function t(n,i){if(!(this instanceof t))return new t(n,i);r.call(this);var a=this;this.path=n,this.fd=null,this.readable=!0,this.paused=!1,this.flags=`r`,this.mode=438,this.bufferSize=65536,i||={};for(var o=Object.keys(i),s=0,c=o.length;s<c;s++){var l=o[s];this[l]=i[l]}if(this.encoding&&this.setEncoding(this.encoding),this.start!==void 0){if(typeof this.start!=`number`)throw TypeError(`start must be a Number`);if(this.end===void 0)this.end=1/0;else if(typeof this.end!=`number`)throw TypeError(`end must be a Number`);if(this.start>this.end)throw Error(`start must be <= end`);this.pos=this.start}if(this.fd!==null){process.nextTick(function(){a._read()});return}e.open(this.path,this.flags,this.mode,function(e,t){if(e){a.emit(`error`,e),a.readable=!1;return}a.fd=t,a.emit(`open`,t),a._read()})}function n(t,i){if(!(this instanceof n))return new n(t,i);r.call(this),this.path=t,this.fd=null,this.writable=!0,this.flags=`w`,this.encoding=`binary`,this.mode=438,this.bytesWritten=0,i||={};for(var a=Object.keys(i),o=0,s=a.length;o<s;o++){var c=a[o];this[c]=i[c]}if(this.start!==void 0){if(typeof this.start!=`number`)throw TypeError(`start must be a Number`);if(this.start<0)throw Error(`start must be >= zero`);this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=e.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}})),Dn=t(((e,t)=>{t.exports=r;var n=Object.getPrototypeOf||function(e){return e.__proto__};function r(e){if(typeof e!=`object`||!e)return e;if(e instanceof Object)var t={__proto__:n(e)};else var t=Object.create(null);return Object.getOwnPropertyNames(e).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}),t}})),On=t(((t,n)=>{var r=e(`fs`),i=Tn(),a=En(),o=Dn(),s=e(`util`),c,l;typeof Symbol==`function`&&typeof Symbol.for==`function`?(c=Symbol.for(`graceful-fs.queue`),l=Symbol.for(`graceful-fs.previous`)):(c=`___graceful-fs.queue`,l=`___graceful-fs.previous`);function u(){}function d(e,t){Object.defineProperty(e,c,{get:function(){return t}})}var f=u;s.debuglog?f=s.debuglog(`gfs4`):/\bgfs4\b/i.test(process.env.NODE_DEBUG||``)&&(f=function(){var e=s.format.apply(s,arguments);e=`GFS4: `+e.split(/\n/).join(`
|
|
5
5
|
GFS4: `),console.error(e)}),r[c]||(d(r,global[c]||[]),r.close=(function(e){function t(t,n){return e.call(r,t,function(e){e||g(),typeof n==`function`&&n.apply(this,arguments)})}return Object.defineProperty(t,l,{value:e}),t})(r.close),r.closeSync=(function(e){function t(t){e.apply(r,arguments),g()}return Object.defineProperty(t,l,{value:e}),t})(r.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||``)&&process.on(`exit`,function(){f(r[c]),e(`assert`).equal(r[c].length,0)})),global[c]||d(global,r[c]),n.exports=p(o(r)),process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!r.__patched&&(n.exports=p(r),r.__patched=!0);function p(e){i(e),e.gracefulify=p,e.createReadStream=te,e.createWriteStream=ne;var t=e.readFile;e.readFile=n;function n(e,n,r){return typeof n==`function`&&(r=n,n=null),i(e,n,r);function i(e,n,r,a){return t(e,n,function(t){t&&(t.code===`EMFILE`||t.code===`ENFILE`)?m([i,[e,n,r],t,a||Date.now(),Date.now()]):typeof r==`function`&&r.apply(this,arguments)})}}var r=e.writeFile;e.writeFile=o;function o(e,t,n,i){return typeof n==`function`&&(i=n,n=null),a(e,t,n,i);function a(e,t,n,i,o){return r(e,t,n,function(r){r&&(r.code===`EMFILE`||r.code===`ENFILE`)?m([a,[e,t,n,i],r,o||Date.now(),Date.now()]):typeof i==`function`&&i.apply(this,arguments)})}}var s=e.appendFile;s&&(e.appendFile=c);function c(e,t,n,r){return typeof n==`function`&&(r=n,n=null),i(e,t,n,r);function i(e,t,n,r,a){return s(e,t,n,function(o){o&&(o.code===`EMFILE`||o.code===`ENFILE`)?m([i,[e,t,n,r],o,a||Date.now(),Date.now()]):typeof r==`function`&&r.apply(this,arguments)})}}var l=e.copyFile;l&&(e.copyFile=u);function u(e,t,n,r){return typeof n==`function`&&(r=n,n=0),i(e,t,n,r);function i(e,t,n,r,a){return l(e,t,n,function(o){o&&(o.code===`EMFILE`||o.code===`ENFILE`)?m([i,[e,t,n,r],o,a||Date.now(),Date.now()]):typeof r==`function`&&r.apply(this,arguments)})}}var d=e.readdir;e.readdir=h;var f=/^v[0-5]\./;function h(e,t,n){typeof t==`function`&&(n=t,t=null);var r=f.test(process.version)?function(e,t,n,r){return d(e,i(e,t,n,r))}:function(e,t,n,r){return d(e,t,i(e,t,n,r))};return r(e,t,n);function i(e,t,n,i){return function(a,o){a&&(a.code===`EMFILE`||a.code===`ENFILE`)?m([r,[e,t,n],a,i||Date.now(),Date.now()]):(o&&o.sort&&o.sort(),typeof n==`function`&&n.call(this,a,o))}}}if(process.version.substr(0,4)===`v0.8`){var g=a(e);x=g.ReadStream,C=g.WriteStream}var _=e.ReadStream;_&&(x.prototype=Object.create(_.prototype),x.prototype.open=S);var v=e.WriteStream;v&&(C.prototype=Object.create(v.prototype),C.prototype.open=ee),Object.defineProperty(e,"ReadStream",{get:function(){return x},set:function(e){x=e},enumerable:!0,configurable:!0}),Object.defineProperty(e,"WriteStream",{get:function(){return C},set:function(e){C=e},enumerable:!0,configurable:!0});var y=x;Object.defineProperty(e,"FileReadStream",{get:function(){return y},set:function(e){y=e},enumerable:!0,configurable:!0});var b=C;Object.defineProperty(e,"FileWriteStream",{get:function(){return b},set:function(e){b=e},enumerable:!0,configurable:!0});function x(e,t){return this instanceof x?(_.apply(this,arguments),this):x.apply(Object.create(x.prototype),arguments)}function S(){var e=this;ie(e.path,e.flags,e.mode,function(t,n){t?(e.autoClose&&e.destroy(),e.emit(`error`,t)):(e.fd=n,e.emit(`open`,n),e.read())})}function C(e,t){return this instanceof C?(v.apply(this,arguments),this):C.apply(Object.create(C.prototype),arguments)}function ee(){var e=this;ie(e.path,e.flags,e.mode,function(t,n){t?(e.destroy(),e.emit(`error`,t)):(e.fd=n,e.emit(`open`,n))})}function te(t,n){return new e.ReadStream(t,n)}function ne(t,n){return new e.WriteStream(t,n)}var re=e.open;e.open=ie;function ie(e,t,n,r){return typeof n==`function`&&(r=n,n=null),i(e,t,n,r);function i(e,t,n,r,a){return re(e,t,n,function(o,s){o&&(o.code===`EMFILE`||o.code===`ENFILE`)?m([i,[e,t,n,r],o,a||Date.now(),Date.now()]):typeof r==`function`&&r.apply(this,arguments)})}}return e}function m(e){f(`ENQUEUE`,e[0].name,e[1]),r[c].push(e),_()}var h;function g(){for(var e=Date.now(),t=0;t<r[c].length;++t)r[c][t].length>2&&(r[c][t][3]=e,r[c][t][4]=e);_()}function _(){if(clearTimeout(h),h=void 0,r[c].length!==0){var e=r[c].shift(),t=e[0],n=e[1],i=e[2],a=e[3],o=e[4];if(a===void 0)f(`RETRY`,t.name,n),t.apply(null,n);else if(Date.now()-a>=6e4){f(`TIMEOUT`,t.name,n);var s=n.pop();typeof s==`function`&&s.call(null,i)}else{var l=Date.now()-o,u=Math.max(o-a,1);l>=Math.min(u*1.2,100)?(f(`RETRY`,t.name,n),t.apply(null,n.concat([a]))):r[c].push(e)}h===void 0&&(h=setTimeout(_,0))}}})),kn=t(((e,t)=>{function n(e,t){typeof t==`boolean`&&(t={forever:t}),this._originalTimeouts=JSON.parse(JSON.stringify(e)),this._timeouts=e,this._options=t||{},this._maxRetryTime=t&&t.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}t.exports=n,n.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts},n.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null},n.prototype.retry=function(e){if(this._timeout&&clearTimeout(this._timeout),!e)return!1;var t=new Date().getTime();if(e&&t-this._operationStart>=this._maxRetryTime)return this._errors.unshift(Error(`RetryOperation timeout occurred`)),!1;this._errors.push(e);var n=this._timeouts.shift();if(n===void 0){if(this._cachedTimeouts)this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),n=this._timeouts.shift();else return!1}var r=this,i=setTimeout(function(){r._attempts++,r._operationTimeoutCb&&(r._timeout=setTimeout(function(){r._operationTimeoutCb(r._attempts)},r._operationTimeout),r._options.unref&&r._timeout.unref()),r._fn(r._attempts)},n);return this._options.unref&&i.unref(),!0},n.prototype.attempt=function(e,t){this._fn=e,t&&(t.timeout&&(this._operationTimeout=t.timeout),t.cb&&(this._operationTimeoutCb=t.cb));var n=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){n._operationTimeoutCb()},n._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)},n.prototype.try=function(e){console.log(`Using RetryOperation.try() is deprecated`),this.attempt(e)},n.prototype.start=function(e){console.log(`Using RetryOperation.start() is deprecated`),this.attempt(e)},n.prototype.start=n.prototype.try,n.prototype.errors=function(){return this._errors},n.prototype.attempts=function(){return this._attempts},n.prototype.mainError=function(){if(this._errors.length===0)return null;for(var e={},t=null,n=0,r=0;r<this._errors.length;r++){var i=this._errors[r],a=i.message,o=(e[a]||0)+1;e[a]=o,o>=n&&(t=i,n=o)}return t}})),An=t((e=>{var t=kn();e.operation=function(n){return new t(e.timeouts(n),{forever:n&&n.forever,unref:n&&n.unref,maxRetryTime:n&&n.maxRetryTime})},e.timeouts=function(e){if(e instanceof Array)return[].concat(e);var t={retries:10,factor:2,minTimeout:1e3,maxTimeout:1/0,randomize:!1};for(var n in e)t[n]=e[n];if(t.minTimeout>t.maxTimeout)throw Error(`minTimeout is greater than maxTimeout`);for(var r=[],i=0;i<t.retries;i++)r.push(this.createTimeout(i,t));return e&&e.forever&&!r.length&&r.push(this.createTimeout(i,t)),r.sort(function(e,t){return e-t}),r},e.createTimeout=function(e,t){var n=t.randomize?Math.random()+1:1,r=Math.round(n*t.minTimeout*t.factor**+e);return r=Math.min(r,t.maxTimeout),r},e.wrap=function(t,n,r){if(n instanceof Array&&(r=n,n=null),!r)for(var i in r=[],t)typeof t[i]==`function`&&r.push(i);for(var a=0;a<r.length;a++){var o=r[a],s=t[o];t[o]=function(r){var i=e.operation(n),a=Array.prototype.slice.call(arguments,1),o=a.pop();a.push(function(e){i.retry(e)||(e&&(arguments[0]=i.mainError()),o.apply(this,arguments))}),i.attempt(function(){r.apply(t,a)})}.bind(t,s),t[o].options=n}}})),jn=t(((e,t)=>{t.exports=An()})),Mn=t(((e,t)=>{let n=Symbol();function r(e,t,r){let i=t[n];if(i)return t.stat(e,(e,t)=>{if(e)return r(e);r(null,t.mtime,i)});let a=new Date(Math.ceil(Date.now()/1e3)*1e3+5);t.utimes(e,a,a,i=>{if(i)return r(i);t.stat(e,(e,i)=>{if(e)return r(e);let a=i.mtime.getTime()%1e3==0?`s`:`ms`;Object.defineProperty(t,n,{value:a}),r(null,i.mtime,a)})})}function i(e){let t=Date.now();return e===`s`&&(t=Math.ceil(t/1e3)*1e3),new Date(t)}t.exports.probe=r,t.exports.getMtime=i})),Nn=t(((t,n)=>{let r=e(`path`),i=On(),a=jn(),o=Se(),s=Mn(),c={};function l(e,t){return t.lockfilePath||`${e}.lock`}function u(e,t,n){if(!t.realpath)return n(null,r.resolve(e));t.fs.realpath(e,n)}function d(e,t,n){let r=l(e,t);t.fs.mkdir(r,i=>{if(!i)return s.probe(r,t.fs,(e,i,a)=>{if(e)return t.fs.rmdir(r,()=>{}),n(e);n(null,i,a)});if(i.code!==`EEXIST`)return n(i);if(t.stale<=0)return n(Object.assign(Error(`Lock file is already being held`),{code:`ELOCKED`,file:e}));t.fs.stat(r,(r,i)=>{if(r)return r.code===`ENOENT`?d(e,{...t,stale:0},n):n(r);if(!f(i,t))return n(Object.assign(Error(`Lock file is already being held`),{code:`ELOCKED`,file:e}));p(e,t,r=>{if(r)return n(r);d(e,{...t,stale:0},n)})})})}function f(e,t){return e.mtime.getTime()<Date.now()-t.stale}function p(e,t,n){t.fs.rmdir(l(e,t),e=>{if(e&&e.code!==`ENOENT`)return n(e);n()})}function m(e,t){let n=c[e];n.updateTimeout||(n.updateDelay=n.updateDelay||t.update,n.updateTimeout=setTimeout(()=>{n.updateTimeout=null,t.fs.stat(n.lockfilePath,(r,i)=>{let a=n.lastUpdate+t.stale<Date.now();if(r)return r.code===`ENOENT`||a?h(e,n,Object.assign(r,{code:`ECOMPROMISED`})):(n.updateDelay=1e3,m(e,t));if(n.mtime.getTime()!==i.mtime.getTime())return h(e,n,Object.assign(Error(`Unable to update lock within the stale threshold`),{code:`ECOMPROMISED`}));let o=s.getMtime(n.mtimePrecision);t.fs.utimes(n.lockfilePath,o,o,r=>{let i=n.lastUpdate+t.stale<Date.now();if(!n.released){if(r)return r.code===`ENOENT`||i?h(e,n,Object.assign(r,{code:`ECOMPROMISED`})):(n.updateDelay=1e3,m(e,t));n.mtime=o,n.lastUpdate=Date.now(),n.updateDelay=null,m(e,t)}})})},n.updateDelay),n.updateTimeout.unref&&n.updateTimeout.unref())}function h(e,t,n){t.released=!0,t.updateTimeout&&clearTimeout(t.updateTimeout),c[e]===t&&delete c[e],t.options.onCompromised(n)}function g(e,t,n){t={stale:1e4,update:null,realpath:!0,retries:0,fs:i,onCompromised:e=>{throw e},...t},t.retries=t.retries||0,t.retries=typeof t.retries==`number`?{retries:t.retries}:t.retries,t.stale=Math.max(t.stale||0,2e3),t.update=t.update==null?t.stale/2:t.update||0,t.update=Math.max(Math.min(t.update,t.stale/2),1e3),u(e,t,(e,r)=>{if(e)return n(e);let i=a.operation(t.retries);i.attempt(()=>{d(r,t,(e,a,o)=>{if(i.retry(e))return;if(e)return n(i.mainError());let s=c[r]={lockfilePath:l(r,t),mtime:a,mtimePrecision:o,options:t,lastUpdate:Date.now()};m(r,t),n(null,e=>{if(s.released)return e&&e(Object.assign(Error(`Lock is already released`),{code:`ERELEASED`}));_(r,{...t,realpath:!1},e)})})})})}function _(e,t,n){t={fs:i,realpath:!0,...t},u(e,t,(e,r)=>{if(e)return n(e);let i=c[r];if(!i)return n(Object.assign(Error(`Lock is not acquired/owned by you`),{code:`ENOTACQUIRED`}));i.updateTimeout&&clearTimeout(i.updateTimeout),i.released=!0,delete c[r],p(r,t,n)})}function v(e,t,n){t={stale:1e4,realpath:!0,fs:i,...t},t.stale=Math.max(t.stale||0,2e3),u(e,t,(e,r)=>{if(e)return n(e);t.fs.stat(l(r,t),(e,r)=>e?e.code===`ENOENT`?n(null,!1):n(e):n(null,!f(r,t)))})}function y(){return c}o(()=>{for(let e in c){let t=c[e].options;try{t.fs.rmdirSync(l(e,t))}catch{}}}),n.exports.lock=g,n.exports.unlock=_,n.exports.check=v,n.exports.getLocks=y})),Pn=t(((e,t)=>{let n=On();function r(e){let t=[`mkdir`,`realpath`,`stat`,`rmdir`,`utimes`],n={...e};return t.forEach(t=>{n[t]=(...n)=>{let r=n.pop(),i;try{i=e[`${t}Sync`](...n)}catch(e){return r(e)}r(null,i)}}),n}function i(e){return(...t)=>new Promise((n,r)=>{t.push((e,t)=>{e?r(e):n(t)}),e(...t)})}function a(e){return(...t)=>{let n,r;if(t.push((e,t)=>{n=e,r=t}),e(...t),n)throw n;return r}}function o(e){if(e={...e},e.fs=r(e.fs||n),typeof e.retries==`number`&&e.retries>0||e.retries&&typeof e.retries.retries==`number`&&e.retries.retries>0)throw Object.assign(Error(`Cannot use retries with the sync api`),{code:`ESYNC`});return e}t.exports={toPromise:i,toSync:a,toSyncOptions:o}})),Fn=t(((e,t)=>{let n=Nn(),{toPromise:r,toSync:i,toSyncOptions:a}=Pn();async function o(e,t){let i=await r(n.lock)(e,t);return r(i)}function s(e,t){let r=i(n.lock)(e,a(t));return i(r)}function c(e,t){return r(n.unlock)(e,t)}function l(e,t){return i(n.unlock)(e,a(t))}function u(e,t){return r(n.check)(e,t)}function d(e,t){return i(n.check)(e,a(t))}t.exports=o,t.exports.lock=o,t.exports.unlock=c,t.exports.lockSync=s,t.exports.unlockSync=l,t.exports.check=u,t.exports.checkSync=d}))();function In(e){return I(`sha256`).update(e).digest(`hex`)}function Ln(e,t,n){return U(e,`.locks`,`hooks`,n?`${t}.disposed.${n}`:`${t}.disposed`)}async function Rn(e,t,n){let r=[Ln(e,t)];n&&r.push(Ln(e,t,n));for(let e of r)try{return await R.access(e),!0}catch{}return!1}function zn(e,t,n){return U(e,`.locks`,`runs`,n?`${t}.terminal.${n}`:`${t}.terminal`)}async function Bn(e,t,n){let r=[zn(e,t)];n&&r.push(zn(e,t,n));for(let e of r)try{return await R.access(e),!0}catch(e){if(e.code!==`ENOENT`)throw e}return!1}function Vn(e,t,n){return U(e,`.locks`,`runs`,n?`${t}.pending.${n}`:`${t}.pending`)}function Hn(e,t,n,r){return B.join(Vn(e,t,r),`${n}.json`)}async function Un(e,t,n){let r=[Vn(e,t)];n&&r.push(Vn(e,t,n));for(let e of r){let t;try{t=await R.readdir(e)}catch(e){if(e.code===`ENOENT`)continue;throw e}for(let n of t)try{await W(()=>R.unlink(B.join(e,n)))}catch(e){if(e.code!==`ENOENT`)throw e}await R.rmdir(e).catch(()=>{})}}async function Wn(e,t,n){let r=await Gn(e,t,n),i=Date.now();if(r.maxId)try{let e=S(r.maxId.replace(/^evnt_/,``));i<=e&&(i=e+1)}catch{}return{eventId:`evnt_${er(i)}`,createdAt:new Date(i)}}async function Gn(e,t,n){let r=[];try{r=await R.readdir(B.join(e,`events`))}catch(e){if(e.code!==`ENOENT`)throw e}let i=`${t}-`,a=[],o=null,s=0,c=!1,l=0;for(let e of r){if(!e.startsWith(i)||!e.endsWith(`.json`))continue;let t=e.slice(0,-5);if(!mt(t)&&!(n&&pt(t,n)))continue;let r=G(t).slice(i.length);l+=1,a.push(r),(!o||r>o)&&(o=r);let u=ne(r);u!==null&&(c=!0,u>s&&(s=u))}return{maxId:o,usesSlots:c,maxSlot:s,count:l,ids:a}}function Kn(e,t){return B.join(e,`hooks`,`tokens`,`${In(t)}.json`)}const qn=o({hookId:u().optional(),runId:u(),eventId:u().optional(),tokenRetentionUntil:re().optional()});async function Jn(e){try{return await X(e,qn)}catch(e){if(e instanceof SyntaxError||e instanceof i)return null;throw e}}async function Yn(e,t,n){let r=Kn(e,t);await R.mkdir(B.dirname(r),{recursive:!0});let i=new AbortController,a;try{a=await(0,Fn.lock)(r,{realpath:!1,stale:3e4,update:1e3,retries:{retries:350,factor:1,minTimeout:100,maxTimeout:100},onCompromised(e){i.abort(new D(`Hook token claim lock was compromised`,{cause:e}))}})}catch(e){throw new D(`Could not acquire Hook token claim lock`,{cause:e})}let o;try{o=await n(i.signal),i.signal.throwIfAborted()}catch(e){throw i.signal.aborted||await a().catch(()=>{}),e}try{await a()}catch(e){throw new D(`Could not release Hook token claim lock`,{cause:e})}return o}function Xn(e,t,n){let r=I(`sha256`).update(`${t}\x00${n}`).digest(`hex`);return B.join(e,`hooks`,`resumes`,`${r}.json`)}async function Zn(e,t,n,r){await Yn(e,t,async i=>{let a=Kn(e,t),o=await Jn(a);o&&o.runId===n&&o.hookId===r&&(i.throwIfAborted(),await Z(a))})}function Qn(e,t,n,r){let i=I(`sha256`).update(`${t}\x00${n}\x00${r}`).digest(`hex`);return B.join(e,`hooks`,`tokens`,`${i}.recovery.json`)}const $n=c(`@workflow/world-local//storageMonotonicUlid`,1,()=>({next:ue(()=>Math.random())})),er=e=>$n.next(e),tr=e=>{let t=RegExp(`^${e}_`,`g`);return n=>{let r=G(n.replace(/\.json$/,``))+`.json`,i=r.indexOf(`-`);if(i===-1){let e=r.replace(/\.json$/,``).replace(t,``);return le(e)}if(e===`step`)return null;let a=r.substring(i+1).replace(/\.json$/,``).replace(t,``);return le(a)}},nr=o({runId:u()}),rr=o({hookId:u(),tag:u().optional()});function ir(e,t){return U(e,`hooks`,`token-index`,In(t))}function ar(e,t){return H(`hookId`,t),U(e,`hooks`,`id-index`,t)}function or(e){return U(e,`hooks`,`by-run`)}function sr(e){let t=G(e);return t===e?void 0:e.slice(t.length+1)}function cr(e,t){return t?mt(e)||pt(e,t):mt(e)}async function lr(e){try{return await X(e,s)}catch(e){if(e instanceof SyntaxError||e instanceof i)return null;throw e}}async function ur(e,t,n,r,i,a){H(`runId`,n),H(`eventId`,i),a!==void 0&&H(`tag`,a);let o=a?`${i}.${a}.json`:`${i}.json`,s=JSON.stringify({runId:n});await Promise.all([Q(B.join(ir(e,t),o),s),Q(B.join(ar(e,r),o),s)])}function dr(e,t,n,r){return K(e,`hooks/by-run`,`${t}-${n}`,r)}async function fr(e,t,n,r){await Q(dr(e,t,n,r),JSON.stringify(r?{hookId:n,tag:r}:{hookId:n}))}async function pr(e,t,n,r){await Z(dr(e,t,n,r)),r&&await Z(dr(e,t,n))}async function mr(e,t){H(`runId`,t);let n=or(e),r=`${t}-`,a=[];for(let e of await Tt(n)){if(!e.startsWith(r))continue;let t=null;try{t=await X(B.join(n,`${e}.json`),rr)}catch(e){if(!(e instanceof SyntaxError||e instanceof i))throw e}a.push({fileId:e,hookId:t?.hookId??null,tag:t?.tag})}return a}async function hr(e,t){await Z(B.join(or(e),`${t}.json`))}const gr=c(`@workflow/world-local//hookIndexEnsureCache`,1,()=>({ensuredBasedirs:new Map}));function _r(){gr.ensuredBasedirs.clear()}async function vr(e){let t=B.resolve(e),n=gr.ensuredBasedirs.get(t);return n||(n=br(t).catch(e=>{throw gr.ensuredBasedirs.delete(t),e}),gr.ensuredBasedirs.set(t,n)),n}async function yr(e,t,n){for(let r=0;r<e.length;r+=t)await Promise.all(e.slice(r,r+t).map(n))}async function br(e){let t=B.join(e,`hooks`,`.hook-index-complete`);try{await R.access(t);return}catch{}let n=B.join(e,`events`);await yr(await Tt(n),32,async t=>{let r=await lr(B.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 ur(e,i,r.runId,r.correlationId,r.eventId,sr(t))}catch{}});let r=B.join(e,`hooks`);await yr(await Tt(r),32,async t=>{let n=null;try{n=await X(B.join(r,`${t}.json`),E)}catch(e){if(!(e instanceof SyntaxError||e instanceof i))throw e}if(n)try{await fr(e,n.runId,n.hookId,sr(t))}catch{}}),await Q(t,``)}async function xr(e,t,n,r){await vr(e);let a;try{a=t.kind===`token`?ir(e,t.token):ar(e,t.hookId)}catch{return null}let o=(await Tt(a)).filter(e=>cr(e,r)).sort((e,t)=>G(t).localeCompare(G(e)));for(let t of o){let r=null;try{r=await X(B.join(a,`${t}.json`),nr)}catch(e){if(!(e instanceof SyntaxError||e instanceof i))throw e}if(!r)continue;let o=G(t),s;try{s=K(e,`events`,`${r.runId}-${o}`,sr(t))}catch{continue}let c=await lr(s);if(c&&c.eventType===`hook_created`&&typeof c.correlationId==`string`&&n(c))return c}return null}function Sr(e,t){return t===`none`?{...e,input:void 0,output:void 0}:e}function Cr(e,t){return t===`none`?{...e,input:void 0,output:void 0}:e}function wr(e,t){if(t===`none`){let{metadata:t,...n}=e;return n}return e}function Tr(e){if(e.eventType!==`hook_created`)return;let t=e.eventData.token;return typeof t==`string`?t:void 0}function Er(e){let{token:t,metadata:n,isWebhook:r,isSystem:i,tokenRetentionUntil:a}=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,tokenRetentionUntil:a}}function Dr(e,t){return e.eventType===`hook_created`&&typeof e.correlationId==`string`&&t(e)}async function Or(e,t,n){let r=await q(e,`runs`,t,g,n);return r?_(r.status):!1}async function kr(e,t,n,r){let i=await xr(e,t,e=>Dr(e,n),r);if(!i||!Dr(i,n))return null;if(await Or(e,i.runId,r)){let e=i.eventData.tokenRetentionUntil;if(!e||e.getTime()<=Date.now())return null}return await Rn(e,i.correlationId,r)?null:i}async function Ar(e,t,n){let r=Er(t);return await Q(Kn(e,r.token),JSON.stringify({token:r.token,hookId:r.hookId,runId:r.runId,eventId:t.eventId,tokenRetentionUntil:t.eventData.tokenRetentionUntil})),await fr(e,r.runId,r.hookId,n),await Q(K(e,`hooks`,r.hookId,n),JSON.stringify(r,J,2)),r}async function jr(e,t,n){let r=await kr(e,{kind:`token`,token:t},e=>Tr(e)===t,n);return r?Ar(e,r,n):null}async function Mr(e,t,n){let r=await kr(e,{kind:`id`,hookId:t},e=>e.correlationId===t,n);return r?Ar(e,r,n):null}function Nr(e,t){async function n(n){return await Rn(e,n.hookId,t)?!1:n.tokenRetentionUntil&&n.tokenRetentionUntil.getTime()>Date.now()?!0:!await Or(e,n.runId,t)}async function r(r){let i=await Jn(Kn(e,r));if(i?.hookId){try{let a=await q(e,`hooks`,i.hookId,E,t);if(a?.token===r){if(!await n(a))throw new k(r);return{...a,isWebhook:a.isWebhook??!0}}}catch(e){if(!lt.is(e))throw e}return null}let a=B.join(e,`hooks`),o=await Tt(a);for(let e of o){let t=await X(B.join(a,`${e}.json`),E);if(t?.token===r){if(!await n(t))throw new k(r);return{...t,isWebhook:t.isWebhook??!0}}}return null}async function i(r,i){H(`hookId`,r);let a=await q(e,`hooks`,r,E,t);if(a&&!await n(a))throw new k(r);let o=a??await Mr(e,r,t);if(!o)throw new k(r);let s=i?.resolveData||`all`;return wr({...o,isWebhook:o.isWebhook??!0},s)}async function a(n){let i=await r(n)??await jr(e,n,t);if(!i)throw new k(n);return i}async function o(t){let r=B.join(e,`hooks`),i=t.resolveData||`all`,a=await At({directory:r,schema:E,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,filePrefix:void 0,filter:async e=>t.runId&&e.runId!==t.runId?!1:n(e),getCreatedAt:()=>null,getId:e=>e.hookId});return{...a,data:a.data.map(e=>wr(e,i))}}return{get:i,getByToken:a,list:o}}async function Pr(e,t){await vr(e);for(let n of await mr(e,t)){if(n.hookId){let r=null,a=null;try{a=K(e,`hooks`,n.hookId,n.tag),r=await X(a,E)}catch(e){if(!lt.is(e)&&!(e instanceof SyntaxError||e instanceof i))throw e}if(r&&a&&r.runId===t){if(r.tokenRetentionUntil&&r.tokenRetentionUntil.getTime()>Date.now())continue;await Zn(e,r.token,r.runId,r.hookId),await Z(Qn(e,r.token,r.runId,r.hookId)),await Z(a)}}await hr(e,n.fileId)}}const Fr=new Le;Fr.setMaxListeners(0);function Ir(){return p(`WORKFLOW_LOCAL_RUN_STATUS_POLL_INTERVAL_MS`,100,{integer:!0,min:1})}function Lr(e){Fr.emit(`run:${e}`)}function Rr(e,t,n){return t<=0||n?.aborted?Promise.resolve():new Promise(r=>{let i=`run:${e}`,a=!1,o=()=>{a||(a=!0,clearTimeout(s),Fr.off(i,o),n?.removeEventListener(`abort`,o),r())},s=setTimeout(o,t);Fr.once(i,o),n?.addEventListener(`abort`,o,{once:!0})})}async function zr(e,t,n,r,i,a){if(_(a.status)||await Bn(e,t))throw new O(`Workflow run "${t}" is already in a terminal state`);let o=Hn(e,t,n);await Q(o,r);try{if(await Bn(e,t)||await wt(o,i)!==`linked`)throw new O(`Workflow run "${t}" is already in a terminal state`)}finally{await R.unlink(o).catch(()=>{})}}async function Br(e,t,n,r,i){H(`runId`,t);let a=i?.resolveData??`all`;switch(n.eventType){case`run_cancelled`:{await Q(zn(e,t),``),await Un(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 Y(U(e,`runs`,`${t}.json`),i,{overwrite:!0}),Lr(t),await Pr(e,t),{event:void 0,run:Sr(i,a)}}case`wait_completed`:case`hook_received`:{let i=`evnt_${er()}`,o=new Date,s={...n,runId:t,eventId:i,createdAt:o,specVersion:7},c=U(e,`events`,`${`${t}-${i}`}.json`);return n.eventType===`hook_received`?await zr(e,t,i,JSON.stringify(s,J,2),c,r):await Y(c,s),{event:m(s,a)}}default:throw Error(`Event type '${n.eventType}' not supported for legacy runs (specVersion: ${r.specVersion||`undefined`}). Please upgrade 'workflow' package.`)}}const Vr=c(`@workflow/world-local//runFileLocks`,1,()=>({byKey:new Map}));function Hr(e,t){let n=Vr.byKey.get(e),r={},i=(async()=>{n&&await n.catch(()=>void 0);try{return await t()}finally{Vr.byKey.get(e)===r.task&&Vr.byKey.delete(e)}})();return r.task=i,Vr.byKey.set(e,i),i}function Ur(e,t){let n=(async(n,r)=>{H(`runId`,n);let i=await q(e,`runs`,n,g,t);if(!i)throw new ge(n);return Sr(i,r?.resolveData??`all`)});return{get:n,waitForTerminalStatus:(async(e,t)=>{let r=Date.now()+(t?.timeoutMs??0);for(;;){let i=await n(e,t);if(_(i.status))return i;let a=r-Date.now();if(a<=0||t?.signal?.aborted)return i;await Rr(e,Math.min(a,Ir()),t?.signal)}}),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 ge)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 At({directory:B.join(e,`runs`),schema:g,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:tr(`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)=>(H(`runId`,n),Hr(n,async()=>{let a=await q(e,`runs`,n,g,t);if(!a)throw new ge(n);try{se(r,{existingKeys:Object.keys(a.attributes??{}),allowReservedAttributes:i?.allowReservedAttributes})}catch(e){throw e instanceof C,e}let o=te(a.attributes,r),s={...a,attributes:o,updatedAt:new Date};return await Y(K(e,`runs`,n,t),s,{overwrite:!0}),{attributes:o}}))}}const Wr=864e5;function Gr(){let e=Number(process.env.WORKFLOW_LOCAL_HOOK_RETENTION_LIMIT_DAYS??30);if(!Number.isFinite(e)||e<=0)throw new D(`WORKFLOW_LOCAL_HOOK_RETENTION_LIMIT_DAYS must be a positive number`,{status:400});return e*Wr}const Kr=o({eventId:u()}),qr=o({runId:u(),resumeId:u(),hookId:u(),eventId:u(),payloadDigest:u().optional()});function Jr(e,t){return e.eventType===`hook_received`&&e.correlationId===t.hookId&&(e.resumeId===void 0||e.resumeId===t.resumeId)}async function Yr(e,t,n,r){let i=await Gn(e,t,r);for(let a of i.ids){let i=await q(e,`events`,`${t}-${a}`,s,r);if(i&&i.resumeId===n.resumeId&&Jr(i,n))return i}return null}async function Xr(e,t,n){if(t.hookId&&await Rn(e,t.hookId,n))return!0;let r=await q(e,`runs`,t.runId,g,n);return r?_(r.status)?!t.tokenRetentionUntil||t.tokenRetentionUntil.getTime()<=Date.now():!1:!0}async function Zr(e){try{return await X(e,Kr)}catch(e){if(e instanceof SyntaxError||e instanceof i)return null;throw e}}function Qr(e){return ie(e.eventId)?e.eventId:null}function $r(e,t){let n=G(t).slice(e.length+1);return ie(n)?n:null}async function ei(e,t,n){return(await At({directory:B.join(e,`events`),schema:s,filePrefix:`${t}-`,filter:e=>e.eventType===`hook_created`&&e.correlationId===n,limit:1,getCreatedAt:tr(`evnt`),getId:e=>e.eventId})).data[0]?.eventId??null}async function ti(e,t,n,r,i){let a=await q(e,`events`,`${t}-${r}`,s,i);if(!a||a.eventType!==`hook_created`||a.correlationId!==n||await q(e,`hooks`,n,E,i))return;let o=Er(a);await ur(e,o.token,t,n,r,i),await fr(e,t,n,i),await Q(K(e,`hooks`,n,i),JSON.stringify(o,J,2))}async function ni(e,t,n,r,i){let a=Qn(e,t,n,r);return await Q(a,JSON.stringify({eventId:i}))?i:(await Zr(a))?.eventId??null}function ri(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 ii(e,t){let n=B.join(e,`waits`),r=await Tt(n);for(let e of r)e.startsWith(`${t}-`)&&await Z(B.join(n,`${e}.json`))}async function ai(e,t,n,r){return Hr(t,async()=>{let i=await X(K(e,`runs`,t,n),g),a={...r,attributes:i?.attributes??r.attributes};return await Y(K(e,`runs`,t,n),a,{overwrite:!0}),_(a.status)&&Lr(t),a})}function oi(e,t){let n=Gr(),r=4194304,i=new Map,a=new Map,o=new Map,c=0;function u(e){let t=i.get(e);if(!t)return;i.delete(e),c-=a.get(e)??0,a.delete(e);let n=o.get(t.runId);n?.delete(e),n?.size===0&&o.delete(t.runId)}function f(e){for(let t of o.get(e)??[])u(t)}function p(){i.clear(),a.clear(),o.clear(),c=0,x.clear()}let x=new Map;function S(e){return t?`${e}.${t}`:e}async function C(n,r){let i=`${n}-${ce(r)}`;for(let n of t?[K(e,`events`,i,t),K(e,`events`,i)]:[K(e,`events`,i)])try{return await R.stat(n),!0}catch(e){if(e.code!==`ENOENT`)throw e}return!1}async function re(n,r){let i=S(n),a=x.get(i);if(a===void 0||r?.rescan){let r=await Gn(e,n,t);a===void 0?(a=r.count>0&&!r.usesSlots?null:{published:r.maxSlot},x.set(i,a)):a!==null&&(a.published=Math.max(a.published,r.maxSlot))}if(a===null)return null;let o=Math.max(a.published+1,1,r?.atLeast??1);for(;await C(n,o);)a.published=Math.max(a.published,o),o+=1;return o}function ae(e,t){let n=ne(t);if(n===null)return;let r=x.get(S(e));r&&(r.published=Math.max(r.published,n))}async function oe(e){let t=await re(e);return t===null?`evnt_${er()}`:ce(t)}async function ue(n){let r=await re(n,{rescan:!0});return r===null?Wn(e,n,t):{eventId:ce(r),createdAt:new Date}}function T(e,t,n){if(n>r)return;for(;i.size>0&&(i.size>=1e3||c+n>r);){let e=i.keys().next().value;u(e)}i.set(e,t),a.set(e,n),c+=n;let s=o.get(t.runId)??new Set;s.add(e),o.set(t.runId,s)}function me(e,t,n){if(b(e.eventType)){f(e.runId);return}let i=Buffer.byteLength(n);if(i>r)return;let a=s.safeParse(JSON.parse(n,bt));a.success&&T(t,a.data,i)}async function ye(n){let r=n;for(let n=0;;n++){let i=K(e,`events`,`${r.runId}-${r.eventId}`,t),a=JSON.stringify(r,J,2),o=ne(r.eventId);if(o===null)return await xt(i,a),me(r,i,a),r;if(await Q(i,a))return ae(r.runId,r.eventId),me(r,i,a),r;let s=await re(r.runId,{rescan:n>0&&n%8==0,atLeast:o+1});Ie(s!==null),r={...r,eventId:ce(s)}}}let j=(t,n)=>At({directory:B.join(e,`events`),schema:s,cachedItems:i,filePrefix:`${t}-`,sortOrder:n.sortOrder??`asc`,limit:n.limit,cursor:n.cursor,getCreatedAt:tr(`evnt`),getId:e=>e.eventId,getSortKey:Qr,getSortKeyFromFileId:e=>$r(t,e)}),M=new Map,N=new Map,P={clearCache:p,async create(r,i,a){if(i.eventType===`hook_created`&&i.eventData.tokenRetentionUntil!==void 0&&i.eventData.tokenRetentionUntil.getTime()>Date.now()+n)throw new D(`Hook minimum retention cannot exceed ${n/Wr} days in the Local World.`,{status:400});if(r!=null&&r!==``&&H(`runId`,r),`correlationId`in i&&typeof i.correlationId==`string`&&H(`correlationId`,i.correlationId),v(i.eventType)&&r&&i.correlationId){let e=t?`${r}-${i.correlationId}.${t}`:`${r}-${i.correlationId}`;return ri(M,e,o)}if(y(i.eventType)&&r&&i.correlationId){let e=t?`${r}-${i.correlationId}.hook.${t}`:`${r}-${i.correlationId}.hook`;return ri(N,e,o)}return o();async function o(){let n=``,o=!1,c=null,u=new Date,f;if(i.eventType===`run_created`&&(!r||r===``))f=`wrun_${er()}`;else if(r)f=r;else throw Error(`runId is required for non-run_created events`);if(i.eventType===`run_created`&&r&&r!==``){let e=fe(f,`wrun_`);if(e)throw new D(e)}let p=i.specVersion??7,y=null;if(i.eventType!==`run_created`&&![`step_completed`,`step_retrying`].includes(i.eventType)&&(y=await q(e,`runs`,f,g,t),i.eventType===`run_started`&&!y&&`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:f,deploymentId:n.deploymentId,status:`pending`,workflowName:n.workflowName,specVersion:p,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:u,updatedAt:u};if(await Q(K(e,`runs`,f,t),JSON.stringify(r,J))){let e=await oe(f);await ye({eventType:`run_created`,runId:f,eventId:e,createdAt:u,specVersion:p,eventData:{deploymentId:n.deploymentId,workflowName:n.workflowName,input:n.input,executionContext:n.executionContext,attributes:n.attributes,allowReservedAttributes:n.allowReservedAttributes,encryptionPublicKey:n.encryptionPublicKey}}),y=r}else y=await q(e,`runs`,f,g,t)}}if(n=await oe(f),!y&&(i.eventType===`run_failed`||i.eventType===`attr_set`||i.eventType===`run_started`))throw new ge(f);if(y){if(pe(y.specVersion))throw new _e(y.specVersion,7);if(ee(y.specVersion))return Br(e,f,i,y,a)}let x=de(i),S=x&&i.eventType===`step_started`;if(y&&_(y.status)){if(i.eventType===`run_cancelled`&&y.status===`cancelled`){let e=await ye({...i,runId:f,eventId:n,createdAt:u,specVersion:p}),t=a?.resolveData??`all`;return{event:m(e,t),run:y,...y?{maxEvents:w()}:{}}}if(i.eventType===`run_started`)throw new O(`Workflow run "${f}" is already in terminal state "${y.status}"`);if(b(i.eventType))throw new A(`Cannot transition run from terminal state "${y.status}"`);if(x)throw new A(`Cannot create new entities on run in terminal state "${y.status}"`);if(i.eventType===`attr_set`)throw new A(`Cannot set attributes on run in terminal state "${y.status}"`)}let C=null;if(v(i.eventType)&&i.eventType!==`step_created`&&i.correlationId){if(C=await q(e,`steps`,`${f}-${i.correlationId}`,h,t),!C&&!S)throw new D(`Step "${i.correlationId}" not found`);if(S&&C)throw new A(`Step "${i.correlationId}" already created`);if(C){if(he(C.status))throw new A(`Cannot modify step in terminal state "${C.status}"`);if(y&&_(y.status)&&C.status!==`running`)throw new O(`Cannot modify non-running step on run in terminal state "${y.status}"`)}}if(l(i.eventType)&&i.correlationId){if(i.eventType===`hook_received`&&a?.resumeId){let n=await X(Xn(e,f,a.resumeId),qr);if(n&&n.hookId===i.correlationId&&(!a.resumePayloadDigest||!n.payloadDigest||n.payloadDigest===a.resumePayloadDigest)){let r=await q(e,`events`,`${f}-${n.eventId}`,s,t),i=r&&Jr(r,n)?r:await Yr(e,f,n,t);if(i)return{event:i}}}if(i.eventType===`hook_received`&&await Rn(e,i.correlationId,t)||!await q(e,`hooks`,i.correlationId,E,t))throw new k(i.correlationId);if(i.eventType===`hook_received`&&a?.resumeId){let r=Xn(e,f,a.resumeId),l=async r=>{if(r.hookId!==i.correlationId)throw new A(`hook_received resumeId "${a.resumeId}" already recorded for a different hook`);if(a.resumePayloadDigest&&r.payloadDigest&&r.payloadDigest!==a.resumePayloadDigest)throw new A(`hook_received resumeId "${a.resumeId}" already recorded with a different payload`);let l=await q(e,`events`,`${f}-${r.eventId}`,s,t);if(l&&Jr(l,r))return{event:l};let u=await Yr(e,f,r,t);return u?{event:u}:(c=r.eventId,l||(n=r.eventId,o=!0),null)},u=await X(r,qr);if(u){let e=await l(u);if(e)return e}else if(o=!ie(n),c=n,!await Q(r,JSON.stringify({runId:f,resumeId:a.resumeId,hookId:i.correlationId,eventId:n,...a.resumePayloadDigest?{payloadDigest:a.resumePayloadDigest}:{}}))){c=null;let e=await X(r,qr);if(e){let t=await l(e);if(t)return t}}}}let T={...i,runId:f,eventId:n,createdAt:u,specVersion:p,...i.eventType===`hook_received`&&a?.resumeId?{resumeId:a.resumeId}:{}};if(i.eventType===`run_started`&&`eventData`in T&&delete T.eventData,S&&T.eventType===`step_started`&&T.eventData){let{input:e,...t}=T.eventData;T={...T,eventData:t}}let M,N,P,F,be=!1,xe;if(b(i.eventType)&&y){await Q(zn(e,f,t),``),await Un(e,f,t);let r=await ue(f);n=r.eventId,T={...T,eventId:n,createdAt:r.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}),M={runId:f,deploymentId:n.deploymentId,status:`pending`,workflowName:n.workflowName,specVersion:p,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:u,updatedAt:u},!await Q(K(e,`runs`,f,t),JSON.stringify(M,J,2)))throw new A(`Workflow run "${f}" already exists`)}else if(i.eventType===`run_started`){if(y){if(y.status===`running`){if(a?.skipPreload)return{run:y,maxEvents:w()};let e=await j(f,{limit:w()});return{run:y,events:e.data,cursor:e.cursor,hasMore:e.hasMore,maxEvents:w()}}M=await ai(e,f,t,{runId:y.runId,deploymentId:y.deploymentId,workflowName:y.workflowName,specVersion:y.specVersion,executionContext:y.executionContext,input:y.input,createdAt:y.createdAt,expiredAt:y.expiredAt,status:`running`,output:void 0,error:void 0,completedAt:void 0,startedAt:y.startedAt??u,updatedAt:u,attributes:y.attributes,encryptionPublicKey:y.encryptionPublicKey})}}else if(i.eventType===`run_completed`&&`eventData`in i){let n=i.eventData;y&&(M=await ai(e,f,t,{runId:y.runId,deploymentId:y.deploymentId,workflowName:y.workflowName,specVersion:y.specVersion,executionContext:y.executionContext,input:y.input,createdAt:y.createdAt,expiredAt:y.expiredAt,startedAt:y.startedAt,status:`completed`,output:n.output,error:void 0,completedAt:u,updatedAt:u,attributes:y.attributes,encryptionPublicKey:y.encryptionPublicKey}),await Promise.all([Pr(e,f),ii(e,f)]))}else if(i.eventType===`run_failed`&&`eventData`in i){let n=i.eventData;y&&(M=await ai(e,f,t,{runId:y.runId,deploymentId:y.deploymentId,workflowName:y.workflowName,specVersion:y.specVersion,executionContext:y.executionContext,input:y.input,createdAt:y.createdAt,expiredAt:y.expiredAt,startedAt:y.startedAt,status:`failed`,output:void 0,error:n.error,errorCode:n.errorCode,completedAt:u,updatedAt:u,attributes:y.attributes,encryptionPublicKey:y.encryptionPublicKey}),await Promise.all([Pr(e,f),ii(e,f)]))}else if(i.eventType===`run_cancelled`)y&&(M=await ai(e,f,t,{runId:y.runId,deploymentId:y.deploymentId,workflowName:y.workflowName,specVersion:y.specVersion,executionContext:y.executionContext,input:y.input,createdAt:y.createdAt,expiredAt:y.expiredAt,startedAt:y.startedAt,status:`cancelled`,output:void 0,error:void 0,completedAt:u,updatedAt:u,attributes:y.attributes,encryptionPublicKey:y.encryptionPublicKey}),await Promise.all([Pr(e,f),ii(e,f)]));else if(i.eventType===`attr_set`&&y)M=await Hr(f,async()=>{let n=await X(K(e,`runs`,f,t),g);if(!n)throw new ge(f);if(se(i.eventData.changes,{existingKeys:Object.keys(n.attributes),allowReservedAttributes:i.eventData.allowReservedAttributes===!0}),i.correlationId&&i.eventData.writer.type===`workflow`&&!await Q(U(e,`.locks`,`attributes`,t?`${f}-${i.correlationId}.created.${t}`:`${f}-${i.correlationId}.created`),``))throw new A(`Attribute event "${i.correlationId}" already exists`);let r={...n,attributes:te(n.attributes,i.eventData.changes),updatedAt:u};return await Y(K(e,`runs`,f,t),r,{overwrite:!0}),r});else if(i.eventType===`step_created`&&`eventData`in i){if(!await Q(U(e,`.locks`,`steps`,t?`${f}-${i.correlationId}.created.${t}`:`${f}-${i.correlationId}.created`),``))throw new A(`Step "${i.correlationId}" already created`);let n=i.eventData;N={runId:f,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:u,updatedAt:u,specVersion:p},await Y(K(e,`steps`,`${f}-${i.correlationId}`,t),N)}else if(i.eventType===`step_started`){if(!C&&S){let n=i.eventData;if(await Q(U(e,`.locks`,`steps`,t?`${f}-${i.correlationId}.created.${t}`:`${f}-${i.correlationId}.created`),``)){let r={runId:f,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:u,updatedAt:u,specVersion:p};await Y(K(e,`steps`,`${f}-${i.correlationId}`,t),r);let a=await oe(f);await ye({eventType:`step_created`,runId:f,eventId:a,createdAt:u,specVersion:p,correlationId:i.correlationId,eventData:{stepName:n.stepName,input:n.input}}),C=r,be=!0}else throw new A(`Step "${i.correlationId}" already created`)}if(C){if(C.retryAfter&&C.retryAfter.getTime()>Date.now())throw new ve(`Cannot start step "${i.correlationId}": retryAfter timestamp has not been reached yet`,{retryAfter:Math.ceil((C.retryAfter.getTime()-Date.now())/1e3)});let n=`${f}-${i.correlationId}`,r=await q(e,`steps`,n,h,t);if(r&&he(r.status))throw new A(`Cannot modify step in terminal state "${r.status}"`);N={...C,status:`running`,startedAt:C.startedAt??u,attempt:C.attempt+1,retryAfter:void 0,updatedAt:u},await Y(K(e,`steps`,n,t),N,{overwrite:!0})}}else if(i.eventType===`step_completed`&&`eventData`in i){let n=i.eventData;if(C){let r=`${f}-${i.correlationId}`;if(!await Q(U(e,`.locks`,`steps`,t?`${r}.terminal.${t}`:`${r}.terminal`),``))throw new A(`Cannot modify step in terminal state`);N={...C,status:`completed`,output:n.result,completedAt:u,updatedAt:u},await Y(K(e,`steps`,r,t),N,{overwrite:!0})}}else if(i.eventType===`step_failed`&&`eventData`in i){let n=i.eventData;if(C){let r=`${f}-${i.correlationId}`;if(!await Q(U(e,`.locks`,`steps`,t?`${r}.terminal.${t}`:`${r}.terminal`),``))throw new A(`Cannot modify step in terminal state`);N={...C,status:`failed`,error:n.error,completedAt:u,updatedAt:u},await Y(K(e,`steps`,r,t),N,{overwrite:!0})}}else if(i.eventType===`step_retrying`&&`eventData`in i){let n=i.eventData;if(C){let r=`${f}-${i.correlationId}`;N={...C,status:`pending`,error:n.error,retryAfter:n.retryAfter,updatedAt:u},await Y(K(e,`steps`,r,t),N,{overwrite:!0})}}else if(i.eventType===`hook_created`&&`eventData`in i){let r=i.eventData,s=Kn(e,r.token),c=JSON.stringify({token:r.token,hookId:i.correlationId,runId:f,eventId:n,tokenRetentionUntil:r.tokenRetentionUntil}),l=await Yn(e,r.token,async n=>{let a=await Jn(s);return a||=(n.throwIfAborted(),await Z(s),await jr(e,r.token,t),await Jn(s)),a?a.runId===f&&a.hookId===i.correlationId?{status:`owned`,claim:a}:await Xr(e,a,t)?(n.throwIfAborted(),await Z(s),a.hookId&&(await Z(K(e,`hooks`,a.hookId,t)),await Z(Qn(e,r.token,a.runId,a.hookId)),await pr(e,a.runId,a.hookId,t)),n.throwIfAborted(),Ie(await Q(s,c)),{status:`claimed`}):{status:`conflict`,claim:a}:(n.throwIfAborted(),Ie(await Q(s,c)),{status:`claimed`})});if(l.status===`owned`){let a=l.claim,s;if(a.eventId)s=a.eventId;else{let a=await ei(e,f,i.correlationId);if(a!==null)throw await ti(e,f,i.correlationId,a,t),new A(`Hook "${i.correlationId}" already created`);let o=await ni(e,r.token,f,i.correlationId,n);if(o===null)throw new A(`Hook "${i.correlationId}" already created`);s=o}n=s,o=!0;let c=le(n.replace(/^evnt_/,``))??u;T={...i,eventData:{...i.eventData,tokenRetentionUntil:a.tokenRetentionUntil},runId:f,eventId:n,createdAt:c,specVersion:p}}if(l.status===`conflict`){let e=l.claim,t=await ye({eventType:`hook_conflict`,correlationId:i.correlationId,eventData:{token:r.token,conflictingRunId:e.runId},runId:f,eventId:n,createdAt:u,specVersion:p}),o=a?.resolveData??`all`,s=typeof a?.sinceCursor==`string`?await j(f,{sortOrder:`asc`,cursor:a.sinceCursor}):void 0,c={event:m(t,o),run:M,step:N,hook:void 0};return s?{...c,events:o===`none`?s.data.map(e=>m(e,o)):s.data,cursor:s.cursor,hasMore:s.hasMore}:c}let d=T.eventData;P={runId:f,hookId:i.correlationId,token:d.token,metadata:d.metadata,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:T.createdAt,specVersion:p,isWebhook:d.isWebhook??!1,isSystem:d.isSystem??!1,tokenRetentionUntil:d.tokenRetentionUntil},xe=l.status===`owned`?{overwrite:!0}:void 0,await ur(e,r.token,f,i.correlationId,n,t)}else if(i.eventType===`hook_disposed`){if(!await Q(Ln(e,i.correlationId,t),``))throw new A(`Hook "${i.correlationId}" already disposed`);let n=K(e,`hooks`,i.correlationId,t),r=await q(e,`hooks`,i.correlationId,E,t);r&&(await Zn(e,r.token,r.runId,r.hookId),await Z(Qn(e,r.token,r.runId,r.hookId))),await Z(n),await pr(e,f,i.correlationId,t)}else if(i.eventType===`wait_created`&&`eventData`in i){let n=`${f}-${i.correlationId}`;if(!await Q(U(e,`.locks`,`waits`,t?`${n}.created.${t}`:`${n}.created`),``))throw new A(`Wait "${i.correlationId}" already exists`);let r=i.eventData;F={waitId:n,runId:f,status:`waiting`,resumeAt:r.resumeAt,completedAt:void 0,createdAt:u,updatedAt:u,specVersion:p},await Y(K(e,`waits`,n,t),F)}else if(i.eventType===`wait_completed`){let n=`${f}-${i.correlationId}`,r=U(e,`.locks`,`waits`,t?`${n}.completed.${t}`:`${n}.completed`);if(!await Q(r,``))throw new A(`Wait "${i.correlationId}" already completed`);let a=await q(e,`waits`,n,d,t);if(!a)throw await R.unlink(r).catch(()=>{}),new D(`Wait "${i.correlationId}" not found`);F={...a,status:`completed`,completedAt:u,updatedAt:u},await Y(K(e,`waits`,n,t),F,{overwrite:!0})}if(i.eventType===`hook_received`&&i.correlationId&&await Rn(e,i.correlationId,t))throw new k(i.correlationId);let Se=K(e,`events`,`${f}-${n}`,t),I=JSON.stringify(T,J,2),Ce=async r=>{let i=ne(n);if(o||i===null)return!1;let a=await re(f,{rescan:r>0&&r%8==0,atLeast:i+1});return a!==null&&(n=ce(a),T={...T,eventId:n},Se=K(e,`events`,`${f}-${n}`,t),I=JSON.stringify(T,J,2),!0)},we=!1;for(let r=0;;r++){if(i.eventType===`hook_received`){let r=await Bn(e,f,t),i=r?null:await q(e,`runs`,f,g,t);if(r||i&&_(i.status))throw new O(`Workflow run "${f}" is already in a terminal state`);let a=Hn(e,f,`${n}.${er()}`,t);if(!await Q(a,I))throw new D(`Failed to stage event "${n}" for run "${f}": staging path already exists`);try{if(await Bn(e,f,t))throw new O(`Workflow run "${f}" is already in a terminal state`);let n=await wt(a,Se);if(n===`missing`)throw new O(`Workflow run "${f}" is already in a terminal state`);we=n===`linked`}finally{await Z(a).catch(()=>{})}}else we=await Q(Se,I);if(we){ae(f,n);break}if(i.eventType===`hook_received`&&a?.resumeId){let r=await q(e,`events`,`${f}-${n}`,s,t);if(r&&Jr(r,{runId:f,resumeId:a.resumeId,hookId:i.correlationId,eventId:n}))return{event:r}}if(!await Ce(r))break}if(!we)throw i.eventType===`hook_created`&&i.correlationId&&await ti(e,f,i.correlationId,n,t),new A(`Event "${n}" already exists for run "${f}"`);me(T,Se,I),i.eventType===`hook_received`&&a?.resumeId&&c!==null&&c!==n&&await xt(Xn(e,f,a.resumeId),JSON.stringify({runId:f,resumeId:a.resumeId,hookId:i.correlationId,eventId:n,...a.resumePayloadDigest?{payloadDigest:a.resumePayloadDigest}:{}}),{overwrite:!0}),P&&i.eventType===`hook_created`&&(await fr(e,P.runId,P.hookId,t),await Y(K(e,`hooks`,P.hookId,t),P,xe));let L=a?.resolveData??`all`,Te=m(T,L),z;if(i.eventType===`run_started`&&M&&!a?.skipPreload&&(z=await j(f,{limit:w()})),typeof a?.sinceCursor==`string`){let e=await j(f,{sortOrder:`asc`,cursor:a.sinceCursor});z=L===`none`?{...e,data:e.data.map(e=>m(e,L))}:e}let Ee={event:Te,run:M,step:N,hook:P,wait:F,...be?{stepCreated:!0}:{},...M?{maxEvents:w()}:{}};return z?{...Ee,events:z.data,cursor:z.cursor,hasMore:z.hasMore}:Ee}},async get(n,r,i){H(`runId`,n),H(`eventId`,r);let a=await q(e,`events`,`${n}-${r}`,s,t);if(!a)throw Error(`Event ${r} in run ${n} not found`);let o=i?.resolveData??`all`;return m(a,o)},async list(e){let{runId:t}=e;H(`runId`,t);let n=e.resolveData??`all`,r=await j(t,{...e.pagination,limit:e.pagination?.limit??w()});return n===`none`?{...r,data:r.data.map(e=>m(e,n))}:r},async listByCorrelationId(t){let n=t.correlationId;H(`correlationId`,n),H(`runId`,t.runId);let r=t.resolveData??`all`,a=await At({directory:B.join(e,`events`),schema:s,cachedItems:i,filePrefix:`${t.runId}-`,filter:e=>e.correlationId===n,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:tr(`evnt`),getId:e=>e.eventId,getSortKey:Qr,getSortKeyFromFileId:e=>$r(t.runId,e)});return r===`none`?{...a,data:a.data.map(e=>m(e,r))}:a}};async function F(e,t,n){if(!e.event)return e;let r=ne(e.event.eventId);if(r===null||t<1||r<=t+1)return e;let i=r-t-1,a=await P.list({runId:e.event.runId,pagination:{cursor:`${Dt}${ce(t)}`,limit:i,sortOrder:`asc`},resolveData:n}),o=e.event.eventId,s=a.data.filter(e=>e.eventId<o);return{...e,events:s,cursor:null,hasMore:s.length<r-t-1}}let be=(async(e,t,n)=>{if(n?.eventCount===void 0)return P.create(e,t,n);let r=n.resolveData??`all`,i=await P.create(e,t,n);return typeof n.sinceCursor==`string`?i:F(i,n.eventCount,r)});return{...P,create:be}}function si(e,t){return{get:(async(n,r,i)=>{H(`runId`,n),H(`stepId`,r);let a=await q(e,`steps`,`${n}-${r}`,h,t);if(!a)throw Error(`Step ${r} in run ${n} not found`);return Cr(a,i?.resolveData??`all`)}),list:(async t=>{H(`runId`,t.runId);let n=t.resolveData??`all`,r=await At({directory:B.join(e,`steps`),schema:h,filePrefix:`${t.runId}-`,sortOrder:t.pagination?.sortOrder??`desc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:tr(`step`),getId:e=>e.stepId});return n===`none`?{...r,data:r.data.map(e=>({...e,input:void 0,output:void 0}))}:r})}}function ci(e,t){let n=Ur(e,t),r=si(e,t),i=oi(e,t),a=Nr(e,t);return{runs:pn(`world.runs`,n),steps:pn(`world.steps`,r),events:pn(`world.events`,i),hooks:pn(`world.hooks`,a),clearCache:()=>i.clearCache()}}const li=c(`@workflow/world-local//streamerMonotonicUlid`,1,()=>({next:ue(()=>Math.random())})),ui=e=>li.next(e),di=o({streams:f(u())});function fi(e){return e===1}function pi(e){let t=Buffer.from([+!!e.eof]);return Buffer.concat([t,e.chunk])}function mi(e){return fi(e[0])}function hi(e){return{eof:mi(e),chunk:Buffer.from(e.subarray(1))}}async function gi(e){try{return await R.readdir(e)}catch(e){if(e.code===`ENOENT`)return[];throw e}}function _i(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 vi(e,t){return H(`streamName`,t),B.join(e,t)}async function yi(e,t,n){let r=vi(e,t),i=await gi(r),a=new Map;return _i(a,i,`.json`),_i(a,i,`.bin`,`.bin`,n?e=>!e.endsWith(`.${n}`):void 0),n&&_i(a,i,`.${n}.bin`),{files:[...a.keys()].sort(),extMap:a,dir:r}}function bi(e,t){let n=t?`.${t}`:``,r=new Le,i=new Set;async function a(n,r){H(`runId`,n),H(`streamName`,r);let a=`${n}:${r}`;if(i.has(a))return;let o=K(e,`streams/runs`,n,t),s=(await q(e,`streams/runs`,n,di,t))?.streams??[];s.includes(r)||(s.push(r),await Y(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_${ui()}`;await a(await t,i);let l=o(s),u=pi({chunk:l,eof:!1});await xt(B.join(vi(B.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_${ui()}`);await a(await t,i);let l=s.map(e=>o(e)).map(async(t,r)=>{let a=c[r],o=pi({chunk:t,eof:!1});return await xt(B.join(vi(B.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_${ui()}`;await a(await t,i),await xt(B.join(vi(B.join(e,`streams`,`chunks`),i),`${o}${n}.bin`),pi({chunk:Buffer.from([]),eof:!0})),r.emit(`close:${i}`,{streamName:i})},async list(n){return H(`runId`,n),(await q(e,`streams/runs`,n,di,t))?.streams??[]},async getChunks(n,r,i){let a=i?.limit??100,{files:o,extMap:s,dir:c}=await yi(B.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=B.join(c,`${e}${t}`);if(f<l){if(fi(await Ct(n))){u=!0;break}f++;continue}if(d.length>=a){fi(await Ct(n))?u=!0:f++;break}let r=hi(await St(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 yi(B.join(e,`streams`,`chunks`),r,t),s=!1,c=0;for(let e of i){let t=a.get(e)??`.bin`;if(fi(await Ct(B.join(o,`${e}${t}`)))){s=!0;break}c++}return{tailIndex:c-1,done:s}},async get(n,i,a=0){let o=B.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 yi(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`;fi(await Ct(B.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=hi(await St(B.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 yi(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=hi(await St(B.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 xi(e){let t=e?Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0)):{},n={...it.value,...t};He(n.dataDir);let r=n.tag,i=wn(n),{clearCache:a,...o}=ci(n.dataDir,r),s=at(n);return{specVersion:oe(),capabilities:{hookRetention:{active:!0},hookResumeDedup:!0},...i,...o,...pn(`world.streams`,{...bi(n.dataDir,r),...n.streamFlushIntervalMs!==void 0&&{streamFlushIntervalMs:n.streamFlushIntervalMs}}),async start(){if(await Gt(n.dataDir),!s)return;let e=r?e=>pt(e,r):mt,t={...o.runs,list:(t=>o.runs.list({...t,fileIdFilter:e}))};await x(t,i.queue,`world-local`)},async close(){a(),await i.close()},async clear(){if(a(),r){let e=n.dataDir,t=B.join(e,`hooks`),i=await ht(t,r),{HookSchema:a}=await import(`../../_chunks/workflow/dist-veFIAdWV.js`).then(e=>e.t);await Promise.all(i.map(async n=>{let r=await X(B.join(t,n),a);r?.token&&(await Z(B.join(t,`tokens`,`${In(r.token)}.json`)),await Z(Qn(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=B.join(e,t),i=await ht(n,r);await Promise.all(i.map(e=>Z(B.join(n,e))))}));for(let t of[`token-index`,`id-index`]){let n=B.join(e,`hooks`,t),i;try{i=await L.readdir(n,{withFileTypes:!0})}catch{i=[]}await Promise.all(i.filter(e=>e.isDirectory()).map(async e=>{let t=B.join(n,e.name),i=await ht(t,r);await Promise.all(i.map(e=>Z(B.join(t,e))))}))}await L.rm(B.join(e,`.locks`),{recursive:!0,force:!0}).catch(()=>{});let o=B.join(e,`streams`,`chunks`),s;try{s=await L.readdir(o,{withFileTypes:!0})}catch{s=[]}await Promise.all(s.filter(e=>e.isDirectory()).map(async e=>{let t=B.join(o,e.name),n=await gt(t,r,`.bin`);await Promise.all(n.map(e=>L.unlink(B.join(t,e)).catch(()=>{})))})),dt()}else dt(),_r(),await Ae(n.dataDir,{recursive:!0,force:!0}),await Gt(n.dataDir)}}}export{Ft as DataDirAccessError,It as DataDirVersionError,Re as UnwritableDataDirError,xi as createWorld,Vt as ensureDataDir,Gt as initDataDir,Lt as parseVersion};
|
|
@@ -31,8 +31,8 @@ declare const EXTENSION_CAPABILITY_CONTRACTS: {
|
|
|
31
31
|
};
|
|
32
32
|
};
|
|
33
33
|
readonly dynamicTool: {
|
|
34
|
-
readonly current:
|
|
35
|
-
readonly supported: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 28, 29, 30, 31];
|
|
34
|
+
readonly current: 32;
|
|
35
|
+
readonly supported: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 28, 29, 30, 31, 32];
|
|
36
36
|
readonly dropped: {
|
|
37
37
|
readonly 21: "Message and reasoning append events now expose deltas instead of cumulative snapshots.";
|
|
38
38
|
readonly 23: "TaskExec.delegated was removed; migrate to workflow-backed background tools";
|