eve 0.22.4 → 0.22.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.
Files changed (100) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -0
  3. package/dist/src/cli/commands/agent-instructions.d.ts +15 -0
  4. package/dist/src/cli/commands/agent-instructions.js +3 -1
  5. package/dist/src/cli/commands/agent-prompt/scaffold.md +3 -0
  6. package/dist/src/cli/commands/extension-build.d.ts +9 -0
  7. package/dist/src/cli/commands/extension-build.js +1 -0
  8. package/dist/src/cli/commands/extension-init.d.ts +25 -0
  9. package/dist/src/cli/commands/extension-init.js +1 -0
  10. package/dist/src/cli/commands/info.js +1 -1
  11. package/dist/src/cli/commands/init-git.js +1 -1
  12. package/dist/src/cli/commands/init-repl.js +1 -1
  13. package/dist/src/cli/commands/init.d.ts +2 -0
  14. package/dist/src/cli/commands/init.js +1 -1
  15. package/dist/src/cli/run.js +1 -1
  16. package/dist/src/compiled/.vendor-stamp.json +4 -4
  17. package/dist/src/compiled/@workflow/core/global.d.ts +20 -0
  18. package/dist/src/compiled/@workflow/core/index.js +2 -2
  19. package/dist/src/compiled/@workflow/core/runtime/constants.d.ts +54 -0
  20. package/dist/src/compiled/@workflow/core/runtime/helpers.d.ts +11 -3
  21. package/dist/src/compiled/@workflow/core/runtime/run.d.ts +6 -2
  22. package/dist/src/compiled/@workflow/core/runtime/runs.d.ts +36 -2
  23. package/dist/src/compiled/@workflow/core/runtime/start.d.ts +28 -0
  24. package/dist/src/compiled/@workflow/core/runtime/step-executor.d.ts +23 -0
  25. package/dist/src/compiled/@workflow/core/runtime/step-latency.d.ts +131 -0
  26. package/dist/src/compiled/@workflow/core/runtime/step-ownership.d.ts +72 -0
  27. package/dist/src/compiled/@workflow/core/runtime/step-single-flight.d.ts +12 -0
  28. package/dist/src/compiled/@workflow/core/runtime/suspension-handler.d.ts +7 -0
  29. package/dist/src/compiled/@workflow/core/runtime.d.ts +1 -1
  30. package/dist/src/compiled/@workflow/core/runtime.js +3 -3
  31. package/dist/src/compiled/@workflow/core/serialization-format.d.ts +1 -0
  32. package/dist/src/compiled/@workflow/core/telemetry/semantic-conventions.d.ts +40 -0
  33. package/dist/src/compiled/@workflow/core/telemetry.d.ts +8 -0
  34. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  35. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  36. package/dist/src/compiled/@workflow/world/analytics.d.ts +4 -4
  37. package/dist/src/compiled/@workflow/world/events.d.ts +142 -21
  38. package/dist/src/compiled/@workflow/world/hooks.d.ts +1 -24
  39. package/dist/src/compiled/@workflow/world/index.d.ts +3 -2
  40. package/dist/src/compiled/@workflow/world/queue.d.ts +10 -0
  41. package/dist/src/compiled/@workflow/world/ulid.d.ts +9 -0
  42. package/dist/src/compiled/@workflow/world-local/index.js +4 -4
  43. package/dist/src/compiled/@workflow/world-vercel/index.js +16 -16
  44. package/dist/src/compiled/_chunks/workflow/attribute-changes-ubiPfqvY.js +20 -0
  45. package/dist/src/compiled/_chunks/workflow/{dist-DJU_7R9s.js → dist-DnBjuNAZ.js} +1 -1
  46. package/dist/src/compiled/_chunks/workflow/{functions-CnVBREsg.js → functions-BCMO8vbf.js} +1 -1
  47. package/dist/src/compiled/_chunks/workflow/resume-hook-BkVkWg2r.js +1 -0
  48. package/dist/src/compiled/_chunks/workflow/run-B3N1kN9q.js +1 -0
  49. package/dist/src/compiled/_chunks/workflow/{sleep-phozDCW8.js → sleep-C2Bn-UUg.js} +1 -1
  50. package/dist/src/harness/emission.d.ts +2 -4
  51. package/dist/src/harness/emission.js +1 -1
  52. package/dist/src/harness/inline-tool-authorization.d.ts +3 -0
  53. package/dist/src/harness/inline-tool-authorization.js +1 -0
  54. package/dist/src/harness/interruptible-stream.d.ts +5 -0
  55. package/dist/src/harness/interruptible-stream.js +1 -0
  56. package/dist/src/harness/model-call-error.js +1 -1
  57. package/dist/src/harness/ordered-stream-emitter.d.ts +17 -0
  58. package/dist/src/harness/ordered-stream-emitter.js +1 -0
  59. package/dist/src/harness/stream-actions.d.ts +1 -0
  60. package/dist/src/harness/stream-actions.js +1 -1
  61. package/dist/src/harness/subagent-depth.d.ts +1 -1
  62. package/dist/src/harness/subagent-depth.js +1 -1
  63. package/dist/src/harness/tool-loop.js +1 -1
  64. package/dist/src/internal/application/optional-package-install.js +2 -2
  65. package/dist/src/internal/application/package.js +1 -1
  66. package/dist/src/internal/authored-module-loader.d.ts +1 -1
  67. package/dist/src/internal/nitro/host/build-application.js +1 -1
  68. package/dist/src/public/definitions/extension.d.ts +4 -4
  69. package/dist/src/public/models/openai/chatgpt/auth.d.ts +69 -0
  70. package/dist/src/public/models/openai/chatgpt/auth.js +1 -0
  71. package/dist/src/public/models/openai/chatgpt/model.d.ts +8 -0
  72. package/dist/src/public/models/openai/chatgpt/model.js +1 -0
  73. package/dist/src/public/models/openai/chatgpt/transport.d.ts +24 -0
  74. package/dist/src/public/models/openai/chatgpt/transport.js +1 -0
  75. package/dist/src/public/models/openai/chatgpt/unsigned-jwt.d.ts +5 -0
  76. package/dist/src/public/models/openai/chatgpt/unsigned-jwt.js +1 -0
  77. package/dist/src/public/models/openai/index.d.ts +30 -0
  78. package/dist/src/public/models/openai/index.js +1 -0
  79. package/dist/src/public/next/server.js +2 -2
  80. package/dist/src/public/nuxt/dev-server.js +1 -1
  81. package/dist/src/public/sveltekit/dev-server.js +1 -1
  82. package/dist/src/setup/scaffold/create/extension.d.ts +30 -0
  83. package/dist/src/setup/scaffold/create/extension.js +34 -0
  84. package/dist/src/setup/scaffold/create/project.d.ts +2 -0
  85. package/dist/src/setup/scaffold/create/project.js +2 -2
  86. package/dist/src/setup/scaffold/index.d.ts +1 -0
  87. package/dist/src/setup/scaffold/index.js +1 -1
  88. package/dist/src/shared/agent-definition.d.ts +1 -1
  89. package/docs/agent-config.md +1 -1
  90. package/docs/channels/slack.mdx +6 -0
  91. package/docs/concepts/sessions-runs-and-streaming.md +1 -1
  92. package/docs/extensions.md +21 -13
  93. package/docs/guides/client/streaming.mdx +1 -1
  94. package/docs/reference/cli.md +56 -22
  95. package/docs/reference/typescript-api.md +17 -0
  96. package/docs/subagents.mdx +1 -1
  97. package/package.json +10 -5
  98. package/dist/src/compiled/_chunks/workflow/attribute-changes-BnKD8Y3m.js +0 -20
  99. package/dist/src/compiled/_chunks/workflow/resume-hook-DjPY9VGg.js +0 -1
  100. package/dist/src/compiled/_chunks/workflow/run-BSANnUPR.js +0 -1
@@ -1,37 +1,35 @@
1
1
  import { z } from '#compiled/zod/index.js';
2
2
  import type { PaginationOptions, ResolveData } from './shared.js';
3
- /**
4
- * Fields within eventData that hold ref/payload data per event type.
5
- * When resolveData is 'none', only these fields are stripped — all other
6
- * metadata (stepName, workflowName, etc.) is preserved.
7
- */
8
- export declare const EVENT_DATA_REF_FIELDS: Record<string, string[]>;
9
- /**
10
- * Strip ref/payload fields from eventData based on resolveData setting.
11
- * When resolveData is 'none', removes only large data fields (refs) from
12
- * eventData while preserving metadata like stepName, workflowName, etc.
13
- */
14
- export declare function stripEventDataRefs(event: Event, resolveData: ResolveData): Event;
15
3
  export declare const EventTypeSchema: z.ZodEnum<{
16
4
  run_created: "run_created";
5
+ run_started: "run_started";
17
6
  run_completed: "run_completed";
18
7
  run_failed: "run_failed";
8
+ run_cancelled: "run_cancelled";
9
+ attr_set: "attr_set";
19
10
  step_created: "step_created";
20
11
  step_completed: "step_completed";
21
12
  step_failed: "step_failed";
22
13
  step_retrying: "step_retrying";
14
+ step_started: "step_started";
23
15
  hook_created: "hook_created";
24
16
  hook_received: "hook_received";
25
- run_started: "run_started";
26
- run_cancelled: "run_cancelled";
27
- attr_set: "attr_set";
28
- step_started: "step_started";
29
17
  hook_disposed: "hook_disposed";
30
18
  hook_conflict: "hook_conflict";
31
19
  wait_created: "wait_created";
32
20
  wait_completed: "wait_completed";
33
21
  }>;
34
22
  export type EventType = z.infer<typeof EventTypeSchema>;
23
+ declare const RunEventTypeSchema: z.ZodEnum<{
24
+ run_created: "run_created";
25
+ run_started: "run_started";
26
+ run_completed: "run_completed";
27
+ run_failed: "run_failed";
28
+ run_cancelled: "run_cancelled";
29
+ }>;
30
+ export type RunEventType = z.infer<typeof RunEventTypeSchema>;
31
+ export declare const RUN_EVENT_TYPES: ("run_created" | "run_started" | "run_completed" | "run_failed" | "run_cancelled")[];
32
+ export declare function isRunEventType(eventType: string): eventType is RunEventType;
35
33
  export declare const TerminalRunEventTypeSchema: z.ZodEnum<{
36
34
  run_completed: "run_completed";
37
35
  run_failed: "run_failed";
@@ -40,21 +38,101 @@ export declare const TerminalRunEventTypeSchema: z.ZodEnum<{
40
38
  export type TerminalRunEventType = z.infer<typeof TerminalRunEventTypeSchema>;
41
39
  export declare const TERMINAL_RUN_EVENT_TYPES: ("run_completed" | "run_failed" | "run_cancelled")[];
42
40
  export declare function isTerminalRunEventType(eventType: string): eventType is TerminalRunEventType;
41
+ declare const StepEventTypeSchema: z.ZodEnum<{
42
+ step_created: "step_created";
43
+ step_completed: "step_completed";
44
+ step_failed: "step_failed";
45
+ step_retrying: "step_retrying";
46
+ step_started: "step_started";
47
+ }>;
48
+ export type StepEventType = z.infer<typeof StepEventTypeSchema>;
49
+ export declare const STEP_EVENT_TYPES: ("step_created" | "step_completed" | "step_failed" | "step_retrying" | "step_started")[];
50
+ export declare function isStepEventType(eventType: string): eventType is StepEventType;
51
+ declare const TerminalStepEventTypeSchema: z.ZodEnum<{
52
+ step_completed: "step_completed";
53
+ step_failed: "step_failed";
54
+ }>;
55
+ export type TerminalStepEventType = z.infer<typeof TerminalStepEventTypeSchema>;
56
+ export declare const TERMINAL_STEP_EVENT_TYPES: ("step_completed" | "step_failed")[];
57
+ export declare function isTerminalStepEventType(eventType: string): eventType is TerminalStepEventType;
58
+ declare const HookLifecycleEventTypeSchema: z.ZodEnum<{
59
+ hook_created: "hook_created";
60
+ hook_received: "hook_received";
61
+ hook_disposed: "hook_disposed";
62
+ }>;
63
+ export type HookLifecycleEventType = z.infer<typeof HookLifecycleEventTypeSchema>;
64
+ export declare const HOOK_LIFECYCLE_EVENT_TYPES: ("hook_created" | "hook_received" | "hook_disposed")[];
65
+ export declare function isHookLifecycleEventType(eventType: string): eventType is HookLifecycleEventType;
66
+ declare const HookEventRequiringExistenceTypeSchema: z.ZodEnum<{
67
+ hook_received: "hook_received";
68
+ hook_disposed: "hook_disposed";
69
+ }>;
70
+ export type HookEventRequiringExistenceType = z.infer<typeof HookEventRequiringExistenceTypeSchema>;
71
+ export declare const HOOK_EVENTS_REQUIRING_EXISTENCE: ("hook_received" | "hook_disposed")[];
72
+ export declare function isHookEventRequiringExistence(eventType: string): eventType is HookEventRequiringExistenceType;
73
+ declare const WaitEventTypeSchema: z.ZodEnum<{
74
+ wait_created: "wait_created";
75
+ wait_completed: "wait_completed";
76
+ }>;
77
+ export type WaitEventType = z.infer<typeof WaitEventTypeSchema>;
78
+ export declare const WAIT_EVENT_TYPES: ("wait_created" | "wait_completed")[];
79
+ export declare function isWaitEventType(eventType: string): eventType is WaitEventType;
80
+ declare const ChildEntityCreationEventTypeSchema: z.ZodEnum<{
81
+ step_created: "step_created";
82
+ hook_created: "hook_created";
83
+ wait_created: "wait_created";
84
+ }>;
85
+ export type ChildEntityCreationEventType = z.infer<typeof ChildEntityCreationEventTypeSchema>;
86
+ export declare const CHILD_ENTITY_CREATION_EVENT_TYPES: ("step_created" | "hook_created" | "wait_created")[];
87
+ export declare function isChildEntityCreationEventType(eventType: string): eventType is ChildEntityCreationEventType;
88
+ /**
89
+ * Field within eventData that carries the opaque user payload for event types
90
+ * that have one. V4 worlds split this field into the wire body while keeping
91
+ * the remaining eventData fields in metadata.
92
+ */
93
+ export declare const EVENT_DATA_PAYLOAD_FIELD_BY_EVENT_TYPE: {
94
+ readonly run_created: "input";
95
+ readonly run_started: "input";
96
+ readonly run_completed: "output";
97
+ readonly run_failed: "error";
98
+ readonly step_created: "input";
99
+ readonly step_started: "input";
100
+ readonly step_completed: "result";
101
+ readonly step_failed: "error";
102
+ readonly step_retrying: "error";
103
+ readonly hook_created: "metadata";
104
+ readonly hook_received: "payload";
105
+ };
106
+ export type EventDataPayloadField = (typeof EVENT_DATA_PAYLOAD_FIELD_BY_EVENT_TYPE)[keyof typeof EVENT_DATA_PAYLOAD_FIELD_BY_EVENT_TYPE];
107
+ /**
108
+ * Fields within eventData that hold ref/payload data per event type.
109
+ * When resolveData is 'none', only these fields are stripped — all other
110
+ * metadata (stepName, workflowName, etc.) is preserved.
111
+ */
112
+ export declare const EVENT_DATA_REF_FIELDS: Record<string, readonly EventDataPayloadField[]>;
113
+ export declare function getEventDataRefFields(eventType: string): readonly string[];
114
+ export declare function getEventDataPayloadField(eventType: string): EventDataPayloadField | undefined;
115
+ /**
116
+ * Strip ref/payload fields from eventData based on resolveData setting.
117
+ * When resolveData is 'none', removes only large data fields (refs) from
118
+ * eventData while preserving metadata like stepName, workflowName, etc.
119
+ */
120
+ export declare function stripEventDataRefs(event: Event, resolveData: ResolveData): Event;
43
121
  export declare const BaseEventSchema: z.ZodObject<{
44
122
  eventType: z.ZodEnum<{
45
123
  run_created: "run_created";
124
+ run_started: "run_started";
46
125
  run_completed: "run_completed";
47
126
  run_failed: "run_failed";
127
+ run_cancelled: "run_cancelled";
128
+ attr_set: "attr_set";
48
129
  step_created: "step_created";
49
130
  step_completed: "step_completed";
50
131
  step_failed: "step_failed";
51
132
  step_retrying: "step_retrying";
133
+ step_started: "step_started";
52
134
  hook_created: "hook_created";
53
135
  hook_received: "hook_received";
54
- run_started: "run_started";
55
- run_cancelled: "run_cancelled";
56
- attr_set: "attr_set";
57
- step_started: "step_started";
58
136
  hook_disposed: "hook_disposed";
59
137
  hook_conflict: "hook_conflict";
60
138
  wait_created: "wait_created";
@@ -164,6 +242,9 @@ export declare const CreateEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
164
242
  correlationId: z.ZodOptional<z.ZodString>;
165
243
  specVersion: z.ZodOptional<z.ZodNumber>;
166
244
  eventType: z.ZodLiteral<"run_cancelled">;
245
+ eventData: z.ZodOptional<z.ZodObject<{
246
+ cancelReason: z.ZodOptional<z.ZodString>;
247
+ }, z.core.$strip>>;
167
248
  }, z.core.$strip>, z.ZodObject<{
168
249
  specVersion: z.ZodOptional<z.ZodNumber>;
169
250
  eventType: z.ZodLiteral<"attr_set">;
@@ -196,6 +277,11 @@ export declare const CreateEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
196
277
  eventType: z.ZodLiteral<"step_completed">;
197
278
  correlationId: z.ZodString;
198
279
  eventData: z.ZodObject<{
280
+ ttfs: z.ZodOptional<z.ZodNumber>;
281
+ stso: z.ZodOptional<z.ZodNumber>;
282
+ stepCount: z.ZodOptional<z.ZodNumber>;
283
+ eventCount: z.ZodOptional<z.ZodNumber>;
284
+ optimizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
199
285
  stepName: z.ZodOptional<z.ZodString>;
200
286
  workflowName: z.ZodOptional<z.ZodString>;
201
287
  result: z.ZodUnion<readonly [z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>]>;
@@ -205,6 +291,11 @@ export declare const CreateEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
205
291
  eventType: z.ZodLiteral<"step_failed">;
206
292
  correlationId: z.ZodString;
207
293
  eventData: z.ZodObject<{
294
+ ttfs: z.ZodOptional<z.ZodNumber>;
295
+ stso: z.ZodOptional<z.ZodNumber>;
296
+ stepCount: z.ZodOptional<z.ZodNumber>;
297
+ eventCount: z.ZodOptional<z.ZodNumber>;
298
+ optimizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
208
299
  stepName: z.ZodOptional<z.ZodString>;
209
300
  error: z.ZodUnion<readonly [z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>]>;
210
301
  }, z.core.$strip>;
@@ -226,6 +317,7 @@ export declare const CreateEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
226
317
  attempt: z.ZodOptional<z.ZodNumber>;
227
318
  workflowName: z.ZodOptional<z.ZodString>;
228
319
  input: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>]>>;
320
+ ownerMessageId: z.ZodOptional<z.ZodString>;
229
321
  }, z.core.$strip>>;
230
322
  }, z.core.$strip>, z.ZodObject<{
231
323
  specVersion: z.ZodOptional<z.ZodNumber>;
@@ -310,6 +402,9 @@ export declare const EventSchema: z.ZodIntersection<z.ZodDiscriminatedUnion<[z.Z
310
402
  correlationId: z.ZodOptional<z.ZodString>;
311
403
  specVersion: z.ZodOptional<z.ZodNumber>;
312
404
  eventType: z.ZodLiteral<"run_cancelled">;
405
+ eventData: z.ZodOptional<z.ZodObject<{
406
+ cancelReason: z.ZodOptional<z.ZodString>;
407
+ }, z.core.$strip>>;
313
408
  }, z.core.$strip>, z.ZodObject<{
314
409
  specVersion: z.ZodOptional<z.ZodNumber>;
315
410
  eventType: z.ZodLiteral<"attr_set">;
@@ -342,6 +437,11 @@ export declare const EventSchema: z.ZodIntersection<z.ZodDiscriminatedUnion<[z.Z
342
437
  eventType: z.ZodLiteral<"step_completed">;
343
438
  correlationId: z.ZodString;
344
439
  eventData: z.ZodObject<{
440
+ ttfs: z.ZodOptional<z.ZodNumber>;
441
+ stso: z.ZodOptional<z.ZodNumber>;
442
+ stepCount: z.ZodOptional<z.ZodNumber>;
443
+ eventCount: z.ZodOptional<z.ZodNumber>;
444
+ optimizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
345
445
  stepName: z.ZodOptional<z.ZodString>;
346
446
  workflowName: z.ZodOptional<z.ZodString>;
347
447
  result: z.ZodUnion<readonly [z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>]>;
@@ -351,6 +451,11 @@ export declare const EventSchema: z.ZodIntersection<z.ZodDiscriminatedUnion<[z.Z
351
451
  eventType: z.ZodLiteral<"step_failed">;
352
452
  correlationId: z.ZodString;
353
453
  eventData: z.ZodObject<{
454
+ ttfs: z.ZodOptional<z.ZodNumber>;
455
+ stso: z.ZodOptional<z.ZodNumber>;
456
+ stepCount: z.ZodOptional<z.ZodNumber>;
457
+ eventCount: z.ZodOptional<z.ZodNumber>;
458
+ optimizations: z.ZodOptional<z.ZodArray<z.ZodString>>;
354
459
  stepName: z.ZodOptional<z.ZodString>;
355
460
  error: z.ZodUnion<readonly [z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>]>;
356
461
  }, z.core.$strip>;
@@ -372,6 +477,7 @@ export declare const EventSchema: z.ZodIntersection<z.ZodDiscriminatedUnion<[z.Z
372
477
  attempt: z.ZodOptional<z.ZodNumber>;
373
478
  workflowName: z.ZodOptional<z.ZodString>;
374
479
  input: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>]>>;
480
+ ownerMessageId: z.ZodOptional<z.ZodString>;
375
481
  }, z.core.$strip>>;
376
482
  }, z.core.$strip>, z.ZodObject<{
377
483
  specVersion: z.ZodOptional<z.ZodNumber>;
@@ -428,7 +534,14 @@ export declare const EventSchema: z.ZodIntersection<z.ZodDiscriminatedUnion<[z.Z
428
534
  specVersion: z.ZodOptional<z.ZodNumber>;
429
535
  }, z.core.$strip>>;
430
536
  export type Event = z.infer<typeof EventSchema>;
431
- export type HookCreatedEvent = z.infer<typeof HookCreatedEventSchema>;
537
+ export type EventOfType<T extends EventType> = Extract<Event, {
538
+ eventType: T;
539
+ }>;
540
+ export type EventRequestOfType<T extends EventType> = Extract<AnyEventRequest, {
541
+ eventType: T;
542
+ }>;
543
+ export type HookCreatedEvent = EventOfType<'hook_created'>;
544
+ export type HookCreatedEventRequest = EventRequestOfType<'hook_created'>;
432
545
  export type HookReceivedEvent = z.infer<typeof HookReceivedEventSchema>;
433
546
  export type HookConflictEvent = z.infer<typeof HookConflictEventSchema>;
434
547
  /**
@@ -436,6 +549,14 @@ export type HookConflictEvent = z.infer<typeof HookConflictEventSchema>;
436
549
  * @internal Use CreateEventRequest or RunCreatedEventRequest instead.
437
550
  */
438
551
  export type AnyEventRequest = z.infer<typeof CreateEventSchema>;
552
+ type ChildEntityCreationEventRequest = EventRequestOfType<ChildEntityCreationEventType> | (EventRequestOfType<'step_started'> & {
553
+ eventData: {
554
+ stepName: string;
555
+ input: unknown;
556
+ };
557
+ });
558
+ /** Includes lazy step_started requests that create their step on demand. */
559
+ export declare function isChildEntityCreationEvent(event: AnyEventRequest): event is ChildEntityCreationEventRequest;
439
560
  /**
440
561
  * Event request for creating a new workflow run.
441
562
  * Can be used with a client-generated runId or null for server-generated.
@@ -28,30 +28,7 @@ export declare const HookSchema: z.ZodObject<{
28
28
  * - specVersion >= 2: Uint8Array (binary devalue format)
29
29
  * - specVersion 1: unknown (legacy JSON format)
30
30
  */
31
- export type Hook = z.infer<typeof HookSchema> & {
32
- /** The unique identifier of the workflow run this hook belongs to. */
33
- runId: string;
34
- /** The unique identifier of this hook within the workflow run. */
35
- hookId: string;
36
- /** The secret token used to reference this hook. */
37
- token: string;
38
- /** The owner ID (team or user) that owns this hook. */
39
- ownerId: string;
40
- /** The project ID this hook belongs to. */
41
- projectId: string;
42
- /** The environment (e.g., "production", "preview", "development") where this hook was created. */
43
- environment: string;
44
- /** Optional metadata associated with the hook, set when the hook was created. */
45
- metadata?: SerializedData;
46
- /** The timestamp when this hook was created. */
47
- createdAt: Date;
48
- /** The spec version when this hook was created. */
49
- specVersion?: number;
50
- /** Whether this hook is resumable via the public webhook endpoint. undefined = legacy (treated as true for backwards compat). */
51
- isWebhook?: boolean;
52
- /** Whether this hook is a system-managed hook (e.g., for abort signals). */
53
- isSystem?: boolean;
54
- };
31
+ export type Hook = z.infer<typeof HookSchema>;
55
32
  export interface CreateHookRequest {
56
33
  hookId: string;
57
34
  token: string;
@@ -4,7 +4,7 @@ export type * from './attributes.js';
4
4
  export { ATTRIBUTE_KEY_MAX_LENGTH, ATTRIBUTE_MAX_PER_RUN, ATTRIBUTE_VALUE_MAX_BYTES, AttributeChangeSchema, AttributeChangesSchema, AttributeValidationError, applyAttributeChanges, RESERVED_ATTRIBUTE_KEY_PREFIX, validateAttributeChanges, validateAttributeKey, validateAttributeValue, } from './attributes.js';
5
5
  export { _resetEnvWarnCacheForTests, type EnvNumberOptions, envNumber, } from './env-config.js';
6
6
  export type * from './events.js';
7
- export { BaseEventSchema, CreateEventSchema, EVENT_DATA_REF_FIELDS, EventSchema, EventTypeSchema, HookCreatedEventSchema, isTerminalRunEventType, stripEventDataRefs, TERMINAL_RUN_EVENT_TYPES, TerminalRunEventTypeSchema, } from './events.js';
7
+ export { BaseEventSchema, CHILD_ENTITY_CREATION_EVENT_TYPES, CreateEventSchema, EVENT_DATA_PAYLOAD_FIELD_BY_EVENT_TYPE, EVENT_DATA_REF_FIELDS, EventSchema, EventTypeSchema, getEventDataPayloadField, getEventDataRefFields, HOOK_EVENTS_REQUIRING_EXISTENCE, HOOK_LIFECYCLE_EVENT_TYPES, HookCreatedEventSchema, isChildEntityCreationEvent, isChildEntityCreationEventType, isHookEventRequiringExistence, isHookLifecycleEventType, isRunEventType, isStepEventType, isTerminalRunEventType, isTerminalStepEventType, isWaitEventType, RUN_EVENT_TYPES, STEP_EVENT_TYPES, stripEventDataRefs, TERMINAL_RUN_EVENT_TYPES, TERMINAL_STEP_EVENT_TYPES, TerminalRunEventTypeSchema, WAIT_EVENT_TYPES, } from './events.js';
8
8
  export type * from './hooks.js';
9
9
  export { HookSchema } from './hooks.js';
10
10
  export type * from './interfaces.js';
@@ -22,7 +22,8 @@ export type { SpecVersion } from './spec-version.js';
22
22
  export { isLegacySpecVersion, requiresNewerWorld, SPEC_VERSION_CURRENT, SPEC_VERSION_LEGACY, SPEC_VERSION_SUPPORTS_ATTRIBUTES, SPEC_VERSION_SUPPORTS_CBOR_QUEUE_TRANSPORT, SPEC_VERSION_SUPPORTS_COMPRESSION, SPEC_VERSION_SUPPORTS_EVENT_SOURCING, } from './spec-version.js';
23
23
  export type * from './steps.js';
24
24
  export { isTerminalStepStatus, StepSchema, StepStatusSchema, TERMINAL_STEP_STATUSES, TerminalStepStatusSchema, } from './steps.js';
25
- export { DEFAULT_TIMESTAMP_THRESHOLD_FUTURE_MS, DEFAULT_TIMESTAMP_THRESHOLD_MS, DEFAULT_TIMESTAMP_THRESHOLD_PAST_MS, ulidToDate, validateUlidTimestamp, } from './ulid.js';
25
+ export { DEFAULT_TIMESTAMP_THRESHOLD_FUTURE_MS, DEFAULT_TIMESTAMP_THRESHOLD_MS, DEFAULT_TIMESTAMP_THRESHOLD_PAST_MS, ulidToDate, validateUlidTimestamp, workflowRunIdSchema, } from './ulid.js';
26
+ export type { WorkflowRunId } from './ulid.js';
26
27
  export type * from './waits.js';
27
28
  export { WaitSchema, WaitStatusSchema } from './waits.js';
28
29
  //# sourceMappingURL=index.d.ts.map
@@ -147,6 +147,16 @@ export interface Queue {
147
147
  }>;
148
148
  /**
149
149
  * Creates an HTTP queue handler for processing messages from a specific queue.
150
+ *
151
+ * `meta.messageId` SHOULD be stable across redeliveries of the same message
152
+ * (one ID per enqueued message, reused on every delivery attempt). The
153
+ * runtime's inline step ownership uses it as a liveness lease: the lazy
154
+ * `step_started` records the handling invocation's messageId, and only a
155
+ * delivery of that same message may re-execute the step before the
156
+ * ownership lease expires (crash recovery via queue redelivery). A World
157
+ * whose queue mints a fresh ID per delivery degrades gracefully — owner
158
+ * redeliveries fall back to the delayed-backstop path instead of executing
159
+ * immediately, adding recovery latency but never wedging or duplicating.
150
160
  */
151
161
  createQueueHandler(queueNamePrefix: QueuePrefix, handler: (message: unknown, meta: {
152
162
  attempt: number;
@@ -1,3 +1,12 @@
1
+ import { z } from '#compiled/zod/index.js';
2
+ /**
3
+ * A workflow run ID: the `wrun_` prefix followed by a 26-char ULID (minted
4
+ * client-side in core's `start()`). Validates the exact shape — prefix plus a
5
+ * well-formed ULID — rather than a loose length bound, so callers can't smuggle
6
+ * arbitrary strings through APIs that persist a run ID verbatim.
7
+ */
8
+ export declare const workflowRunIdSchema: z.ZodTemplateLiteral<`wrun_${string}`>;
9
+ export type WorkflowRunId = z.infer<typeof workflowRunIdSchema>;
1
10
  /**
2
11
  * Default threshold for ULID timestamps in the past (24 hours).
3
12
  *
@@ -1,4 +1,4 @@
1
- import{a as e,i as t,t as n}from"../../_chunks/workflow/chunk-BHKSVoKr.js";import{i as r,n as i,r as a,t as o}from"../../_chunks/workflow/dist-CttsoN4D.js";import{C as s,T as c,h as l,l as u,o as d,r as f,u as p}from"../../_chunks/workflow/dist-DpDDcpTl.js";import{A as m,D as h,E as g,F as _,L as v,M as y,P as b,R as x,T as ee,V as S,W as C,Y as w,Z as T,a as E,d as D,g as O,k,l as A,n as te,o as ne,p as j,q as M,r as re,s as ie,v as N,z as ae}from"../../_chunks/workflow/dist-DJU_7R9s.js";import{t as P}from"../../_chunks/workflow/undici-fb54XL8i.js";import{createHash as oe}from"node:crypto";import{promisify as se}from"node:util";import{fileURLToPath as ce}from"node:url";import{promises as F}from"node:fs";import I,{access as le,constants as ue,mkdir as de,readFile as L,readdir as fe,readlink as pe,rm as me,unlink as he,writeFile as ge}from"node:fs/promises";import R from"node:path";import{execFile as _e}from"node:child_process";import{setTimeout as ve}from"node:timers/promises";import{EventEmitter as ye}from"node:events";function be(e,t=10){let n=parseInt(e,t);if(!Number.isNaN(n)&&n>=0&&n<=65535)return n}function xe(e,t){let n=[],r=e.trim().split(`
2
- `);for(let e of r){let r=e.trim().split(/\s+/);if(r.length<5||r[0]?.toUpperCase()!==`TCP`)continue;let[,i,,a,o]=r;if(a?.toUpperCase()!==`LISTENING`||o!==t.toString())continue;let s=i.lastIndexOf(`:`);if(s===-1)continue;let c=be(i.slice(s+1));c!==void 0&&n.push(c)}return n}const Se=se(_e);function Ce(e,t=10){let n=parseInt(e,t);if(!Number.isNaN(n)&&n>=0&&n<=65535)return n}const we=((e,t)=>e.join(t))([``,`proc`],`/`);async function Te(e){let t=[`${we}/net/tcp`,`${we}/net/tcp6`],n=[],r=new Set,i=`${we}/${e}/fd`;try{let e=(await fe(i)).sort((e,t)=>Number.parseInt(e,10)-Number.parseInt(t,10)),t=await Promise.allSettled(e.map(async e=>(await pe(`${i}/${e}`)).match(/^socket:\[(\d+)\]$/)?.[1]??null));for(let e of t)e.status===`fulfilled`&&e.value&&(n.push(e.value),r.add(e.value))}catch{return[]}if(n.length===0)return[];let a=new Map;for(let e of t)try{let t=(await L(e,`utf8`)).split(`
3
- `).slice(1);for(let e of t){if(!e.trim())continue;let t=e.trim().split(/\s+/);if(t.length<10)continue;let n=t[1],i=t[3],o=t[9];if(!n||i!==`0A`||!o||!r.has(o))continue;let s=n.indexOf(`:`);if(s===-1)continue;let c=n.slice(s+1);if(!c)continue;let l=Ce(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 Ee(e){try{let{stdout:t}=await Se(`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=Ce(t.slice(e+1));r!==void 0&&n.push(r)}}}return n}catch{return[]}}async function De(e){try{let{stdout:t}=await Se(`cmd`,[`/c`,`netstat -ano -p tcp | findstr LISTENING`]);return xe(t,e)}catch{return[]}}async function Oe(){let{pid:e,platform:t}=process;try{switch(t){case`linux`:return await Te(e);case`darwin`:return await Ee(e);case`win32`:return await De(e);default:return[]}}catch(e){return process.env.NODE_ENV===`development`&&console.debug(`[getAllPorts] Detection failed:`,e),[]}}const ke=`${o}/flow?__health`;async function Ae(e,t={}){let{endpoint:n=ke,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 je(e){let t=await Oe();if(t.length===0)return;if(t.length===1)return t[0];let n=(await Promise.all(t.map(async t=>({port:t,isWorkflow:await Ae(t,e)})))).find(e=>e.isWorkflow);return n?n.port:(process.env.NODE_ENV===`development`&&console.debug(`[getWorkflowPort] Probing failed, falling back to first port:`,t[0]),t[0])}function Me(e){let t={get value(){let n=e();return Object.defineProperty(t,"value",{value:n}),n}};return t}const Ne=()=>process.env.WORKFLOW_LOCAL_DATA_DIR||`.workflow-data`,Pe=()=>process.env.WORKFLOW_LOCAL_BASE_URL,Fe=Me(()=>({dataDir:Ne(),baseUrl:Pe()}));function Ie(e){return e.baseUrl??process.env.WORKFLOW_LOCAL_BASE_URL??i(`http://localhost`)}async function Le(e){if(e.baseUrl)return e.baseUrl;if(process.env.WORKFLOW_LOCAL_BASE_URL)return process.env.WORKFLOW_LOCAL_BASE_URL;if(typeof e.port==`number`)return i(`http://localhost:${e.port}`);if(process.env.PORT)return i(`http://localhost:${process.env.PORT}`);let t=await je({endpoint:a()});if(t)return i(`http://localhost:${t}`);throw Error(`Unable to resolve base URL for workflow queue.`)}const Re=E(()=>Math.random());function ze(e){let t=typeof e==`string`?e:String(e);return t.length>48?`${t.slice(0,48)}…`:t}var Be=class extends c{constructor(e,t){super(`Unsafe ${e} "${ze(t)}": must not be empty, contain ".", "/", "\\", or null bytes`),this.name=`UnsafeEntityIdError`}static is(e){return e instanceof Error&&e.name===`UnsafeEntityIdError`}};function z(e,t){if(t.length===0||t.startsWith(`.`)||t.includes(`/`)||t.includes(`\\`)||t.includes(`\0`)||t.includes(`.`))throw new Be(e,t)}function B(e,...t){let n=R.resolve(e),r=R.resolve(e,...t);if(r!==n&&!r.startsWith(n+R.sep))throw new Be(`path`,t.join(`/`));return r}const Ve=process.platform===`win32`;async function He(e,t=5){if(!Ve)return e();let n=[`EPERM`,`EBUSY`,`EACCES`];for(let r=0;r<=t;r++)try{return await e()}catch(e){if(!(r<t&&n.includes(e.code)))throw e;let i=10*2**r+Math.random()*10;await new Promise(e=>setTimeout(e,i))}throw Error(`Retry loop exited unexpectedly`)}const Ue=new Set,We=new Set;function Ge(){Ue.clear(),We.clear()}const Ke=/\.[a-zA-Z][a-zA-Z0-9-]*$/;function qe(e){return e.replace(Ke,``)}function Je(e,t){return e.endsWith(`.${t}`)}function Ye(e){return!Ke.test(e)}function V(e,t,n,r){return z(`fileId`,n),r!==void 0&&z(`tag`,r),B(e,t,r?`${n}.${r}.json`:`${n}.json`)}async function H(e,t,n,r,i){if(z(`fileId`,n),i!==void 0&&z(`tag`,i),i){let a=await K(B(e,t,`${n}.${i}.json`),r);if(a!==null)return a}return K(B(e,t,`${n}.json`),r)}async function Xe(e,t){let n=`.${t}.json`;try{return(await F.readdir(e)).filter(e=>e.endsWith(n))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function Ze(e,t,n){let r=`.${t}${n}`;try{return(await F.readdir(e)).filter(e=>e.endsWith(r))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function Qe(e){let t=R.resolve(e);if(!We.has(t))try{await F.mkdir(t,{recursive:!0}),We.add(t)}catch{}}async function $e(e,t){await Qe(e);try{return await t()}catch(n){if(n.code!==`ENOENT`)throw n;return We.delete(R.resolve(e)),await Qe(e),t()}}function U(e,t){return t instanceof Uint8Array?{__type:`Uint8Array`,data:Buffer.from(t).toString(`base64`)}:t}function et(e,t){return typeof t==`object`&&t&&t.__type===`Uint8Array`&&typeof t.data==`string`?new Uint8Array(Buffer.from(t.data,`base64`)):t}async function W(e,t,n){return G(e,JSON.stringify(t,U,2),n)}async function G(e,t,n){if(!n?.overwrite){if(Ue.has(e))throw new f(`File ${e} already exists and 'overwrite' is false`);try{throw await F.access(e),Ue.add(e),new f(`File ${e} already exists and 'overwrite' is false`)}catch(e){if(e.code!==`ENOENT`)throw e}}let r=`${e}.tmp.${Re()}`,i=!1;try{await $e(R.dirname(e),async()=>{await F.writeFile(r,t),i=!0,await He(()=>F.rename(r,e))}),Ue.add(e)}catch(e){throw i&&await He(()=>F.unlink(r),3).catch(()=>{}),e}}async function K(e,t){try{let n=await F.readFile(e,`utf-8`);return t.parse(JSON.parse(n,et))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function tt(e){return await F.readFile(e)}async function nt(e){let t=await F.open(e,`r`);try{let e=Buffer.allocUnsafe(1),{bytesRead:n}=await t.read(e,0,1,0);return n===0?void 0:e[0]}finally{await t.close()}}async function q(e){try{await F.unlink(e)}catch(e){if(e.code!==`ENOENT`)throw e}}async function J(e,t){let n=`${e}.tmp.${Re()}`,r=!1;try{return await $e(R.dirname(e),async()=>{await F.writeFile(n,t,{flag:`wx`}),r=!0;try{return await He(()=>F.link(n,e)),!0}catch(e){if(e.code===`EEXIST`)return!1;throw e}})}finally{r&&await He(()=>F.unlink(n),3).catch(()=>{})}}async function rt(e){return it(e,`.json`)}async function it(e,t){try{return(await F.readdir(e)).filter(e=>e.endsWith(t)).map(e=>e.slice(0,-t.length))}catch(e){if(e.code===`ENOENT`)return[];throw e}}function at(e){if(!e)return null;let t=e.split(`|`);return{timestamp:new Date(t[0]),id:t[1]||null}}function ot(e,t){return t?`${e.toISOString()}|${t}`:e.toISOString()}async function Y(e){let{directory:t,schema:n,cachedItems:r,filePrefix:i,fileIdFilter:a,filter:o,sortOrder:s=`desc`,limit:c=20,cursor:l,getCreatedAt:u,getId:d}=e;i!==void 0&&z(`filePrefix`,i);let f=R.resolve(t),p=await rt(f),m=i?p.filter(e=>e.startsWith(i)):p,h=a?m.filter(a):m,g=at(l),_=h;g&&(_=h.filter(e=>{let t=u(`${e}.json`);if(t){let e=g.timestamp.getTime(),n=t.getTime();return g.id?s===`desc`?n<=e:n>=e:s===`desc`?n<e:n>e}return!0}));let v=[];for(let e of _){let t=R.join(f,`${e}.json`),i=null;try{let e=r?.get(t);i=e===void 0?await K(t,n):structuredClone(e)}catch(t){if(t instanceof T){console.warn(`Skipping item ${e} due to malformed JSON: ${t.message}`);continue}throw t}if(i){if(o&&!o(i))continue;if(g){let e=i.createdAt.getTime(),t=g.timestamp.getTime();if(s===`desc`){if(e>t||e===t&&g.id&&d&&d(i)>=g.id)continue}else if(e<t||e===t&&g.id&&d&&d(i)<=g.id)continue}v.push(i)}}v.sort((e,t)=>{let n=e.createdAt.getTime(),r=t.createdAt.getTime(),i=s===`asc`?n-r:r-n;if(i===0&&d){let n=d(e),r=d(t);return s===`asc`?n.localeCompare(r):r.localeCompare(n)}return i});let y=v.length>c,b=y?v.slice(0,c):v;return{data:b,cursor:b.length>0?ot(b[b.length-1].createdAt,d?.(b[b.length-1])):null,hasMore:y}}let X=null;function st(){return typeof import.meta.url==`string`&&import.meta.url?R.dirname(ce(import.meta.url)):null}async function ct(){if(X)return X;let e=st();if(e)try{let t=await L(R.join(e,`../package.json`),`utf-8`);return X=JSON.parse(t),X}catch{}return X={name:`@workflow/world-local`,version:`5.0.0-beta.24`},X}const lt=`version.txt`;var ut=class extends Error{dataDir;code;constructor(e,t,n){super(e),this.name=`DataDirAccessError`,this.dataDir=t,this.code=n}},dt=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 ft(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 Z(e){let t=`${e.major}.${e.minor}.${e.patch}`;return e.prerelease?`${t}-${e.prerelease}`:t}function pt(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:ft(t.substring(n+1))}}function mt(e,t){return`${e}@${Z(t)}`}function ht(e,t){console.log(`[world-local] Upgrading from version ${Z(e)} to ${Z(t)}`)}async function gt(e){let t=R.resolve(e);try{await de(t,{recursive:!0})}catch(e){let n=e;if(n.code!==`EEXIST`)throw new ut(`Failed to create data directory "${t}": ${n.message}`,t,n.code)}try{await le(t,ue.R_OK)}catch(e){let n=e;throw new ut(`Data directory "${t}" is not readable: ${n.message}`,t,n.code)}let n=R.join(t,`.workflow-write-test-${Date.now()}`);try{await ge(n,``),await he(n).catch(e=>{if(e.code!==`ENOENT`)throw e})}catch(e){let n=e;throw new ut(`Data directory "${t}" is not writable: ${n.message}`,t,n.code)}}async function _t(e){let t=R.join(R.resolve(e),lt);try{return pt(await L(t,`utf-8`))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function vt(e,t){await ge(R.join(R.resolve(e),lt),mt((await ct()).name,t))}function yt(e,t){return t||Z(e)}async function bt(e){await gt(e);let t=await ct(),n=ft(t.version),r=await _t(e);if(r===null){await vt(e,n);return}let{version:i}=r;if(Z(i)!==Z(n))try{ht(i,n),await vt(e,n)}catch(e){let r=yt(i,e instanceof dt?e.suggestedVersion:void 0);throw console.error(`[world-local] Failed to upgrade data directory from version ${Z(i)} to ${Z(n)}:`,e instanceof Error?e.message:e),console.error(`[world-local] Data is not compatible with the current version. Please downgrade to ${t.name}@${r}`),e}}let xt=null;async function St(){return xt||=import(`../../_chunks/workflow/src-CQuMexnO.js`).then(t=>e(t.t(),1)).catch(()=>null),xt}let Ct=null;async function wt(){return Ct||=St().then(e=>e?e.trace.getTracer(`workflow`):null),Ct}async function Tt(e,...t){let[n,r]=await Promise.all([wt(),St()]),{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 Et(e){let t=await St();if(t)return t.SpanKind[e]}function Q(...e){return t=>Object.fromEntries(e.map(e=>[e,t]))}const Dt=Q(`peer.service`),Ot=Q(`rpc.system`),kt=Q(`rpc.service`),At=Q(`rpc.method`),jt=Q(`workflow.run.id`),Mt=Q(`step.id`),Nt={peerService:`world-local`,rpcSystem:`local`,rpcService:`world-local`},Pt={"world.runs.get":0,"world.runs.experimentalSetAttributes":0,"world.steps.get":0,"world.events.create":0,"world.events.get":0},Ft=new Set([`world.steps.list`,`world.events.list`,`world.hooks.list`]);function It(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 Lt(e,t){return typeof e[t]==`string`?e[t]:void 0}function Rt(e){if(typeof e!=`object`||!e)return;let t=e.runId;return typeof t==`string`?t:void 0}function zt(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 Bt(e,t,n){let r=`${e}.${t}`,i={},a=Pt[r],o=a===void 0?Ft.has(r)?Rt(n[0]):void 0:Lt(n,a);if(o&&Object.assign(i,jt(o)),r===`world.steps.get`){let e=Lt(n,1);e&&Object.assign(i,Mt(e))}return i}function Vt(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=It(t);r&&(n=`${e}.${a} ${r}`)}return Tt(n,{kind:await Et(`INTERNAL`)},async r=>{r?.setAttributes({...Dt(Nt.peerService),...Ot(Nt.rpcSystem),...kt(Nt.rpcService),...At(n),...Bt(e,a,t)});let o=await i(...t),s=zt(o);return s&&r?.setAttributes(jt(s)),o})}}return n}var Ht=n((e=>{var n=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.RateLimit=e.Sema=void 0;let r=n(t(`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}};e.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)}}e.RateLimit=f}))(),Ut=P(),Wt=class{contentType=`application/json`;serialize(e){return Buffer.from(JSON.stringify(e,U))}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,et)}};const Gt=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_MAX_VISIBILITY??`0`,10)||1/0,Kt=2147483647,qt=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_CONCURRENCY??`0`,10)||1e3,Jt=`Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer`;function Yt(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(Jt))return!0;t=`cause`in t?t.cause:void 0}return!1}function Xt(e){let{kind:t,prefix:n}=O(e);return{pathname:t===`workflow`?`flow`:`step`,prefix:n}}function Zt(e){let t=new Ut.Agent({headersTimeout:0,connections:1e3,keepAliveTimeout:3e4}),n=new Wt,i=E(),a=new Ht.Sema(qt),o=new AbortController,s=o.signal,c=new Map,l=new Map,u=async(o,u,d)=>{let f=[];if(d?.idempotencyKey){let e=c.get(d.idempotencyKey);if(e)return{messageId:e}}let p=n.serialize(u),{pathname:m,prefix:h}=Xt(o),g=D.parse(`msg_${i()}`),_=u,v=_.runId??_.workflowRunId??void 0,y=_.stepId??void 0;if(d?.idempotencyKey){let e=d.idempotencyKey;c.set(e,g),f.push(()=>{c.delete(e)})}return(async()=>{d?.delaySeconds&&d.delaySeconds>0&&await ve(Math.min(d.delaySeconds*1e3,Kt),void 0,{signal:s}),a.tryAcquire()||(console.warn(`[world-local]: concurrency limit (${qt}) reached, waiting for queue to free up`),await a.acquire());let n=0;try{for(let i=0;i<256;i++){let a={...d?.headers,"content-type":`application/json`,"x-vqs-queue-name":o,"x-vqs-message-id":g,"x-vqs-message-attempt":String(n+1)},c=l.get(h),u;try{if(c)u=await c(new Request(r(Ie(e),{type:m}),{method:`POST`,headers:a,body:p}));else{let n=await Le(e);u=await fetch(r(n,{type:m}),{method:`POST`,duplex:`half`,dispatcher:t,headers:a,body:p})}}catch(e){let t=e?.name;if(s.aborted||t===`AbortError`||t===`ResponseAborted`)return;if(Yt(e))throw e;console.error(`[world-local] Queue delivery failed at the transport (loop ${i+1}), retrying`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y},error:String(e)}),await ve(5e3,void 0,{signal:s});continue}n++;let f=await u.text();if(u.ok){try{let e=Number(JSON.parse(f).timeoutSeconds);if(Number.isFinite(e)&&e>=0){e>0&&await ve(Math.min(e*1e3,Kt),void 0,{signal:s});continue}}catch{}return}console.error(`[world-local] Queue message failed (attempt ${n}, HTTP ${u.status})`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y},handlerError:f}),await ve(5e3,void 0,{signal:s})}console.error(`[world-local] Queue message exhausted safety limit (256 attempts)`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y}})}finally{a.release()}})().catch(e=>{e?.name===`AbortError`||e?.name===`ResponseAborted`||(Yt(e)?console.error(`[local world] Queue operation failed: detected "${Jt}". This usually means a Next.js proxy/middleware consumed Workflow's internal request before the executor could read it. Exclude \`/.well-known/workflow/*\` from your matcher. See https://workflow-sdk.dev/docs/getting-started/next#configure-proxy-handler`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y},originalError:e}):console.error(`[local world] Queue operation failed:`,e))}).finally(()=>{for(let e of f)e()}),{messageId:g}},d=M({"x-vqs-queue-name":j,"x-vqs-message-id":D,"x-vqs-message-attempt":S()});return{queue:u,createQueueHandler:(e,t)=>async n=>{let r=d.safeParse(Object.fromEntries(n.headers));if(!r.success||!n.body)return Response.json({error:n.body?`Missing required headers`:`Missing request body`},{status:400});let i=r.data[`x-vqs-queue-name`],a=r.data[`x-vqs-message-id`],o=r.data[`x-vqs-message-attempt`];if(!i.startsWith(e))return Response.json({error:`Unhandled queue`},{status:400});let s=await new Wt().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,Gt)),n==null?Response.json({ok:!0}):Response.json({timeoutSeconds:n})}catch(e){return Response.json(String(e),{status:500})}},getDeploymentId:async()=>`dpl_local@${(await ct()).version}`,registerHandler(e,t){l.set(e,t)},async close(){s.aborted||(o.abort(),await t.close())}}}function Qt(e){return oe(`sha256`).update(e).digest(`hex`)}function $t(e,t,n){return B(e,`.locks`,`hooks`,n?`${t}.disposed.${n}`:`${t}.disposed`)}async function en(e,t,n){let r=[$t(e,t)];n&&r.push($t(e,t,n));for(let e of r)try{return await I.access(e),!0}catch{}return!1}function tn(e,t){return R.join(e,`hooks`,`tokens`,`${Qt(t)}.json`)}async function nn(e,t,n,r){let i=tn(e,t),a;try{a=JSON.parse(await I.readFile(i,`utf8`))}catch{return}a.runId!==n||a.hookId!==r||await I.unlink(i).catch(()=>{})}function rn(e,t,n,r){let i=oe(`sha256`).update(`${t}\x00${n}\x00${r}`).digest(`hex`);return R.join(e,`hooks`,`tokens`,`${i}.recovery.json`)}const an=E(()=>Math.random()),$=e=>t=>{let n=qe(t.replace(/\.json$/,``))+`.json`,r=RegExp(`^${e}_`,`g`),i=n.indexOf(`-`);return i===-1?te(n.replace(/\.json$/,``).replace(r,``)):e===`step`?null:te(n.substring(i+1).replace(/\.json$/,``).replace(r,``))};function on(e,t){return t===`none`?{...e,input:void 0,output:void 0}:e}function sn(e,t){return t===`none`?{...e,input:void 0,output:void 0}:e}function cn(e,t){if(t===`none`){let{metadata:t,...n}=e;return n}return e}function ln(e,t){return t?Ye(e)||Je(e,t):Ye(e)}function un(e){if(e.eventType!==`hook_created`)return;let t=e.eventData.token;return typeof t==`string`?t:void 0}function dn(e){let{token:t,metadata:n,isWebhook:r,isSystem:i}=e.eventData;return{runId:e.runId,hookId:e.correlationId,token:t,metadata:n,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:e.createdAt,specVersion:e.specVersion,isWebhook:r??!0,isSystem:i??!1}}function fn(e,t){return e.eventType===`hook_created`&&typeof e.correlationId==`string`&&t(e)}function pn(e,t){return e.runId===t.runId?e.eventType===`hook_disposed`&&e.correlationId===t.correlationId||b(e.eventType):!1}async function mn(e){try{return await K(e,y)}catch(e){if(e instanceof SyntaxError||e instanceof T)return null;throw e}}async function hn(e,t,n){let r=await H(e,`runs`,t,k,n);return r?m(r.status):!1}async function gn(e,t,n){let r=R.join(e,`events`),i=[];for(let e of await rt(r)){if(!ln(e,n))continue;let t=await mn(R.join(r,`${e}.json`));t&&i.push(t)}i.sort((e,t)=>{let n=e.createdAt.getTime()-t.createdAt.getTime();return n===0?e.eventId.localeCompare(t.eventId):n});let a=null;for(let e of i){if(fn(e,t)){a=e;continue}a&&pn(e,a)&&(a=null)}return a&&await hn(e,a.runId,n)||a&&await en(e,a.correlationId,n)?null:a}async function _n(e,t,n){let r=dn(t);return await J(R.join(e,`hooks`,`tokens`,`${Qt(r.token)}.json`),JSON.stringify({token:r.token,hookId:r.hookId,runId:r.runId,eventId:t.eventId})),await J(V(e,`hooks`,r.hookId,n),JSON.stringify(r,U,2)),r}async function vn(e,t,n){let r=await gn(e,e=>un(e)===t,n);return r?_n(e,r,n):null}async function yn(e,t,n){let r=await gn(e,e=>e.correlationId===t,n);return r?_n(e,r,n):null}function bn(e,t){async function n(t){let n=R.join(e,`hooks`),r=await rt(n);for(let e of r){let r=await K(R.join(n,`${e}.json`),N);if(r&&r.token===t)return{...r,isWebhook:r.isWebhook??!0}}return null}async function r(n,r){z(`hookId`,n);let i=await H(e,`hooks`,n,N,t);if(!i){let i=await yn(e,n,t);if(!i)throw new d(n);let a=r?.resolveData||`all`;return cn({...i,isWebhook:i.isWebhook??!0},a)}let a=r?.resolveData||`all`;return cn({...i,isWebhook:i.isWebhook??!0},a)}async function i(r){let i=await n(r)??await vn(e,r,t);if(!i)throw new d(r);return i}async function a(t){let n=R.join(e,`hooks`),r=t.resolveData||`all`,i=await Y({directory:n,schema:N,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,filePrefix:void 0,filter:e=>!(t.runId&&e.runId!==t.runId),getCreatedAt:()=>null,getId:e=>e.hookId});return{...i,data:i.data.map(e=>cn(e,r))}}return{get:r,getByToken:i,list:a}}async function xn(e,t){let n=R.join(e,`hooks`),r=await rt(n);for(let i of r){let r=R.join(n,`${i}.json`),a=await K(r,N);a&&a.runId===t&&(await nn(e,a.token,a.runId,a.hookId),await q(rn(e,a.token,a.runId,a.hookId)),await q(r))}}async function Sn(e,t,n,r,i){z(`runId`,t);let a=i?.resolveData??`all`;switch(n.eventType){case`run_cancelled`:{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 W(B(e,`runs`,`${t}.json`),i,{overwrite:!0}),await xn(e,t),{event:void 0,run:on(i,a)}}case`wait_completed`:case`hook_received`:{let r=`evnt_${an()}`,i=new Date,o={...n,runId:t,eventId:r,createdAt:i,specVersion:5};return await W(B(e,`events`,`${`${t}-${r}`}.json`),o),{event:_(o,a)}}default:throw Error(`Event type '${n.eventType}' not supported for legacy runs (specVersion: ${r.specVersion||`undefined`}). Please upgrade 'workflow' package.`)}}const Cn=new Map;function wn(e,t){let n=Cn.get(e),r={},i=(async()=>{n&&await n.catch(()=>void 0);try{return await t()}finally{Cn.get(e)===r.task&&Cn.delete(e)}})();return r.task=i,Cn.set(e,i),i}function Tn(e,t){return{get:(async(n,r)=>{z(`runId`,n);let i=await H(e,`runs`,n,k,t);if(!i)throw new s(n);return on(i,r?.resolveData??`all`)}),list:(async t=>{let n=t?.resolveData??`all`,r=await Y({directory:R.join(e,`runs`),schema:k,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,cursor:t?.pagination?.cursor,getCreatedAt:$(`wrun`),getId:e=>e.runId});return n===`none`?{...r,data:r.data.map(e=>({...e,input:void 0,output:void 0}))}:r}),experimentalSetAttributes:async(n,r,i)=>(z(`runId`,n),wn(n,async()=>{let a=await H(e,`runs`,n,k,t);if(!a)throw new s(n);try{ae(r,{existingKeys:Object.keys(a.attributes??{}),allowReservedAttributes:i?.allowReservedAttributes})}catch(e){throw e instanceof v,e}let o=x(a.attributes,r),c={...a,attributes:o,updatedAt:new Date};return await W(V(e,`runs`,n,t),c,{overwrite:!0}),{attributes:o}}))}}const En=M({hookId:w().optional(),runId:w(),eventId:w().optional()}),Dn=M({eventId:w()});async function On(e){try{return await K(e,En)}catch(e){if(e instanceof SyntaxError||e instanceof T)return null;throw e}}async function kn(e,t,n){if(t.hookId&&await en(e,t.hookId,n))return!0;let r=await H(e,`runs`,t.runId,k,n);return r?m(r.status):!0}async function An(e){try{return await K(e,Dn)}catch(e){if(e instanceof SyntaxError||e instanceof T)return null;throw e}}async function jn(e,t,n){return(await Y({directory:R.join(e,`events`),schema:y,filePrefix:`${t}-`,filter:e=>e.eventType===`hook_created`&&e.correlationId===n,limit:1,getCreatedAt:$(`evnt`),getId:e=>e.eventId})).data[0]?.eventId??null}async function Mn(e,t,n,r,i){let a=await H(e,`events`,`${t}-${r}`,y,i);if(!a||a.eventType!==`hook_created`||a.correlationId!==n||await H(e,`hooks`,n,N,i))return;let o=a.eventData??{};if(typeof o.token!=`string`)return;let s={runId:t,hookId:n,token:o.token,metadata:o.metadata,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:a.createdAt,specVersion:a.specVersion,isWebhook:o.isWebhook??!0,isSystem:o.isSystem??!1};await J(V(e,`hooks`,n,i),JSON.stringify(s,U,2))}async function Nn(e,t,n,r,i){let a=rn(e,t,n,r);return await J(a,JSON.stringify({eventId:i}))?i:(await An(a))?.eventId??null}function Pn(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 Fn(e,t){let n=R.join(e,`waits`),r=await rt(n);for(let e of r)e.startsWith(`${t}-`)&&await q(R.join(n,`${e}.json`))}async function In(e,t,n,r){return wn(t,async()=>{let i=await K(V(e,`runs`,t,n),k),a={...r,attributes:i?.attributes??r.attributes};return await W(V(e,`runs`,t,n),a,{overwrite:!0}),a})}function Ln(e,t){let n=4*1024*1024,r=new Map,i=new Map,a=new Map,o=0;function v(e){let t=r.get(e);if(!t)return;r.delete(e),o-=i.get(e)??0,i.delete(e);let n=a.get(t.runId);n?.delete(e),n?.size===0&&a.delete(t.runId)}function S(e){for(let t of a.get(e)??[])v(t)}function C(){r.clear(),i.clear(),a.clear(),o=0}function w(e,t,s){if(s>n)return;for(;r.size>0&&(r.size>=1e3||o+s>n);){let e=r.keys().next().value;v(e)}r.set(e,t),i.set(e,s),o+=s;let c=a.get(t.runId)??new Set;c.add(e),a.set(t.runId,c)}function T(e,t,r){if(b(e.eventType)){S(e.runId);return}let i=Buffer.byteLength(r);if(i>n)return;let a=y.safeParse(JSON.parse(r,et));a.success&&w(t,a.data,i)}async function E(n){let r=V(e,`events`,`${n.runId}-${n.eventId}`,t),i=JSON.stringify(n,U,2);await G(r,i),T(n,r,i)}let D=new Map,O=new Map;return{clearCache:C,async create(n,i,a){if(n!=null&&n!==``&&z(`runId`,n),`correlationId`in i&&typeof i.correlationId==`string`&&z(`correlationId`,i.correlationId),(i.eventType===`step_created`||i.eventType===`step_started`||i.eventType===`step_completed`||i.eventType===`step_failed`||i.eventType===`step_retrying`)&&n&&i.correlationId)return Pn(D,t?`${n}-${i.correlationId}.${t}`:`${n}-${i.correlationId}`,()=>o());if((i.eventType===`hook_created`||i.eventType===`hook_received`||i.eventType===`hook_disposed`)&&n&&i.correlationId)return Pn(O,t?`${n}-${i.correlationId}.hook.${t}`:`${n}-${i.correlationId}.hook`,()=>o());return o();async function o(){let o=`evnt_${an()}`,v=new Date,b;if(i.eventType===`run_created`&&(!n||n===``))b=`wrun_${an()}`;else if(n)b=n;else throw Error(`runId is required for non-run_created events`);if(i.eventType===`run_created`&&n&&n!==``){let e=re(b,`wrun_`);if(e)throw new c(e)}let S=i.specVersion??5,C=null;if(i.eventType!==`run_created`&&![`step_completed`,`step_retrying`].includes(i.eventType)&&(C=await H(e,`runs`,b,k,t),i.eventType===`run_started`&&!C&&`eventData`in i&&i.eventData)){let n=i.eventData;if(n.deploymentId&&n.workflowName&&n.input!==void 0){ae(Object.entries(n.attributes??{}).map(([e,t])=>({key:e,value:t})),{allowReservedAttributes:n.allowReservedAttributes===!0});let r={runId:b,deploymentId:n.deploymentId,status:`pending`,workflowName:n.workflowName,specVersion:S,executionContext:n.executionContext,input:n.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:n.attributes??{},createdAt:v,updatedAt:v};if(await J(V(e,`runs`,b,t),JSON.stringify(r,U))){let e=`evnt_${an()}`;await E({eventType:`run_created`,runId:b,eventId:e,createdAt:v,specVersion:S,eventData:{deploymentId:n.deploymentId,workflowName:n.workflowName,input:n.input,executionContext:n.executionContext,attributes:n.attributes,allowReservedAttributes:n.allowReservedAttributes}}),C=r}else C=await H(e,`runs`,b,k,t)}}if(i.eventType===`run_failed`&&!C||i.eventType===`attr_set`&&!C)throw new s(b);if(C){if(ie(C.specVersion))throw new p(C.specVersion,5);if(ne(C.specVersion))return Sn(e,b,i,C,a)}let w=i.eventType===`step_started`&&`eventData`in i&&!!i.eventData&&typeof i.eventData.stepName==`string`&&i.eventData.input!==void 0;if(C&&m(C.status)){let e=[`run_started`,`run_completed`,`run_failed`];if(i.eventType===`run_cancelled`&&C.status===`cancelled`){let e={...i,runId:b,eventId:o,createdAt:v,specVersion:S};return await E(e),{event:_(e,a?.resolveData??`all`),run:C}}if(i.eventType===`run_started`)throw new u(`Workflow run "${b}" is already in terminal state "${C.status}"`);if(e.includes(i.eventType)||i.eventType===`run_cancelled`)throw new f(`Cannot transition run from terminal state "${C.status}"`);if(i.eventType===`step_created`||i.eventType===`hook_created`||i.eventType===`wait_created`||w)throw new f(`Cannot create new entities on run in terminal state "${C.status}"`);if(i.eventType===`attr_set`)throw new f(`Cannot set attributes on run in terminal state "${C.status}"`)}let D=null;if([`step_started`,`step_completed`,`step_failed`,`step_retrying`].includes(i.eventType)&&i.correlationId){if(D=await H(e,`steps`,`${b}-${i.correlationId}`,g,t),!D&&!w)throw new c(`Step "${i.correlationId}" not found`);if(w&&D)throw new f(`Step "${i.correlationId}" already created`);if(D){if(h(D.status))throw new f(`Cannot modify step in terminal state "${D.status}"`);if(C&&m(C.status)&&D.status!==`running`)throw new u(`Cannot modify non-running step on run in terminal state "${C.status}"`)}}if([`hook_disposed`,`hook_received`].includes(i.eventType)&&i.correlationId&&(i.eventType===`hook_received`&&await en(e,i.correlationId,t)||!await H(e,`hooks`,i.correlationId,N,t)))throw new d(i.correlationId);let O={...i,runId:b,eventId:o,createdAt:v,specVersion:S};if(i.eventType===`run_started`&&`eventData`in O&&delete O.eventData,w&&`eventData`in O&&O.eventData){let{input:e,...t}=O.eventData;O.eventData=t}let A,j,M,P,oe=!1,se;if(i.eventType===`run_created`&&`eventData`in i){let n=i.eventData;if(ae(Object.entries(n.attributes??{}).map(([e,t])=>({key:e,value:t})),{allowReservedAttributes:n.allowReservedAttributes===!0}),A={runId:b,deploymentId:n.deploymentId,status:`pending`,workflowName:n.workflowName,specVersion:S,executionContext:n.executionContext,input:n.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:n.attributes??{},createdAt:v,updatedAt:v},!await J(V(e,`runs`,b,t),JSON.stringify(A,U,2)))throw new f(`Workflow run "${b}" already exists`)}else if(i.eventType===`run_started`){if(C){if(C.status===`running`)return{run:C};A=await In(e,b,t,{runId:C.runId,deploymentId:C.deploymentId,workflowName:C.workflowName,specVersion:C.specVersion,executionContext:C.executionContext,input:C.input,createdAt:C.createdAt,expiredAt:C.expiredAt,status:`running`,output:void 0,error:void 0,completedAt:void 0,startedAt:C.startedAt??v,updatedAt:v,attributes:C.attributes})}}else if(i.eventType===`run_completed`&&`eventData`in i){let n=i.eventData;C&&(A=await In(e,b,t,{runId:C.runId,deploymentId:C.deploymentId,workflowName:C.workflowName,specVersion:C.specVersion,executionContext:C.executionContext,input:C.input,createdAt:C.createdAt,expiredAt:C.expiredAt,startedAt:C.startedAt,status:`completed`,output:n.output,error:void 0,completedAt:v,updatedAt:v,attributes:C.attributes}),await Promise.all([xn(e,b),Fn(e,b)]))}else if(i.eventType===`run_failed`&&`eventData`in i){let n=i.eventData;C&&(A=await In(e,b,t,{runId:C.runId,deploymentId:C.deploymentId,workflowName:C.workflowName,specVersion:C.specVersion,executionContext:C.executionContext,input:C.input,createdAt:C.createdAt,expiredAt:C.expiredAt,startedAt:C.startedAt,status:`failed`,output:void 0,error:n.error,errorCode:n.errorCode,completedAt:v,updatedAt:v,attributes:C.attributes}),await Promise.all([xn(e,b),Fn(e,b)]))}else if(i.eventType===`run_cancelled`)C&&(A=await In(e,b,t,{runId:C.runId,deploymentId:C.deploymentId,workflowName:C.workflowName,specVersion:C.specVersion,executionContext:C.executionContext,input:C.input,createdAt:C.createdAt,expiredAt:C.expiredAt,startedAt:C.startedAt,status:`cancelled`,output:void 0,error:void 0,completedAt:v,updatedAt:v,attributes:C.attributes}),await Promise.all([xn(e,b),Fn(e,b)]));else if(i.eventType===`attr_set`&&C)A=await wn(b,async()=>{let n=await K(V(e,`runs`,b,t),k);if(!n)throw new s(b);if(ae(i.eventData.changes,{existingKeys:Object.keys(n.attributes),allowReservedAttributes:i.eventData.allowReservedAttributes===!0}),i.correlationId&&i.eventData.writer.type===`workflow`&&!await J(B(e,`.locks`,`attributes`,t?`${b}-${i.correlationId}.created.${t}`:`${b}-${i.correlationId}.created`),``))throw new f(`Attribute event "${i.correlationId}" already exists`);let r={...n,attributes:x(n.attributes,i.eventData.changes),updatedAt:v};return await W(V(e,`runs`,b,t),r,{overwrite:!0}),r});else if(i.eventType===`step_created`&&`eventData`in i){if(!await J(B(e,`.locks`,`steps`,t?`${b}-${i.correlationId}.created.${t}`:`${b}-${i.correlationId}.created`),``))throw new f(`Step "${i.correlationId}" already created`);let n=i.eventData;j={runId:b,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:v,updatedAt:v,specVersion:S},await W(V(e,`steps`,`${b}-${i.correlationId}`,t),j)}else if(i.eventType===`step_started`){if(!D&&w){let n=i.eventData;if(await J(B(e,`.locks`,`steps`,t?`${b}-${i.correlationId}.created.${t}`:`${b}-${i.correlationId}.created`),``)){let r={runId:b,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:v,updatedAt:v,specVersion:S};await W(V(e,`steps`,`${b}-${i.correlationId}`,t),r);let a=`evnt_${an()}`,o={eventType:`step_created`,runId:b,eventId:a,createdAt:v,specVersion:S,correlationId:i.correlationId,eventData:{stepName:n.stepName,input:n.input}};await W(V(e,`events`,`${b}-${a}`,t),o),D=r,oe=!0}else throw new f(`Step "${i.correlationId}" already created`)}if(D){if(D.retryAfter&&D.retryAfter.getTime()>Date.now())throw new l(`Cannot start step "${i.correlationId}": retryAfter timestamp has not been reached yet`,{retryAfter:Math.ceil((D.retryAfter.getTime()-Date.now())/1e3)});let n=`${b}-${i.correlationId}`,r=await H(e,`steps`,n,g,t);if(r&&h(r.status))throw new f(`Cannot modify step in terminal state "${r.status}"`);j={...D,status:`running`,startedAt:D.startedAt??v,attempt:D.attempt+1,retryAfter:void 0,updatedAt:v},await W(V(e,`steps`,n,t),j,{overwrite:!0})}}else if(i.eventType===`step_completed`&&`eventData`in i){let n=i.eventData;if(D){let r=`${b}-${i.correlationId}`;if(!await J(B(e,`.locks`,`steps`,t?`${r}.terminal.${t}`:`${r}.terminal`),``))throw new f(`Cannot modify step in terminal state`);j={...D,status:`completed`,output:n.result,completedAt:v,updatedAt:v},await W(V(e,`steps`,r,t),j,{overwrite:!0})}}else if(i.eventType===`step_failed`&&`eventData`in i){let n=i.eventData;if(D){let r=`${b}-${i.correlationId}`;if(!await J(B(e,`.locks`,`steps`,t?`${r}.terminal.${t}`:`${r}.terminal`),``))throw new f(`Cannot modify step in terminal state`);j={...D,status:`failed`,error:n.error,completedAt:v,updatedAt:v},await W(V(e,`steps`,r,t),j,{overwrite:!0})}}else if(i.eventType===`step_retrying`&&`eventData`in i){let n=i.eventData;if(D){let r=`${b}-${i.correlationId}`;j={...D,status:`pending`,error:n.error,retryAfter:n.retryAfter,updatedAt:v},await W(V(e,`steps`,r,t),j,{overwrite:!0})}}else if(i.eventType===`hook_created`&&`eventData`in i){let n=i.eventData,r=tn(e,n.token),s=JSON.stringify({token:n.token,hookId:i.correlationId,runId:b,eventId:o}),c=!1,l=null,u=0,d=0;for(let a=0;a<10&&(await On(r)||await vn(e,n.token,t),c=await J(r,s),!c);a++){if(l=await On(r),!l){d++,d>=3&&await q(r);continue}if(l.runId===b&&l.hookId===i.correlationId||!await kn(e,l,t))break;u++,u<3?await new Promise(e=>setTimeout(e,10)):(await q(r),l.hookId&&(await q(V(e,`hooks`,l.hookId,t)),await q(rn(e,n.token,l.runId,l.hookId)))),l=null}let p=!1;if(!c)if(l?.runId===b&&l.hookId===i.correlationId){let r;if(l.eventId)r=l.eventId;else{let a=await jn(e,b,i.correlationId);if(a!==null)throw await Mn(e,b,i.correlationId,a,t),new f(`Hook "${i.correlationId}" already created`);let s=await Nn(e,n.token,b,i.correlationId,o);if(s===null)throw new f(`Hook "${i.correlationId}" already created`);r=s}o=r;let a=te(o.replace(/^evnt_/,``))??v;O={...i,runId:b,eventId:o,createdAt:a,specVersion:S},p=!0}else{let e={eventType:`hook_conflict`,correlationId:i.correlationId,eventData:{token:n.token,...l?{conflictingRunId:l.runId}:{}},runId:b,eventId:o,createdAt:v,specVersion:S};return await E(e),{event:_(e,a?.resolveData??`all`),run:A,step:j,hook:void 0}}M={runId:b,hookId:i.correlationId,token:n.token,metadata:n.metadata,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:O.createdAt,specVersion:S,isWebhook:n.isWebhook??!1,isSystem:n.isSystem??!1},se=p?{overwrite:!0}:void 0}else if(i.eventType===`hook_disposed`){if(!await J($t(e,i.correlationId,t),``))throw new f(`Hook "${i.correlationId}" already disposed`);let n=V(e,`hooks`,i.correlationId,t),r=await H(e,`hooks`,i.correlationId,N,t);r&&(await nn(e,r.token,r.runId,r.hookId),await q(rn(e,r.token,r.runId,r.hookId))),await q(n)}else if(i.eventType===`wait_created`&&`eventData`in i){let n=`${b}-${i.correlationId}`;if(!await J(B(e,`.locks`,`waits`,t?`${n}.created.${t}`:`${n}.created`),``))throw new f(`Wait "${i.correlationId}" already exists`);let r=i.eventData;P={waitId:n,runId:b,status:`waiting`,resumeAt:r.resumeAt,completedAt:void 0,createdAt:v,updatedAt:v,specVersion:S},await W(V(e,`waits`,n,t),P)}else if(i.eventType===`wait_completed`){let n=`${b}-${i.correlationId}`,r=B(e,`.locks`,`waits`,t?`${n}.completed.${t}`:`${n}.completed`);if(!await J(r,``))throw new f(`Wait "${i.correlationId}" already completed`);let a=await H(e,`waits`,n,ee,t);if(!a)throw await I.unlink(r).catch(()=>{}),new c(`Wait "${i.correlationId}" not found`);P={...a,status:`completed`,completedAt:v,updatedAt:v},await W(V(e,`waits`,n,t),P,{overwrite:!0})}if(i.eventType===`hook_received`&&i.correlationId&&await en(e,i.correlationId,t))throw new d(i.correlationId);let ce=V(e,`events`,`${b}-${o}`,t),F=JSON.stringify(O,U,2);if(!await J(ce,F))throw i.eventType===`hook_created`&&i.correlationId&&await Mn(e,b,i.correlationId,o,t),new f(`Event "${o}" already exists for run "${b}"`);T(O,ce,F),M&&i.eventType===`hook_created`&&await W(V(e,`hooks`,M.hookId,t),M,se);let le=a?.resolveData??`all`,ue=_(O,le),de,L,fe;if(i.eventType===`run_started`&&A){let t=await Y({directory:R.join(e,`events`),schema:y,cachedItems:r,filePrefix:`${b}-`,sortOrder:`asc`,limit:1e3,getCreatedAt:$(`evnt`),getId:e=>e.eventId});de=t.data,L=t.cursor,fe=t.hasMore}if((i.eventType===`step_completed`||i.eventType===`step_failed`)&&typeof a?.sinceCursor==`string`){let t=await Y({directory:R.join(e,`events`),schema:y,filePrefix:`${b}-`,sortOrder:`asc`,cursor:a.sinceCursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});de=le===`none`?t.data.map(e=>_(e,le)):t.data,L=t.cursor,fe=t.hasMore}return{event:ue,run:A,step:j,hook:M,wait:P,events:de,cursor:L,hasMore:fe,...oe?{stepCreated:!0}:{}}}},async get(n,r,i){z(`runId`,n),z(`eventId`,r);let a=await H(e,`events`,`${n}-${r}`,y,t);if(!a)throw Error(`Event ${r} in run ${n} not found`);return _(a,i?.resolveData??`all`)},async list(t){let{runId:n}=t;z(`runId`,n);let i=t.resolveData??`all`,a=await Y({directory:R.join(e,`events`),schema:y,cachedItems:r,filePrefix:`${n}-`,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});return i===`none`?{...a,data:a.data.map(e=>_(e,i))}:a},async listByCorrelationId(t){let n=t.correlationId;z(`correlationId`,n);let i=t.resolveData??`all`,a=await Y({directory:R.join(e,`events`),schema:y,cachedItems:r,filter:e=>e.correlationId===n,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});return i===`none`?{...a,data:a.data.map(e=>_(e,i))}:a}}}function Rn(e,t){return{get:(async(n,r,i)=>{z(`runId`,n),z(`stepId`,r);let a=await H(e,`steps`,`${n}-${r}`,g,t);if(!a)throw Error(`Step ${r} in run ${n} not found`);return sn(a,i?.resolveData??`all`)}),list:(async t=>{z(`runId`,t.runId);let n=t.resolveData??`all`,r=await Y({directory:R.join(e,`steps`),schema:g,filePrefix:`${t.runId}-`,sortOrder:t.pagination?.sortOrder??`desc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`step`),getId:e=>e.stepId});return n===`none`?{...r,data:r.data.map(e=>({...e,input:void 0,output:void 0}))}:r})}}function zn(e,t){let n=Tn(e,t),r=Rn(e,t),i=Ln(e,t),a=bn(e,t);return{runs:Vt(`world.runs`,n),steps:Vt(`world.steps`,r),events:Vt(`world.events`,i),hooks:Vt(`world.hooks`,a),clearCache:()=>i.clearCache()}}const Bn=E(()=>Math.random()),Vn=M({streams:C(w())});function Hn(e){return e===1}function Un(e){let t=Buffer.from([+!!e.eof]);return Buffer.concat([t,e.chunk])}function Wn(e){return Hn(e[0])}function Gn(e){return{eof:Wn(e),chunk:Buffer.from(e.subarray(1))}}async function Kn(e){try{return await I.readdir(e)}catch(e){if(e.code===`ENOENT`)return[];throw e}}function qn(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 Jn(e,t){return z(`streamName`,t),R.join(e,t)}async function Yn(e,t,n){let r=Jn(e,t),i=await Kn(r),a=new Map;return qn(a,i,`.json`),qn(a,i,`.bin`,`.bin`,n?e=>!e.endsWith(`.${n}`):void 0),n&&qn(a,i,`.${n}.bin`),{files:[...a.keys()].sort(),extMap:a,dir:r}}function Xn(e,t){let n=t?`.${t}`:``,r=new ye,i=new Set;async function a(n,r){z(`runId`,n),z(`streamName`,r);let a=`${n}:${r}`;if(i.has(a))return;let o=V(e,`streams/runs`,n,t),s=(await H(e,`streams/runs`,n,Vn,t))?.streams??[];s.includes(r)||(s.push(r),await W(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_${Bn()}`;await a(await t,i);let l=o(s),u=Un({chunk:l,eof:!1});await G(R.join(Jn(R.join(e,`streams`,`chunks`),i),`${c}${n}.bin`),u);let d=Uint8Array.from(l);r.emit(`chunk:${i}`,{streamName:i,chunkData:d,chunkId:c})},async writeMulti(t,i,s){if(s.length===0)return;let c=s.map(()=>`chnk_${Bn()}`);await a(await t,i);let l=s.map(e=>o(e)).map(async(t,r)=>{let a=c[r],o=Un({chunk:t,eof:!1});return await G(R.join(Jn(R.join(e,`streams`,`chunks`),i),`${a}${n}.bin`),o),{chunkId:a,chunkData:Uint8Array.from(t)}});for(let e of l){let{chunkId:t,chunkData:n}=await e;r.emit(`chunk:${i}`,{streamName:i,chunkData:n,chunkId:t})}},async close(t,i){let o=`chnk_${Bn()}`;await a(await t,i),await G(R.join(Jn(R.join(e,`streams`,`chunks`),i),`${o}${n}.bin`),Un({chunk:Buffer.from([]),eof:!0})),r.emit(`close:${i}`,{streamName:i})},async list(n){return z(`runId`,n),(await H(e,`streams/runs`,n,Vn,t))?.streams??[]},async getChunks(n,r,i){let a=i?.limit??100,{files:o,extMap:s,dir:c}=await Yn(R.join(e,`streams`,`chunks`),r,t),l=0;if(i?.cursor)try{l=JSON.parse(Buffer.from(i.cursor,`base64`).toString(`utf-8`)).i}catch{l=0}let u=!1,d=[],f=0;for(let e of o){let t=s.get(e)??`.bin`,n=R.join(c,`${e}${t}`);if(f<l){if(Hn(await nt(n))){u=!0;break}f++;continue}if(d.length>=a){Hn(await nt(n))?u=!0:f++;break}let r=Gn(await tt(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 Yn(R.join(e,`streams`,`chunks`),r,t),s=!1,c=0;for(let e of i){let t=a.get(e)??`.bin`;if(Hn(await nt(R.join(o,`${e}${t}`)))){s=!0;break}c++}return{tailIndex:c-1,done:s}},async get(n,i,a=0){let o=R.join(e,`streams`,`chunks`),s=()=>{},c=null,l=!1;return new ReadableStream({async start(e){let n=new Set,u=[],d=!0,f=!1,p=t=>{if(t.chunkData.byteLength===0){n.add(t.chunkId);return}d?(n.add(t.chunkId),u.push({chunkId:t.chunkId,chunkData:Uint8Array.from(t.chunkData)})):n.has(t.chunkId)||(n.add(t.chunkId),e.enqueue(Uint8Array.from(t.chunkData)))},m=()=>{if(d){f=!0;return}l=!0,s();try{e.close()}catch{}};s=()=>{r.off(`chunk:${i}`,p),r.off(`close:${i}`,m),c&&=(clearInterval(c),null)},r.on(`chunk:${i}`,p),r.on(`close:${i}`,m);let{files:h,extMap:g,dir:_}=await Yn(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`;Hn(await nt(R.join(_,`${e}${t}`)))&&v--}let y=typeof a==`number`&&a<0?Math.max(0,v+a):a,b=!1;for(let t=y;t<h.length;t++){let r=h[t],i=r;if(n.has(i))continue;let a=g.get(r)??`.bin`,o=Gn(await tt(R.join(_,`${r}${a}`)));if(o?.eof===!0){b=!0;break}n.add(i),o.chunk.byteLength&&e.enqueue(Uint8Array.from(o.chunk))}d=!1,u.sort((e,t)=>e.chunkId.localeCompare(t.chunkId));for(let t of u)e.enqueue(Uint8Array.from(t.chunkData));if(b){l=!0,s();try{e.close()}catch{}return}if(f){l=!0,s();try{e.close()}catch{}return}for(let e=0;e<y&&e<h.length;e++)n.add(h[e]);if(l){s();return}let x=!1;c=setInterval(async()=>{if(!x){x=!0;try{let{files:r,extMap:a}=await Yn(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=Gn(await tt(R.join(_,`${t}${i}`)));if(o?.eof===!0){l=!0,s();try{e.close()}catch{}return}if(l)return;o.chunk.byteLength&&e.enqueue(Uint8Array.from(o.chunk))}}catch(e){e instanceof Error&&`code`in e||console.error(`[world-local] Unexpected polling error:`,e)}finally{x=!1}}},100)},cancel(){l=!0,s()}})}}}}function Zn(e){let t=e?Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0)):{},n={...Fe.value,...t},r=n.tag,i=Zt(n),{clearCache:a,...o}=zn(n.dataDir,r),s=n.recoverActiveRuns??!0;return{specVersion:5,...i,...o,...Vt(`world.streams`,{...Xn(n.dataDir,r),...n.streamFlushIntervalMs!==void 0&&{streamFlushIntervalMs:n.streamFlushIntervalMs}}),async start(){if(await bt(n.dataDir),!s)return;let e=r?e=>Je(e,r):Ye;await A({...o.runs,list:(t=>o.runs.list({...t,fileIdFilter:e}))},i.queue,`world-local`)},async close(){a(),await i.close()},async clear(){if(a(),r){let e=n.dataDir,t=R.join(e,`hooks`),i=await Xe(t,r),{HookSchema:a}=await import(`../../_chunks/workflow/dist-DJU_7R9s.js`).then(e=>e.t);await Promise.all(i.map(async n=>{let r=await K(R.join(t,n),a);r?.token&&(await q(R.join(t,`tokens`,`${Qt(r.token)}.json`)),await q(rn(e,r.token,r.runId,r.hookId)))})),await Promise.all([`runs`,`steps`,`events`,`hooks`,`waits`,`streams/runs`].map(async t=>{let n=R.join(e,t),i=await Xe(n,r);await Promise.all(i.map(e=>q(R.join(n,e))))})),await F.rm(R.join(e,`.locks`),{recursive:!0,force:!0}).catch(()=>{});let o=R.join(e,`streams`,`chunks`),s;try{s=await F.readdir(o,{withFileTypes:!0})}catch{s=[]}await Promise.all(s.filter(e=>e.isDirectory()).map(async e=>{let t=R.join(o,e.name),n=await Ze(t,r,`.bin`);await Promise.all(n.map(e=>F.unlink(R.join(t,e)).catch(()=>{})))})),Ge()}else Ge(),await me(n.dataDir,{recursive:!0,force:!0}),await bt(n.dataDir)}}}function Qn(e){return Zn(e)}export{ut as DataDirAccessError,dt as DataDirVersionError,Qn as createLocalWorld,Zn as createWorld,gt as ensureDataDir,bt as initDataDir,ft as parseVersion};
1
+ import{a as e,i as t,t as n}from"../../_chunks/workflow/chunk-BHKSVoKr.js";import{i as r,n as i,r as a,t as o}from"../../_chunks/workflow/dist-CttsoN4D.js";import{C as s,T as c,h as l,l as u,o as d,r as f,u as p}from"../../_chunks/workflow/dist-DpDDcpTl.js";import{A as m,B as h,D as g,E as _,G as v,H as y,I as b,J as x,K as ee,L as te,M as S,O as ne,R as C,V as re,W as w,Z as T,_ as ie,c as ae,et as E,f as oe,it as D,j as se,m as O,n as ce,nt as k,o as A,r as le,s as ue,u as j,y as M,z as de}from"../../_chunks/workflow/dist-DnBjuNAZ.js";import{t as N}from"../../_chunks/workflow/undici-fb54XL8i.js";import{createHash as P}from"node:crypto";import{promisify as fe}from"node:util";import{fileURLToPath as pe}from"node:url";import{promises as F}from"node:fs";import I,{access as me,constants as he,mkdir as ge,readFile as L,readdir as _e,readlink as ve,rm as ye,unlink as be,writeFile as xe}from"node:fs/promises";import R from"node:path";import{execFile as Se}from"node:child_process";import{setTimeout as Ce}from"node:timers/promises";import{EventEmitter as we}from"node:events";function Te(e,t=10){let n=parseInt(e,t);if(!Number.isNaN(n)&&n>=0&&n<=65535)return n}function Ee(e,t){let n=[],r=e.trim().split(`
2
+ `);for(let e of r){let r=e.trim().split(/\s+/);if(r.length<5||r[0]?.toUpperCase()!==`TCP`)continue;let[,i,,a,o]=r;if(a?.toUpperCase()!==`LISTENING`||o!==t.toString())continue;let s=i.lastIndexOf(`:`);if(s===-1)continue;let c=Te(i.slice(s+1));c!==void 0&&n.push(c)}return n}const De=fe(Se);function Oe(e,t=10){let n=parseInt(e,t);if(!Number.isNaN(n)&&n>=0&&n<=65535)return n}const ke=((e,t)=>e.join(t))([``,`proc`],`/`);async function Ae(e){let t=[`${ke}/net/tcp`,`${ke}/net/tcp6`],n=[],r=new Set,i=`${ke}/${e}/fd`;try{let e=(await _e(i)).sort((e,t)=>Number.parseInt(e,10)-Number.parseInt(t,10)),t=await Promise.allSettled(e.map(async e=>(await ve(`${i}/${e}`)).match(/^socket:\[(\d+)\]$/)?.[1]??null));for(let e of t)e.status===`fulfilled`&&e.value&&(n.push(e.value),r.add(e.value))}catch{return[]}if(n.length===0)return[];let a=new Map;for(let e of t)try{let t=(await L(e,`utf8`)).split(`
3
+ `).slice(1);for(let e of t){if(!e.trim())continue;let t=e.trim().split(/\s+/);if(t.length<10)continue;let n=t[1],i=t[3],o=t[9];if(!n||i!==`0A`||!o||!r.has(o))continue;let s=n.indexOf(`:`);if(s===-1)continue;let c=n.slice(s+1);if(!c)continue;let l=Oe(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 je(e){try{let{stdout:t}=await De(`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=Oe(t.slice(e+1));r!==void 0&&n.push(r)}}}return n}catch{return[]}}async function Me(e){try{let{stdout:t}=await De(`cmd`,[`/c`,`netstat -ano -p tcp | findstr LISTENING`]);return Ee(t,e)}catch{return[]}}async function Ne(){let{pid:e,platform:t}=process;try{switch(t){case`linux`:return await Ae(e);case`darwin`:return await je(e);case`win32`:return await Me(e);default:return[]}}catch(e){return process.env.NODE_ENV===`development`&&console.debug(`[getAllPorts] Detection failed:`,e),[]}}const Pe=`${o}/flow?__health`;async function Fe(e,t={}){let{endpoint:n=Pe,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 Ie(e){let t=await Ne();if(t.length===0)return;if(t.length===1)return t[0];let n=(await Promise.all(t.map(async t=>({port:t,isWorkflow:await Fe(t,e)})))).find(e=>e.isWorkflow);return n?n.port:(process.env.NODE_ENV===`development`&&console.debug(`[getWorkflowPort] Probing failed, falling back to first port:`,t[0]),t[0])}function Le(e){let t={get value(){let n=e();return Object.defineProperty(t,"value",{value:n}),n}};return t}const Re=()=>process.env.WORKFLOW_LOCAL_DATA_DIR||`.workflow-data`,ze=()=>process.env.WORKFLOW_LOCAL_BASE_URL,Be=Le(()=>({dataDir:Re(),baseUrl:ze()}));function Ve(e){return e.baseUrl??process.env.WORKFLOW_LOCAL_BASE_URL??i(`http://localhost`)}async function He(e){if(e.baseUrl)return e.baseUrl;if(process.env.WORKFLOW_LOCAL_BASE_URL)return process.env.WORKFLOW_LOCAL_BASE_URL;if(typeof e.port==`number`)return i(`http://localhost:${e.port}`);if(process.env.PORT)return i(`http://localhost:${process.env.PORT}`);let t=await Ie({endpoint:a()});if(t)return i(`http://localhost:${t}`);throw Error(`Unable to resolve base URL for workflow queue.`)}const Ue=A(()=>Math.random());function We(e){let t=typeof e==`string`?e:String(e);return t.length>48?`${t.slice(0,48)}…`:t}var Ge=class extends c{constructor(e,t){super(`Unsafe ${e} "${We(t)}": must not be empty, contain ".", "/", "\\", or null bytes`),this.name=`UnsafeEntityIdError`}static is(e){return e instanceof Error&&e.name===`UnsafeEntityIdError`}};function z(e,t){if(t.length===0||t.startsWith(`.`)||t.includes(`/`)||t.includes(`\\`)||t.includes(`\0`)||t.includes(`.`))throw new Ge(e,t)}function B(e,...t){let n=R.resolve(e),r=R.resolve(e,...t);if(r!==n&&!r.startsWith(n+R.sep))throw new Ge(`path`,t.join(`/`));return r}const Ke=process.platform===`win32`;async function qe(e,t=5){if(!Ke)return e();let n=[`EPERM`,`EBUSY`,`EACCES`];for(let r=0;r<=t;r++)try{return await e()}catch(e){if(!(r<t&&n.includes(e.code)))throw e;let i=10*2**r+Math.random()*10;await new Promise(e=>setTimeout(e,i))}throw Error(`Retry loop exited unexpectedly`)}const Je=new Set,Ye=new Set;function Xe(){Je.clear(),Ye.clear()}const Ze=/\.[a-zA-Z][a-zA-Z0-9-]*$/;function Qe(e){return e.replace(Ze,``)}function $e(e,t){return e.endsWith(`.${t}`)}function et(e){return!Ze.test(e)}function V(e,t,n,r){return z(`fileId`,n),r!==void 0&&z(`tag`,r),B(e,t,r?`${n}.${r}.json`:`${n}.json`)}async function H(e,t,n,r,i){if(z(`fileId`,n),i!==void 0&&z(`tag`,i),i){let a=await G(B(e,t,`${n}.${i}.json`),r);if(a!==null)return a}return G(B(e,t,`${n}.json`),r)}async function tt(e,t){let n=`.${t}.json`;try{return(await F.readdir(e)).filter(e=>e.endsWith(n))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function nt(e,t,n){let r=`.${t}${n}`;try{return(await F.readdir(e)).filter(e=>e.endsWith(r))}catch(e){if(e.code===`ENOENT`)return[];throw e}}async function rt(e){let t=R.resolve(e);if(!Ye.has(t))try{await F.mkdir(t,{recursive:!0}),Ye.add(t)}catch{}}async function it(e,t){await rt(e);try{return await t()}catch(n){if(n.code!==`ENOENT`)throw n;return Ye.delete(R.resolve(e)),await rt(e),t()}}function U(e,t){return t instanceof Uint8Array?{__type:`Uint8Array`,data:Buffer.from(t).toString(`base64`)}:t}function at(e,t){return typeof t==`object`&&t&&t.__type===`Uint8Array`&&typeof t.data==`string`?new Uint8Array(Buffer.from(t.data,`base64`)):t}async function W(e,t,n){return ot(e,JSON.stringify(t,U,2),n)}async function ot(e,t,n){if(!n?.overwrite){if(Je.has(e))throw new f(`File ${e} already exists and 'overwrite' is false`);try{throw await F.access(e),Je.add(e),new f(`File ${e} already exists and 'overwrite' is false`)}catch(e){if(e.code!==`ENOENT`)throw e}}let r=`${e}.tmp.${Ue()}`,i=!1;try{await it(R.dirname(e),async()=>{await F.writeFile(r,t),i=!0,await qe(()=>F.rename(r,e))}),Je.add(e)}catch(e){throw i&&await qe(()=>F.unlink(r),3).catch(()=>{}),e}}async function G(e,t){try{let n=await F.readFile(e,`utf-8`);return t.parse(JSON.parse(n,at))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function st(e){return await F.readFile(e)}async function ct(e){let t=await F.open(e,`r`);try{let e=Buffer.allocUnsafe(1),{bytesRead:n}=await t.read(e,0,1,0);return n===0?void 0:e[0]}finally{await t.close()}}async function K(e){try{await F.unlink(e)}catch(e){if(e.code!==`ENOENT`)throw e}}async function q(e,t){let n=`${e}.tmp.${Ue()}`,r=!1;try{return await it(R.dirname(e),async()=>{await F.writeFile(n,t,{flag:`wx`}),r=!0;try{return await qe(()=>F.link(n,e)),!0}catch(e){if(e.code===`EEXIST`)return!1;throw e}})}finally{r&&await qe(()=>F.unlink(n),3).catch(()=>{})}}async function J(e){return lt(e,`.json`)}async function lt(e,t){try{return(await F.readdir(e)).filter(e=>e.endsWith(t)).map(e=>e.slice(0,-t.length))}catch(e){if(e.code===`ENOENT`)return[];throw e}}function ut(e){if(!e)return null;let t=e.split(`|`);return{timestamp:new Date(t[0]),id:t[1]||null}}function dt(e,t){return t?`${e.toISOString()}|${t}`:e.toISOString()}async function Y(e){let{directory:t,schema:n,cachedItems:r,filePrefix:i,fileIdFilter:a,filter:o,sortOrder:s=`desc`,limit:c=20,cursor:l,getCreatedAt:u,getId:d}=e;i!==void 0&&z(`filePrefix`,i);let f=R.resolve(t),p=await J(f),m=i?p.filter(e=>e.startsWith(i)):p,h=a?m.filter(a):m,g=ut(l),_=h;g&&(_=h.filter(e=>{let t=u(`${e}.json`);if(t){let e=g.timestamp.getTime(),n=t.getTime();return g.id?s===`desc`?n<=e:n>=e:s===`desc`?n<e:n>e}return!0}));let v=[];for(let e=0;e<_.length;e+=32){let t=_.slice(e,e+32),i=await Promise.all(t.map(async e=>{let t=R.join(f,`${e}.json`);try{let e=r?.get(t);return e===void 0?await G(t,n):structuredClone(e)}catch(t){if(t instanceof D)return console.warn(`Skipping item ${e} due to malformed JSON: ${t.message}`),null;throw t}}));for(let e of i)if(e&&!(o&&!o(e))){if(g){let t=e.createdAt.getTime(),n=g.timestamp.getTime();if(s===`desc`){if(t>n||t===n&&g.id&&d&&d(e)>=g.id)continue}else if(t<n||t===n&&g.id&&d&&d(e)<=g.id)continue}v.push(e)}}v.sort((e,t)=>{let n=e.createdAt.getTime(),r=t.createdAt.getTime(),i=s===`asc`?n-r:r-n;if(i===0&&d){let n=d(e),r=d(t);return s===`asc`?n.localeCompare(r):r.localeCompare(n)}return i});let y=v.length>c,b=y?v.slice(0,c):v;return{data:b,cursor:b.length>0?dt(b[b.length-1].createdAt,d?.(b[b.length-1])):null,hasMore:y}}let X=null;function ft(){return typeof import.meta.url==`string`&&import.meta.url?R.dirname(pe(import.meta.url)):null}async function pt(){if(X)return X;let e=ft();if(e)try{let t=await L(R.join(e,`../package.json`),`utf-8`);return X=JSON.parse(t),X}catch{}return X={name:`@workflow/world-local`,version:`5.0.0-beta.26`},X}const mt=`version.txt`;var ht=class extends Error{dataDir;code;constructor(e,t,n){super(e),this.name=`DataDirAccessError`,this.dataDir=t,this.code=n}},gt=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 _t(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 Z(e){let t=`${e.major}.${e.minor}.${e.patch}`;return e.prerelease?`${t}-${e.prerelease}`:t}function vt(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:_t(t.substring(n+1))}}function yt(e,t){return`${e}@${Z(t)}`}function bt(e,t){console.log(`[world-local] Upgrading from version ${Z(e)} to ${Z(t)}`)}async function xt(e){let t=R.resolve(e);try{await ge(t,{recursive:!0})}catch(e){let n=e;if(n.code!==`EEXIST`)throw new ht(`Failed to create data directory "${t}": ${n.message}`,t,n.code)}try{await me(t,he.R_OK)}catch(e){let n=e;throw new ht(`Data directory "${t}" is not readable: ${n.message}`,t,n.code)}let n=R.join(t,`.workflow-write-test-${Date.now()}`);try{await xe(n,``),await be(n).catch(e=>{if(e.code!==`ENOENT`)throw e})}catch(e){let n=e;throw new ht(`Data directory "${t}" is not writable: ${n.message}`,t,n.code)}}async function St(e){let t=R.join(R.resolve(e),mt);try{return vt(await L(t,`utf-8`))}catch(e){if(e.code===`ENOENT`)return null;throw e}}async function Ct(e,t){await xe(R.join(R.resolve(e),mt),yt((await pt()).name,t))}function wt(e,t){return t||Z(e)}async function Tt(e){await xt(e);let t=await pt(),n=_t(t.version),r=await St(e);if(r===null){await Ct(e,n);return}let{version:i}=r;if(Z(i)!==Z(n))try{bt(i,n),await Ct(e,n)}catch(e){let r=wt(i,e instanceof gt?e.suggestedVersion:void 0);throw console.error(`[world-local] Failed to upgrade data directory from version ${Z(i)} to ${Z(n)}:`,e instanceof Error?e.message:e),console.error(`[world-local] Data is not compatible with the current version. Please downgrade to ${t.name}@${r}`),e}}let Et=null;async function Dt(){return Et||=import(`../../_chunks/workflow/src-CQuMexnO.js`).then(t=>e(t.t(),1)).catch(()=>null),Et}let Ot=null;async function kt(){return Ot||=Dt().then(e=>e?e.trace.getTracer(`workflow`):null),Ot}async function At(e,...t){let[n,r]=await Promise.all([kt(),Dt()]),{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 jt(e){let t=await Dt();if(t)return t.SpanKind[e]}function Q(...e){return t=>Object.fromEntries(e.map(e=>[e,t]))}const Mt=Q(`peer.service`),Nt=Q(`rpc.system`),Pt=Q(`rpc.service`),Ft=Q(`rpc.method`),It=Q(`workflow.run.id`),Lt=Q(`step.id`),Rt={peerService:`world-local`,rpcSystem:`local`,rpcService:`world-local`},zt={"world.runs.get":0,"world.runs.experimentalSetAttributes":0,"world.steps.get":0,"world.events.create":0,"world.events.get":0},Bt=new Set([`world.steps.list`,`world.events.list`,`world.hooks.list`]);function Vt(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 Ht(e,t){return typeof e[t]==`string`?e[t]:void 0}function Ut(e){if(typeof e!=`object`||!e)return;let t=e.runId;return typeof t==`string`?t:void 0}function Wt(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 Gt(e,t,n){let r=`${e}.${t}`,i={},a=zt[r],o=a===void 0?Bt.has(r)?Ut(n[0]):void 0:Ht(n,a);if(o&&Object.assign(i,It(o)),r===`world.steps.get`){let e=Ht(n,1);e&&Object.assign(i,Lt(e))}return i}function Kt(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=Vt(t);r&&(n=`${e}.${a} ${r}`)}return At(n,{kind:await jt(`INTERNAL`)},async r=>{r?.setAttributes({...Mt(Rt.peerService),...Nt(Rt.rpcSystem),...Pt(Rt.rpcService),...Ft(n),...Gt(e,a,t)});let o=await i(...t),s=Wt(o);return s&&r?.setAttributes(It(s)),o})}}return n}var qt=n((e=>{var n=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,"__esModule",{value:!0}),e.RateLimit=e.Sema=void 0;let r=n(t(`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}};e.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)}}e.RateLimit=f}))(),Jt=N(),Yt=class{contentType=`application/json`;serialize(e){return Buffer.from(JSON.stringify(e,U))}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,at)}};const Xt=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_MAX_VISIBILITY??`0`,10)||1/0,Zt=2147483647,Qt=parseInt(process.env.WORKFLOW_LOCAL_QUEUE_CONCURRENCY??`0`,10)||1e3,$t=`Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer`;function en(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($t))return!0;t=`cause`in t?t.cause:void 0}return!1}function tn(e){let{kind:t,prefix:n}=ie(e);return{pathname:t===`workflow`?`flow`:`step`,prefix:n}}function nn(e){let t=new Jt.Agent({headersTimeout:0,connections:1e3,keepAliveTimeout:3e4}),n=new Yt,i=A(),a=new qt.Sema(Qt),o=new AbortController,s=o.signal,c=new Map,l=new Map,u=async(o,u,d)=>{let f=[];if(d?.idempotencyKey){let e=c.get(d.idempotencyKey);if(e)return{messageId:e}}let p=n.serialize(u),{pathname:m,prefix:h}=tn(o),g=oe.parse(`msg_${i()}`),_=u,v=_.runId??_.workflowRunId??void 0,y=_.stepId??void 0;if(d?.idempotencyKey){let e=d.idempotencyKey;c.set(e,g),f.push(()=>{c.delete(e)})}return(async()=>{d?.delaySeconds&&d.delaySeconds>0&&await Ce(Math.min(d.delaySeconds*1e3,Zt),void 0,{signal:s}),a.tryAcquire()||(console.warn(`[world-local]: concurrency limit (${Qt}) reached, waiting for queue to free up`),await a.acquire());let n=0;try{for(let i=0;i<256;i++){let a={...d?.headers,"content-type":`application/json`,"x-vqs-queue-name":o,"x-vqs-message-id":g,"x-vqs-message-attempt":String(n+1)},c=l.get(h),u;try{if(c)u=await c(new Request(r(Ve(e),{type:m}),{method:`POST`,headers:a,body:p}));else{let n=await He(e);u=await fetch(r(n,{type:m}),{method:`POST`,duplex:`half`,dispatcher:t,headers:a,body:p})}}catch(e){let t=e?.name;if(s.aborted||t===`AbortError`||t===`ResponseAborted`)return;if(en(e))throw e;console.error(`[world-local] Queue delivery failed at the transport (loop ${i+1}), retrying`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y},error:String(e)}),await Ce(5e3,void 0,{signal:s});continue}n++;let f=await u.text();if(u.ok){try{let e=Number(JSON.parse(f).timeoutSeconds);if(Number.isFinite(e)&&e>=0){e>0&&await Ce(Math.min(e*1e3,Zt),void 0,{signal:s});continue}}catch{}return}console.error(`[world-local] Queue message failed (attempt ${n}, HTTP ${u.status})`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y},handlerError:f}),await Ce(5e3,void 0,{signal:s})}console.error(`[world-local] Queue message exhausted safety limit (256 attempts)`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y}})}finally{a.release()}})().catch(e=>{e?.name===`AbortError`||e?.name===`ResponseAborted`||(en(e)?console.error(`[local world] Queue operation failed: detected "${$t}". This usually means a Next.js proxy/middleware consumed Workflow's internal request before the executor could read it. Exclude \`/.well-known/workflow/*\` from your matcher. See https://workflow-sdk.dev/docs/getting-started/next#configure-proxy-handler`,{queueName:o,messageId:g,...v&&{runId:v},...y&&{stepId:y},originalError:e}):console.error(`[local world] Queue operation failed:`,e))}).finally(()=>{for(let e of f)e()}),{messageId:g}},d=E({"x-vqs-queue-name":O,"x-vqs-message-id":oe,"x-vqs-message-attempt":x()});return{queue:u,createQueueHandler:(e,t)=>async n=>{let r=d.safeParse(Object.fromEntries(n.headers));if(!r.success||!n.body)return Response.json({error:n.body?`Missing required headers`:`Missing request body`},{status:400});let i=r.data[`x-vqs-queue-name`],a=r.data[`x-vqs-message-id`],o=r.data[`x-vqs-message-attempt`];if(!i.startsWith(e))return Response.json({error:`Unhandled queue`},{status:400});let s=await new Yt().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,Xt)),n==null?Response.json({ok:!0}):Response.json({timeoutSeconds:n})}catch(e){return Response.json(String(e),{status:500})}},getDeploymentId:async()=>`dpl_local@${(await pt()).version}`,registerHandler(e,t){l.set(e,t)},async close(){s.aborted||(o.abort(),await t.close())}}}function rn(e){return P(`sha256`).update(e).digest(`hex`)}function an(e,t,n){return B(e,`.locks`,`hooks`,n?`${t}.disposed.${n}`:`${t}.disposed`)}async function on(e,t,n){let r=[an(e,t)];n&&r.push(an(e,t,n));for(let e of r)try{return await I.access(e),!0}catch{}return!1}function sn(e,t){return R.join(e,`hooks`,`tokens`,`${rn(t)}.json`)}async function cn(e,t,n,r){let i=sn(e,t),a;try{a=JSON.parse(await I.readFile(i,`utf8`))}catch{return}a.runId!==n||a.hookId!==r||await I.unlink(i).catch(()=>{})}function ln(e,t,n,r){let i=P(`sha256`).update(`${t}\x00${n}\x00${r}`).digest(`hex`);return R.join(e,`hooks`,`tokens`,`${i}.recovery.json`)}const un=A(()=>Math.random()),$=e=>{let t=RegExp(`^${e}_`,`g`);return n=>{let r=Qe(n.replace(/\.json$/,``))+`.json`,i=r.indexOf(`-`);return i===-1?ce(r.replace(/\.json$/,``).replace(t,``)):e===`step`?null:ce(r.substring(i+1).replace(/\.json$/,``).replace(t,``))}},dn=E({runId:k()}),fn=E({hookId:k(),tag:k().optional()});function pn(e,t){return B(e,`hooks`,`token-index`,rn(t))}function mn(e,t){return z(`hookId`,t),B(e,`hooks`,`id-index`,t)}function hn(e){return B(e,`hooks`,`by-run`)}function gn(e){let t=Qe(e);return t===e?void 0:e.slice(t.length+1)}function _n(e,t){return t?et(e)||$e(e,t):et(e)}async function vn(e){try{return await G(e,S)}catch(e){if(e instanceof SyntaxError||e instanceof D)return null;throw e}}async function yn(e,t,n,r,i,a){z(`runId`,n),z(`eventId`,i),a!==void 0&&z(`tag`,a);let o=a?`${i}.${a}.json`:`${i}.json`,s=JSON.stringify({runId:n});await Promise.all([q(R.join(pn(e,t),o),s),q(R.join(mn(e,r),o),s)])}function bn(e,t,n,r){return V(e,`hooks/by-run`,`${t}-${n}`,r)}async function xn(e,t,n,r){await q(bn(e,t,n,r),JSON.stringify(r?{hookId:n,tag:r}:{hookId:n}))}async function Sn(e,t,n,r){await K(bn(e,t,n,r)),r&&await K(bn(e,t,n))}async function Cn(e,t){z(`runId`,t);let n=hn(e),r=`${t}-`,i=[];for(let e of await J(n)){if(!e.startsWith(r))continue;let t=null;try{t=await G(R.join(n,`${e}.json`),fn)}catch(e){if(!(e instanceof SyntaxError||e instanceof D))throw e}i.push({fileId:e,hookId:t?.hookId??null,tag:t?.tag})}return i}async function wn(e,t){await K(R.join(hn(e),`${t}.json`))}const Tn=new Map;function En(){Tn.clear()}async function Dn(e){let t=R.resolve(e),n=Tn.get(t);return n||(n=kn(t).catch(e=>{throw Tn.delete(t),e}),Tn.set(t,n)),n}async function On(e,t,n){for(let r=0;r<e.length;r+=t)await Promise.all(e.slice(r,r+t).map(n))}async function kn(e){let t=R.join(e,`hooks`,`.hook-index-complete`);try{await I.access(t);return}catch{}let n=R.join(e,`events`);await On(await J(n),32,async t=>{let r=await vn(R.join(n,`${t}.json`));if(!r||r.eventType!==`hook_created`||typeof r.correlationId!=`string`)return;let i=r.eventData?.token;if(typeof i==`string`)try{await yn(e,i,r.runId,r.correlationId,r.eventId,gn(t))}catch{}});let r=R.join(e,`hooks`);await On(await J(r),32,async t=>{let n=null;try{n=await G(R.join(r,`${t}.json`),M)}catch(e){if(!(e instanceof SyntaxError||e instanceof D))throw e}if(n)try{await xn(e,n.runId,n.hookId,gn(t))}catch{}}),await q(t,``)}async function An(e,t,n,r){await Dn(e);let i;try{i=t.kind===`token`?pn(e,t.token):mn(e,t.hookId)}catch{return null}let a=(await J(i)).filter(e=>_n(e,r)).sort((e,t)=>Qe(t).localeCompare(Qe(e)));for(let t of a){let r=null;try{r=await G(R.join(i,`${t}.json`),dn)}catch(e){if(!(e instanceof SyntaxError||e instanceof D))throw e}if(!r)continue;let a=Qe(t),o;try{o=V(e,`events`,`${r.runId}-${a}`,gn(t))}catch{continue}let s=await vn(o);if(s&&s.eventType===`hook_created`&&typeof s.correlationId==`string`&&n(s))return s}return null}function jn(e,t){return t===`none`?{...e,input:void 0,output:void 0}:e}function Mn(e,t){return t===`none`?{...e,input:void 0,output:void 0}:e}function Nn(e,t){if(t===`none`){let{metadata:t,...n}=e;return n}return e}function Pn(e){if(e.eventType!==`hook_created`)return;let t=e.eventData.token;return typeof t==`string`?t:void 0}function Fn(e){let{token:t,metadata:n,isWebhook:r,isSystem:i}=e.eventData;return{runId:e.runId,hookId:e.correlationId,token:t,metadata:n,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:e.createdAt,specVersion:e.specVersion,isWebhook:r??!0,isSystem:i??!1}}function In(e,t){return e.eventType===`hook_created`&&typeof e.correlationId==`string`&&t(e)}async function Ln(e,t,n){let r=await H(e,`runs`,t,m,n);return r?se(r.status):!1}async function Rn(e,t,n,r){let i=await An(e,t,e=>In(e,n),r);return!i||!In(i,n)||await Ln(e,i.runId,r)||await on(e,i.correlationId,r)?null:i}async function zn(e,t,n){let r=Fn(t);return await q(R.join(e,`hooks`,`tokens`,`${rn(r.token)}.json`),JSON.stringify({token:r.token,hookId:r.hookId,runId:r.runId,eventId:t.eventId})),await xn(e,r.runId,r.hookId,n),await q(V(e,`hooks`,r.hookId,n),JSON.stringify(r,U,2)),r}async function Bn(e,t,n){let r=await Rn(e,{kind:`token`,token:t},e=>Pn(e)===t,n);return r?zn(e,r,n):null}async function Vn(e,t,n){let r=await Rn(e,{kind:`id`,hookId:t},e=>e.correlationId===t,n);return r?zn(e,r,n):null}function Hn(e,t){let n=E({hookId:k().optional()});async function r(r){let i=null;try{i=await G(sn(e,r),n)}catch(e){if(!(e instanceof SyntaxError||e instanceof D))throw e}if(i?.hookId)try{let n=await H(e,`hooks`,i.hookId,M,t);if(n&&n.token===r)return{...n,isWebhook:n.isWebhook??!0}}catch(e){if(!Ge.is(e))throw e}let a=R.join(e,`hooks`),o=await J(a);for(let e of o){let t=await G(R.join(a,`${e}.json`),M);if(t&&t.token===r)return{...t,isWebhook:t.isWebhook??!0}}return null}async function i(n,r){z(`hookId`,n);let i=await H(e,`hooks`,n,M,t);if(!i){let i=await Vn(e,n,t);if(!i)throw new d(n);let a=r?.resolveData||`all`;return Nn({...i,isWebhook:i.isWebhook??!0},a)}let a=r?.resolveData||`all`;return Nn({...i,isWebhook:i.isWebhook??!0},a)}async function a(n){let i=await r(n)??await Bn(e,n,t);if(!i)throw new d(n);return i}async function o(t){let n=R.join(e,`hooks`),r=t.resolveData||`all`,i=await Y({directory:n,schema:M,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,filePrefix:void 0,filter:e=>!(t.runId&&e.runId!==t.runId),getCreatedAt:()=>null,getId:e=>e.hookId});return{...i,data:i.data.map(e=>Nn(e,r))}}return{get:i,getByToken:a,list:o}}async function Un(e,t){await Dn(e);for(let n of await Cn(e,t)){if(n.hookId){let r=null,i=null;try{i=V(e,`hooks`,n.hookId,n.tag),r=await G(i,M)}catch(e){if(!Ge.is(e)&&!(e instanceof SyntaxError||e instanceof D))throw e}r&&i&&r.runId===t&&(await cn(e,r.token,r.runId,r.hookId),await K(ln(e,r.token,r.runId,r.hookId)),await K(i))}await wn(e,n.fileId)}}async function Wn(e,t,n,r,i){z(`runId`,t);let a=i?.resolveData??`all`;switch(n.eventType){case`run_cancelled`:{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 W(B(e,`runs`,`${t}.json`),i,{overwrite:!0}),await Un(e,t),{event:void 0,run:jn(i,a)}}case`wait_completed`:case`hook_received`:{let r=`evnt_${un()}`,i=new Date,o={...n,runId:t,eventId:r,createdAt:i,specVersion:5};return await W(B(e,`events`,`${`${t}-${r}`}.json`),o),{event:y(o,a)}}default:throw Error(`Event type '${n.eventType}' not supported for legacy runs (specVersion: ${r.specVersion||`undefined`}). Please upgrade 'workflow' package.`)}}const Gn=new Map;function Kn(e,t){let n=Gn.get(e),r={},i=(async()=>{n&&await n.catch(()=>void 0);try{return await t()}finally{Gn.get(e)===r.task&&Gn.delete(e)}})();return r.task=i,Gn.set(e,i),i}function qn(e,t){return{get:(async(n,r)=>{z(`runId`,n);let i=await H(e,`runs`,n,m,t);if(!i)throw new s(n);return jn(i,r?.resolveData??`all`)}),list:(async t=>{let n=t?.resolveData??`all`,r=await Y({directory:R.join(e,`runs`),schema:m,fileIdFilter:t?.fileIdFilter,filter:e=>!(t?.workflowName&&e.workflowName!==t.workflowName||t?.status&&e.status!==t.status),sortOrder:t?.pagination?.sortOrder??`desc`,limit:t?.pagination?.limit??200,cursor:t?.pagination?.cursor,getCreatedAt:$(`wrun`),getId:e=>e.runId});return n===`none`?{...r,data:r.data.map(e=>({...e,input:void 0,output:void 0}))}:r}),experimentalSetAttributes:async(n,r,i)=>(z(`runId`,n),Kn(n,async()=>{let a=await H(e,`runs`,n,m,t);if(!a)throw new s(n);try{ee(r,{existingKeys:Object.keys(a.attributes??{}),allowReservedAttributes:i?.allowReservedAttributes})}catch(e){throw e instanceof w,e}let o=v(a.attributes,r),c={...a,attributes:o,updatedAt:new Date};return await W(V(e,`runs`,n,t),c,{overwrite:!0}),{attributes:o}}))}}const Jn=E({hookId:k().optional(),runId:k(),eventId:k().optional()}),Yn=E({eventId:k()});async function Xn(e){try{return await G(e,Jn)}catch(e){if(e instanceof SyntaxError||e instanceof D)return null;throw e}}async function Zn(e,t,n){if(t.hookId&&await on(e,t.hookId,n))return!0;let r=await H(e,`runs`,t.runId,m,n);return r?se(r.status):!0}async function Qn(e){try{return await G(e,Yn)}catch(e){if(e instanceof SyntaxError||e instanceof D)return null;throw e}}async function $n(e,t,n){return(await Y({directory:R.join(e,`events`),schema:S,filePrefix:`${t}-`,filter:e=>e.eventType===`hook_created`&&e.correlationId===n,limit:1,getCreatedAt:$(`evnt`),getId:e=>e.eventId})).data[0]?.eventId??null}async function er(e,t,n,r,i){let a=await H(e,`events`,`${t}-${r}`,S,i);if(!a||a.eventType!==`hook_created`||a.correlationId!==n||await H(e,`hooks`,n,M,i))return;let o=a.eventData??{};if(typeof o.token!=`string`)return;let s={runId:t,hookId:n,token:o.token,metadata:o.metadata,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:a.createdAt,specVersion:a.specVersion,isWebhook:o.isWebhook??!0,isSystem:o.isSystem??!1};await yn(e,o.token,t,n,r,i),await xn(e,t,n,i),await q(V(e,`hooks`,n,i),JSON.stringify(s,U,2))}async function tr(e,t,n,r,i){let a=ln(e,t,n,r);return await q(a,JSON.stringify({eventId:i}))?i:(await Qn(a))?.eventId??null}function nr(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 rr(e,t){let n=R.join(e,`waits`),r=await J(n);for(let e of r)e.startsWith(`${t}-`)&&await K(R.join(n,`${e}.json`))}async function ir(e,t,n,r){return Kn(t,async()=>{let i=await G(V(e,`runs`,t,n),m),a={...r,attributes:i?.attributes??r.attributes};return await W(V(e,`runs`,t,n),a,{overwrite:!0}),a})}function ar(e,t){let n=4*1024*1024,r=new Map,i=new Map,a=new Map,o=0;function x(e){let t=r.get(e);if(!t)return;r.delete(e),o-=i.get(e)??0,i.delete(e);let n=a.get(t.runId);n?.delete(e),n?.size===0&&a.delete(t.runId)}function w(e){for(let t of a.get(e)??[])x(t)}function T(){r.clear(),i.clear(),a.clear(),o=0}function ie(e,t,s){if(s>n)return;for(;r.size>0&&(r.size>=1e3||o+s>n);){let e=r.keys().next().value;x(e)}r.set(e,t),i.set(e,s),o+=s;let c=a.get(t.runId)??new Set;c.add(e),a.set(t.runId,c)}function E(e,t,r){if(h(e.eventType)){w(e.runId);return}let i=Buffer.byteLength(r);if(i>n)return;let a=S.safeParse(JSON.parse(r,at));a.success&&ie(t,a.data,i)}async function oe(n){let r=V(e,`events`,`${n.runId}-${n.eventId}`,t),i=JSON.stringify(n,U,2);await ot(r,i),E(n,r,i)}let D=new Map,O=new Map;return{clearCache:T,async create(n,i,a){if(n!=null&&n!==``&&z(`runId`,n),`correlationId`in i&&typeof i.correlationId==`string`&&z(`correlationId`,i.correlationId),de(i.eventType)&&n&&i.correlationId)return nr(D,t?`${n}-${i.correlationId}.${t}`:`${n}-${i.correlationId}`,()=>o());if(C(i.eventType)&&n&&i.correlationId)return nr(O,t?`${n}-${i.correlationId}.hook.${t}`:`${n}-${i.correlationId}.hook`,()=>o());return o();async function o(){let o=`evnt_${un()}`,x=new Date,C;if(i.eventType===`run_created`&&(!n||n===``))C=`wrun_${un()}`;else if(n)C=n;else throw Error(`runId is required for non-run_created events`);if(i.eventType===`run_created`&&n&&n!==``){let e=le(C,`wrun_`);if(e)throw new c(e)}let w=i.specVersion??5,T=null;if(i.eventType!==`run_created`&&![`step_completed`,`step_retrying`].includes(i.eventType)&&(T=await H(e,`runs`,C,m,t),i.eventType===`run_started`&&!T&&`eventData`in i&&i.eventData)){let n=i.eventData;if(n.deploymentId&&n.workflowName&&n.input!==void 0){ee(Object.entries(n.attributes??{}).map(([e,t])=>({key:e,value:t})),{allowReservedAttributes:n.allowReservedAttributes===!0});let r={runId:C,deploymentId:n.deploymentId,status:`pending`,workflowName:n.workflowName,specVersion:w,executionContext:n.executionContext,input:n.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:n.attributes??{},createdAt:x,updatedAt:x};if(await q(V(e,`runs`,C,t),JSON.stringify(r,U))){let e=`evnt_${un()}`;await oe({eventType:`run_created`,runId:C,eventId:e,createdAt:x,specVersion:w,eventData:{deploymentId:n.deploymentId,workflowName:n.workflowName,input:n.input,executionContext:n.executionContext,attributes:n.attributes,allowReservedAttributes:n.allowReservedAttributes}}),T=r}else T=await H(e,`runs`,C,m,t)}}if(i.eventType===`run_failed`&&!T||i.eventType===`attr_set`&&!T)throw new s(C);if(T){if(ae(T.specVersion))throw new p(T.specVersion,5);if(ue(T.specVersion))return Wn(e,C,i,T,a)}let ie=b(i),D=ie&&i.eventType===`step_started`;if(T&&se(T.status)){if(i.eventType===`run_cancelled`&&T.status===`cancelled`){let e={...i,runId:C,eventId:o,createdAt:x,specVersion:w};return await oe(e),{event:y(e,a?.resolveData??`all`),run:T}}if(i.eventType===`run_started`)throw new u(`Workflow run "${C}" is already in terminal state "${T.status}"`);if(h(i.eventType))throw new f(`Cannot transition run from terminal state "${T.status}"`);if(ie)throw new f(`Cannot create new entities on run in terminal state "${T.status}"`);if(i.eventType===`attr_set`)throw new f(`Cannot set attributes on run in terminal state "${T.status}"`)}let O=null;if(de(i.eventType)&&i.eventType!==`step_created`&&i.correlationId){if(O=await H(e,`steps`,`${C}-${i.correlationId}`,g,t),!O&&!D)throw new c(`Step "${i.correlationId}" not found`);if(D&&O)throw new f(`Step "${i.correlationId}" already created`);if(O){if(ne(O.status))throw new f(`Cannot modify step in terminal state "${O.status}"`);if(T&&se(T.status)&&O.status!==`running`)throw new u(`Cannot modify non-running step on run in terminal state "${T.status}"`)}}if(te(i.eventType)&&i.correlationId&&(i.eventType===`hook_received`&&await on(e,i.correlationId,t)||!await H(e,`hooks`,i.correlationId,M,t)))throw new d(i.correlationId);let k={...i,runId:C,eventId:o,createdAt:x,specVersion:w};if(i.eventType===`run_started`&&`eventData`in k&&delete k.eventData,D&&k.eventType===`step_started`&&k.eventData){let{input:e,...t}=k.eventData;k={...k,eventData:t}}let A,j,N,P,fe=!1,pe;if(i.eventType===`run_created`&&`eventData`in i){let n=i.eventData;if(ee(Object.entries(n.attributes??{}).map(([e,t])=>({key:e,value:t})),{allowReservedAttributes:n.allowReservedAttributes===!0}),A={runId:C,deploymentId:n.deploymentId,status:`pending`,workflowName:n.workflowName,specVersion:w,executionContext:n.executionContext,input:n.input,output:void 0,error:void 0,startedAt:void 0,completedAt:void 0,attributes:n.attributes??{},createdAt:x,updatedAt:x},!await q(V(e,`runs`,C,t),JSON.stringify(A,U,2)))throw new f(`Workflow run "${C}" already exists`)}else if(i.eventType===`run_started`){if(T){if(T.status===`running`)return{run:T};A=await ir(e,C,t,{runId:T.runId,deploymentId:T.deploymentId,workflowName:T.workflowName,specVersion:T.specVersion,executionContext:T.executionContext,input:T.input,createdAt:T.createdAt,expiredAt:T.expiredAt,status:`running`,output:void 0,error:void 0,completedAt:void 0,startedAt:T.startedAt??x,updatedAt:x,attributes:T.attributes})}}else if(i.eventType===`run_completed`&&`eventData`in i){let n=i.eventData;T&&(A=await ir(e,C,t,{runId:T.runId,deploymentId:T.deploymentId,workflowName:T.workflowName,specVersion:T.specVersion,executionContext:T.executionContext,input:T.input,createdAt:T.createdAt,expiredAt:T.expiredAt,startedAt:T.startedAt,status:`completed`,output:n.output,error:void 0,completedAt:x,updatedAt:x,attributes:T.attributes}),await Promise.all([Un(e,C),rr(e,C)]))}else if(i.eventType===`run_failed`&&`eventData`in i){let n=i.eventData;T&&(A=await ir(e,C,t,{runId:T.runId,deploymentId:T.deploymentId,workflowName:T.workflowName,specVersion:T.specVersion,executionContext:T.executionContext,input:T.input,createdAt:T.createdAt,expiredAt:T.expiredAt,startedAt:T.startedAt,status:`failed`,output:void 0,error:n.error,errorCode:n.errorCode,completedAt:x,updatedAt:x,attributes:T.attributes}),await Promise.all([Un(e,C),rr(e,C)]))}else if(i.eventType===`run_cancelled`)T&&(A=await ir(e,C,t,{runId:T.runId,deploymentId:T.deploymentId,workflowName:T.workflowName,specVersion:T.specVersion,executionContext:T.executionContext,input:T.input,createdAt:T.createdAt,expiredAt:T.expiredAt,startedAt:T.startedAt,status:`cancelled`,output:void 0,error:void 0,completedAt:x,updatedAt:x,attributes:T.attributes}),await Promise.all([Un(e,C),rr(e,C)]));else if(i.eventType===`attr_set`&&T)A=await Kn(C,async()=>{let n=await G(V(e,`runs`,C,t),m);if(!n)throw new s(C);if(ee(i.eventData.changes,{existingKeys:Object.keys(n.attributes),allowReservedAttributes:i.eventData.allowReservedAttributes===!0}),i.correlationId&&i.eventData.writer.type===`workflow`&&!await q(B(e,`.locks`,`attributes`,t?`${C}-${i.correlationId}.created.${t}`:`${C}-${i.correlationId}.created`),``))throw new f(`Attribute event "${i.correlationId}" already exists`);let r={...n,attributes:v(n.attributes,i.eventData.changes),updatedAt:x};return await W(V(e,`runs`,C,t),r,{overwrite:!0}),r});else if(i.eventType===`step_created`&&`eventData`in i){if(!await q(B(e,`.locks`,`steps`,t?`${C}-${i.correlationId}.created.${t}`:`${C}-${i.correlationId}.created`),``))throw new f(`Step "${i.correlationId}" already created`);let n=i.eventData;j={runId:C,stepId:i.correlationId,stepName:n.stepName,status:`pending`,input:n.input,output:void 0,error:void 0,attempt:0,startedAt:void 0,completedAt:void 0,createdAt:x,updatedAt:x,specVersion:w},await W(V(e,`steps`,`${C}-${i.correlationId}`,t),j)}else if(i.eventType===`step_started`){if(!O&&D){let n=i.eventData;if(await q(B(e,`.locks`,`steps`,t?`${C}-${i.correlationId}.created.${t}`:`${C}-${i.correlationId}.created`),``)){let r={runId:C,stepId:i.correlationId,stepName:n.stepName,status:`pending`,input:n.input,output:void 0,error:void 0,attempt:0,startedAt:void 0,completedAt:void 0,createdAt:x,updatedAt:x,specVersion:w};await W(V(e,`steps`,`${C}-${i.correlationId}`,t),r);let a=`evnt_${un()}`,o={eventType:`step_created`,runId:C,eventId:a,createdAt:x,specVersion:w,correlationId:i.correlationId,eventData:{stepName:n.stepName,input:n.input}};await W(V(e,`events`,`${C}-${a}`,t),o),O=r,fe=!0}else throw new f(`Step "${i.correlationId}" already created`)}if(O){if(O.retryAfter&&O.retryAfter.getTime()>Date.now())throw new l(`Cannot start step "${i.correlationId}": retryAfter timestamp has not been reached yet`,{retryAfter:Math.ceil((O.retryAfter.getTime()-Date.now())/1e3)});let n=`${C}-${i.correlationId}`,r=await H(e,`steps`,n,g,t);if(r&&ne(r.status))throw new f(`Cannot modify step in terminal state "${r.status}"`);j={...O,status:`running`,startedAt:O.startedAt??x,attempt:O.attempt+1,retryAfter:void 0,updatedAt:x},await W(V(e,`steps`,n,t),j,{overwrite:!0})}}else if(i.eventType===`step_completed`&&`eventData`in i){let n=i.eventData;if(O){let r=`${C}-${i.correlationId}`;if(!await q(B(e,`.locks`,`steps`,t?`${r}.terminal.${t}`:`${r}.terminal`),``))throw new f(`Cannot modify step in terminal state`);j={...O,status:`completed`,output:n.result,completedAt:x,updatedAt:x},await W(V(e,`steps`,r,t),j,{overwrite:!0})}}else if(i.eventType===`step_failed`&&`eventData`in i){let n=i.eventData;if(O){let r=`${C}-${i.correlationId}`;if(!await q(B(e,`.locks`,`steps`,t?`${r}.terminal.${t}`:`${r}.terminal`),``))throw new f(`Cannot modify step in terminal state`);j={...O,status:`failed`,error:n.error,completedAt:x,updatedAt:x},await W(V(e,`steps`,r,t),j,{overwrite:!0})}}else if(i.eventType===`step_retrying`&&`eventData`in i){let n=i.eventData;if(O){let r=`${C}-${i.correlationId}`;j={...O,status:`pending`,error:n.error,retryAfter:n.retryAfter,updatedAt:x},await W(V(e,`steps`,r,t),j,{overwrite:!0})}}else if(i.eventType===`hook_created`&&`eventData`in i){let n=i.eventData,r=sn(e,n.token),s=JSON.stringify({token:n.token,hookId:i.correlationId,runId:C,eventId:o}),c=!1,l=null,u=0,d=0;for(let a=0;a<10&&(await Xn(r)||await Bn(e,n.token,t),c=await q(r,s),!c);a++){if(l=await Xn(r),!l){d++,d>=3&&await K(r);continue}if(l.runId===C&&l.hookId===i.correlationId||!await Zn(e,l,t))break;u++,u<3?await new Promise(e=>setTimeout(e,10)):(await K(r),l.hookId&&(await K(V(e,`hooks`,l.hookId,t)),await K(ln(e,n.token,l.runId,l.hookId)))),l=null}let p=!1;if(!c)if(l?.runId===C&&l.hookId===i.correlationId){let r;if(l.eventId)r=l.eventId;else{let a=await $n(e,C,i.correlationId);if(a!==null)throw await er(e,C,i.correlationId,a,t),new f(`Hook "${i.correlationId}" already created`);let s=await tr(e,n.token,C,i.correlationId,o);if(s===null)throw new f(`Hook "${i.correlationId}" already created`);r=s}o=r;let a=ce(o.replace(/^evnt_/,``))??x;k={...i,runId:C,eventId:o,createdAt:a,specVersion:w},p=!0}else{let e={eventType:`hook_conflict`,correlationId:i.correlationId,eventData:{token:n.token,...l?{conflictingRunId:l.runId}:{}},runId:C,eventId:o,createdAt:x,specVersion:w};return await oe(e),{event:y(e,a?.resolveData??`all`),run:A,step:j,hook:void 0}}N={runId:C,hookId:i.correlationId,token:n.token,metadata:n.metadata,ownerId:`local-owner`,projectId:`local-project`,environment:`local`,createdAt:k.createdAt,specVersion:w,isWebhook:n.isWebhook??!1,isSystem:n.isSystem??!1},pe=p?{overwrite:!0}:void 0,await yn(e,n.token,C,i.correlationId,o,t)}else if(i.eventType===`hook_disposed`){if(!await q(an(e,i.correlationId,t),``))throw new f(`Hook "${i.correlationId}" already disposed`);let n=V(e,`hooks`,i.correlationId,t),r=await H(e,`hooks`,i.correlationId,M,t);r&&(await cn(e,r.token,r.runId,r.hookId),await K(ln(e,r.token,r.runId,r.hookId))),await K(n),await Sn(e,C,i.correlationId,t)}else if(i.eventType===`wait_created`&&`eventData`in i){let n=`${C}-${i.correlationId}`;if(!await q(B(e,`.locks`,`waits`,t?`${n}.created.${t}`:`${n}.created`),``))throw new f(`Wait "${i.correlationId}" already exists`);let r=i.eventData;P={waitId:n,runId:C,status:`waiting`,resumeAt:r.resumeAt,completedAt:void 0,createdAt:x,updatedAt:x,specVersion:w},await W(V(e,`waits`,n,t),P)}else if(i.eventType===`wait_completed`){let n=`${C}-${i.correlationId}`,r=B(e,`.locks`,`waits`,t?`${n}.completed.${t}`:`${n}.completed`);if(!await q(r,``))throw new f(`Wait "${i.correlationId}" already completed`);let a=await H(e,`waits`,n,_,t);if(!a)throw await I.unlink(r).catch(()=>{}),new c(`Wait "${i.correlationId}" not found`);P={...a,status:`completed`,completedAt:x,updatedAt:x},await W(V(e,`waits`,n,t),P,{overwrite:!0})}if(i.eventType===`hook_received`&&i.correlationId&&await on(e,i.correlationId,t))throw new d(i.correlationId);let F=V(e,`events`,`${C}-${o}`,t),me=JSON.stringify(k,U,2);if(!await q(F,me))throw i.eventType===`hook_created`&&i.correlationId&&await er(e,C,i.correlationId,o,t),new f(`Event "${o}" already exists for run "${C}"`);E(k,F,me),N&&i.eventType===`hook_created`&&(await xn(e,N.runId,N.hookId,t),await W(V(e,`hooks`,N.hookId,t),N,pe));let he=a?.resolveData??`all`,ge=y(k,he),L,_e,ve;if(i.eventType===`run_started`&&A){let t=await Y({directory:R.join(e,`events`),schema:S,cachedItems:r,filePrefix:`${C}-`,sortOrder:`asc`,limit:1e3,getCreatedAt:$(`evnt`),getId:e=>e.eventId});L=t.data,_e=t.cursor,ve=t.hasMore}if(re(i.eventType)&&typeof a?.sinceCursor==`string`){let t=await Y({directory:R.join(e,`events`),schema:S,filePrefix:`${C}-`,sortOrder:`asc`,cursor:a.sinceCursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});L=he===`none`?t.data.map(e=>y(e,he)):t.data,_e=t.cursor,ve=t.hasMore}return{event:ge,run:A,step:j,hook:N,wait:P,events:L,cursor:_e,hasMore:ve,...fe?{stepCreated:!0}:{}}}},async get(n,r,i){z(`runId`,n),z(`eventId`,r);let a=await H(e,`events`,`${n}-${r}`,S,t);if(!a)throw Error(`Event ${r} in run ${n} not found`);return y(a,i?.resolveData??`all`)},async list(t){let{runId:n}=t;z(`runId`,n);let i=t.resolveData??`all`,a=await Y({directory:R.join(e,`events`),schema:S,cachedItems:r,filePrefix:`${n}-`,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});return i===`none`?{...a,data:a.data.map(e=>y(e,i))}:a},async listByCorrelationId(t){let n=t.correlationId;z(`correlationId`,n);let i=t.resolveData??`all`,a=await Y({directory:R.join(e,`events`),schema:S,cachedItems:r,filter:e=>e.correlationId===n,sortOrder:t.pagination?.sortOrder??`asc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`evnt`),getId:e=>e.eventId});return i===`none`?{...a,data:a.data.map(e=>y(e,i))}:a}}}function or(e,t){return{get:(async(n,r,i)=>{z(`runId`,n),z(`stepId`,r);let a=await H(e,`steps`,`${n}-${r}`,g,t);if(!a)throw Error(`Step ${r} in run ${n} not found`);return Mn(a,i?.resolveData??`all`)}),list:(async t=>{z(`runId`,t.runId);let n=t.resolveData??`all`,r=await Y({directory:R.join(e,`steps`),schema:g,filePrefix:`${t.runId}-`,sortOrder:t.pagination?.sortOrder??`desc`,limit:t.pagination?.limit,cursor:t.pagination?.cursor,getCreatedAt:$(`step`),getId:e=>e.stepId});return n===`none`?{...r,data:r.data.map(e=>({...e,input:void 0,output:void 0}))}:r})}}function sr(e,t){let n=qn(e,t),r=or(e,t),i=ar(e,t),a=Hn(e,t);return{runs:Kt(`world.runs`,n),steps:Kt(`world.steps`,r),events:Kt(`world.events`,i),hooks:Kt(`world.hooks`,a),clearCache:()=>i.clearCache()}}const cr=A(()=>Math.random()),lr=E({streams:T(k())});function ur(e){return e===1}function dr(e){let t=Buffer.from([+!!e.eof]);return Buffer.concat([t,e.chunk])}function fr(e){return ur(e[0])}function pr(e){return{eof:fr(e),chunk:Buffer.from(e.subarray(1))}}async function mr(e){try{return await I.readdir(e)}catch(e){if(e.code===`ENOENT`)return[];throw e}}function hr(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 gr(e,t){return z(`streamName`,t),R.join(e,t)}async function _r(e,t,n){let r=gr(e,t),i=await mr(r),a=new Map;return hr(a,i,`.json`),hr(a,i,`.bin`,`.bin`,n?e=>!e.endsWith(`.${n}`):void 0),n&&hr(a,i,`.${n}.bin`),{files:[...a.keys()].sort(),extMap:a,dir:r}}function vr(e,t){let n=t?`.${t}`:``,r=new we,i=new Set;async function a(n,r){z(`runId`,n),z(`streamName`,r);let a=`${n}:${r}`;if(i.has(a))return;let o=V(e,`streams/runs`,n,t),s=(await H(e,`streams/runs`,n,lr,t))?.streams??[];s.includes(r)||(s.push(r),await W(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_${cr()}`;await a(await t,i);let l=o(s),u=dr({chunk:l,eof:!1});await ot(R.join(gr(R.join(e,`streams`,`chunks`),i),`${c}${n}.bin`),u);let d=Uint8Array.from(l);r.emit(`chunk:${i}`,{streamName:i,chunkData:d,chunkId:c})},async writeMulti(t,i,s){if(s.length===0)return;let c=s.map(()=>`chnk_${cr()}`);await a(await t,i);let l=s.map(e=>o(e)).map(async(t,r)=>{let a=c[r],o=dr({chunk:t,eof:!1});return await ot(R.join(gr(R.join(e,`streams`,`chunks`),i),`${a}${n}.bin`),o),{chunkId:a,chunkData:Uint8Array.from(t)}});for(let e of l){let{chunkId:t,chunkData:n}=await e;r.emit(`chunk:${i}`,{streamName:i,chunkData:n,chunkId:t})}},async close(t,i){let o=`chnk_${cr()}`;await a(await t,i),await ot(R.join(gr(R.join(e,`streams`,`chunks`),i),`${o}${n}.bin`),dr({chunk:Buffer.from([]),eof:!0})),r.emit(`close:${i}`,{streamName:i})},async list(n){return z(`runId`,n),(await H(e,`streams/runs`,n,lr,t))?.streams??[]},async getChunks(n,r,i){let a=i?.limit??100,{files:o,extMap:s,dir:c}=await _r(R.join(e,`streams`,`chunks`),r,t),l=0;if(i?.cursor)try{l=JSON.parse(Buffer.from(i.cursor,`base64`).toString(`utf-8`)).i}catch{l=0}let u=!1,d=[],f=0;for(let e of o){let t=s.get(e)??`.bin`,n=R.join(c,`${e}${t}`);if(f<l){if(ur(await ct(n))){u=!0;break}f++;continue}if(d.length>=a){ur(await ct(n))?u=!0:f++;break}let r=pr(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 _r(R.join(e,`streams`,`chunks`),r,t),s=!1,c=0;for(let e of i){let t=a.get(e)??`.bin`;if(ur(await ct(R.join(o,`${e}${t}`)))){s=!0;break}c++}return{tailIndex:c-1,done:s}},async get(n,i,a=0){let o=R.join(e,`streams`,`chunks`),s=()=>{},c=null,l=!1;return new ReadableStream({async start(e){let n=new Set,u=[],d=!0,f=!1,p=t=>{if(t.chunkData.byteLength===0){n.add(t.chunkId);return}d?(n.add(t.chunkId),u.push({chunkId:t.chunkId,chunkData:Uint8Array.from(t.chunkData)})):n.has(t.chunkId)||(n.add(t.chunkId),e.enqueue(Uint8Array.from(t.chunkData)))},m=()=>{if(d){f=!0;return}l=!0,s();try{e.close()}catch{}};s=()=>{r.off(`chunk:${i}`,p),r.off(`close:${i}`,m),c&&=(clearInterval(c),null)},r.on(`chunk:${i}`,p),r.on(`close:${i}`,m);let{files:h,extMap:g,dir:_}=await _r(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`;ur(await ct(R.join(_,`${e}${t}`)))&&v--}let y=typeof a==`number`&&a<0?Math.max(0,v+a):a,b=!1;for(let t=y;t<h.length;t++){let r=h[t],i=r;if(n.has(i))continue;let a=g.get(r)??`.bin`,o=pr(await st(R.join(_,`${r}${a}`)));if(o?.eof===!0){b=!0;break}n.add(i),o.chunk.byteLength&&e.enqueue(Uint8Array.from(o.chunk))}d=!1,u.sort((e,t)=>e.chunkId.localeCompare(t.chunkId));for(let t of u)e.enqueue(Uint8Array.from(t.chunkData));if(b){l=!0,s();try{e.close()}catch{}return}if(f){l=!0,s();try{e.close()}catch{}return}for(let e=0;e<y&&e<h.length;e++)n.add(h[e]);if(l){s();return}let x=!1;c=setInterval(async()=>{if(!x){x=!0;try{let{files:r,extMap:a}=await _r(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=pr(await st(R.join(_,`${t}${i}`)));if(o?.eof===!0){l=!0,s();try{e.close()}catch{}return}if(l)return;o.chunk.byteLength&&e.enqueue(Uint8Array.from(o.chunk))}}catch(e){e instanceof Error&&`code`in e||console.error(`[world-local] Unexpected polling error:`,e)}finally{x=!1}}},100)},cancel(){l=!0,s()}})}}}}function yr(e){let t=e?Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0)):{},n={...Be.value,...t},r=n.tag,i=nn(n),{clearCache:a,...o}=sr(n.dataDir,r),s=n.recoverActiveRuns??!0;return{specVersion:5,...i,...o,...Kt(`world.streams`,{...vr(n.dataDir,r),...n.streamFlushIntervalMs!==void 0&&{streamFlushIntervalMs:n.streamFlushIntervalMs}}),async start(){if(await Tt(n.dataDir),!s)return;let e=r?e=>$e(e,r):et;await j({...o.runs,list:(t=>o.runs.list({...t,fileIdFilter:e}))},i.queue,`world-local`)},async close(){a(),await i.close()},async clear(){if(a(),r){let e=n.dataDir,t=R.join(e,`hooks`),i=await tt(t,r),{HookSchema:a}=await import(`../../_chunks/workflow/dist-DnBjuNAZ.js`).then(e=>e.t);await Promise.all(i.map(async n=>{let r=await G(R.join(t,n),a);r?.token&&(await K(R.join(t,`tokens`,`${rn(r.token)}.json`)),await K(ln(e,r.token,r.runId,r.hookId)))})),await Promise.all([`runs`,`steps`,`events`,`hooks`,`hooks/by-run`,`waits`,`streams/runs`].map(async t=>{let n=R.join(e,t),i=await tt(n,r);await Promise.all(i.map(e=>K(R.join(n,e))))}));for(let t of[`token-index`,`id-index`]){let n=R.join(e,`hooks`,t),i;try{i=await F.readdir(n,{withFileTypes:!0})}catch{i=[]}await Promise.all(i.filter(e=>e.isDirectory()).map(async e=>{let t=R.join(n,e.name),i=await tt(t,r);await Promise.all(i.map(e=>K(R.join(t,e))))}))}await F.rm(R.join(e,`.locks`),{recursive:!0,force:!0}).catch(()=>{});let o=R.join(e,`streams`,`chunks`),s;try{s=await F.readdir(o,{withFileTypes:!0})}catch{s=[]}await Promise.all(s.filter(e=>e.isDirectory()).map(async e=>{let t=R.join(o,e.name),n=await nt(t,r,`.bin`);await Promise.all(n.map(e=>F.unlink(R.join(t,e)).catch(()=>{})))})),Xe()}else Xe(),En(),await ye(n.dataDir,{recursive:!0,force:!0}),await Tt(n.dataDir)}}}function br(e){return yr(e)}export{ht as DataDirAccessError,gt as DataDirVersionError,br as createLocalWorld,yr as createWorld,xt as ensureDataDir,Tt as initDataDir,_t as parseVersion};