@typeonce/effect-machine 0.9.0 → 0.11.0

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 (93) hide show
  1. package/README.md +167 -28
  2. package/dist/Machine.d.ts +491 -283
  3. package/dist/Machine.d.ts.map +1 -1
  4. package/dist/Machine.js +74 -76
  5. package/dist/Machine.js.map +1 -1
  6. package/dist/internal/machine/atom.d.ts +7 -3
  7. package/dist/internal/machine/atom.d.ts.map +1 -1
  8. package/dist/internal/machine/atom.js +42 -6
  9. package/dist/internal/machine/atom.js.map +1 -1
  10. package/dist/internal/machine/cluster.d.ts.map +1 -1
  11. package/dist/internal/machine/cluster.js +2 -1
  12. package/dist/internal/machine/cluster.js.map +1 -1
  13. package/dist/internal/machine/command.js +2 -2
  14. package/dist/internal/machine/command.js.map +1 -1
  15. package/dist/internal/machine/commandRuntime.d.ts.map +1 -1
  16. package/dist/internal/machine/commandRuntime.js +6 -3
  17. package/dist/internal/machine/commandRuntime.js.map +1 -1
  18. package/dist/internal/machine/configuration.d.ts +8 -1
  19. package/dist/internal/machine/configuration.d.ts.map +1 -1
  20. package/dist/internal/machine/configuration.js +9 -4
  21. package/dist/internal/machine/configuration.js.map +1 -1
  22. package/dist/internal/machine/errors.d.ts +1 -1
  23. package/dist/internal/machine/errors.d.ts.map +1 -1
  24. package/dist/internal/machine/executionPlan.d.ts +3 -3
  25. package/dist/internal/machine/executionPlan.d.ts.map +1 -1
  26. package/dist/internal/machine/executionPlan.js +50 -25
  27. package/dist/internal/machine/executionPlan.js.map +1 -1
  28. package/dist/internal/machine/invocation.d.ts.map +1 -1
  29. package/dist/internal/machine/invocation.js +3 -2
  30. package/dist/internal/machine/invocation.js.map +1 -1
  31. package/dist/internal/machine/machine.d.ts +15 -19
  32. package/dist/internal/machine/machine.d.ts.map +1 -1
  33. package/dist/internal/machine/machine.js +16 -10
  34. package/dist/internal/machine/machine.js.map +1 -1
  35. package/dist/internal/machine/planner.d.ts +2 -1
  36. package/dist/internal/machine/planner.d.ts.map +1 -1
  37. package/dist/internal/machine/planner.js +61 -24
  38. package/dist/internal/machine/planner.js.map +1 -1
  39. package/dist/internal/machine/process.d.ts +3 -0
  40. package/dist/internal/machine/process.d.ts.map +1 -1
  41. package/dist/internal/machine/process.js +11 -8
  42. package/dist/internal/machine/process.js.map +1 -1
  43. package/dist/internal/machine/protocol.d.ts +7 -13
  44. package/dist/internal/machine/protocol.d.ts.map +1 -1
  45. package/dist/internal/machine/protocol.js +128 -50
  46. package/dist/internal/machine/protocol.js.map +1 -1
  47. package/dist/internal/machine/runtime.d.ts +22 -2
  48. package/dist/internal/machine/runtime.d.ts.map +1 -1
  49. package/dist/internal/machine/runtime.js +138 -10
  50. package/dist/internal/machine/runtime.js.map +1 -1
  51. package/dist/internal/machine/topology.d.ts +7 -0
  52. package/dist/internal/machine/topology.d.ts.map +1 -1
  53. package/dist/internal/machine/topology.js +6 -0
  54. package/dist/internal/machine/topology.js.map +1 -1
  55. package/dist/internal/testing/machine/finiteModel.js +1 -1
  56. package/dist/internal/testing/machine/finiteModel.js.map +1 -1
  57. package/dist/internal/testing/machine/runtime.d.ts.map +1 -1
  58. package/dist/internal/testing/machine/runtime.js +2 -1
  59. package/dist/internal/testing/machine/runtime.js.map +1 -1
  60. package/dist/internal/testing/machine/verification.d.ts.map +1 -1
  61. package/dist/internal/testing/machine/verification.js +5 -3
  62. package/dist/internal/testing/machine/verification.js.map +1 -1
  63. package/dist/testing/MachineTest.d.ts +7 -7
  64. package/dist/testing/MachineTest.js +7 -7
  65. package/dist/unstable/cluster/ClusterMachine.d.ts +1 -1
  66. package/dist/unstable/cluster/ClusterMachine.js +1 -1
  67. package/dist/unstable/reactivity/AtomMachine.d.ts +27 -8
  68. package/dist/unstable/reactivity/AtomMachine.d.ts.map +1 -1
  69. package/dist/unstable/reactivity/AtomMachine.js +20 -3
  70. package/dist/unstable/reactivity/AtomMachine.js.map +1 -1
  71. package/docs/agent-guide.md +191 -54
  72. package/package.json +1 -1
  73. package/src/Machine.ts +1220 -360
  74. package/src/internal/machine/atom.ts +76 -53
  75. package/src/internal/machine/cluster.ts +2 -1
  76. package/src/internal/machine/command.ts +2 -2
  77. package/src/internal/machine/commandRuntime.ts +9 -4
  78. package/src/internal/machine/configuration.ts +23 -5
  79. package/src/internal/machine/errors.ts +1 -1
  80. package/src/internal/machine/executionPlan.ts +74 -29
  81. package/src/internal/machine/invocation.ts +3 -2
  82. package/src/internal/machine/machine.ts +74 -49
  83. package/src/internal/machine/planner.ts +68 -24
  84. package/src/internal/machine/process.ts +75 -8
  85. package/src/internal/machine/protocol.ts +207 -68
  86. package/src/internal/machine/runtime.ts +266 -11
  87. package/src/internal/machine/topology.ts +15 -0
  88. package/src/internal/testing/machine/finiteModel.ts +1 -1
  89. package/src/internal/testing/machine/runtime.ts +2 -1
  90. package/src/internal/testing/machine/verification.ts +5 -3
  91. package/src/testing/MachineTest.ts +7 -7
  92. package/src/unstable/cluster/ClusterMachine.ts +1 -1
  93. package/src/unstable/reactivity/AtomMachine.ts +44 -10
package/dist/Machine.d.ts CHANGED
@@ -38,6 +38,8 @@ export declare const TypeId: TypeId;
38
38
  declare const MachineOutputStatesTypeId: unique symbol;
39
39
  declare const MachineTypeId: unique symbol;
40
40
  declare const EventConstructionTypeId: unique symbol;
41
+ declare const EmittedEventConstructionTypeId: unique symbol;
42
+ declare const EventProtocolTypeId: unique symbol;
41
43
  declare const ChildMachineLogicTypeId: typeof internal.ChildMachineLogicTypeId;
42
44
  /**
43
45
  * Type identifier used for the synthetic event passed to startup lifecycle
@@ -92,10 +94,10 @@ type IsAny<A> = 0 extends (1 & A) ? true : false;
92
94
  * @category models
93
95
  * @since 0.4.0
94
96
  */
95
- export interface Machine<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events> extends Pipeable {
97
+ export interface Machine<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []> extends Pipeable {
96
98
  readonly [TypeId]: TypeId;
97
99
  /** @internal Stable type-level carrier for machine protocol extraction. */
98
- readonly [MachineTypeId]: Machine.TypeCarrier<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>;
100
+ readonly [MachineTypeId]: Machine.TypeCarrier<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>;
99
101
  /** @internal Prevents output implementation evidence from being widened. */
100
102
  readonly [MachineOutputStatesTypeId]: Readonly<Record<OutputStates, true>>;
101
103
  /**
@@ -109,20 +111,31 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
109
111
  *
110
112
  * @since 0.4.0
111
113
  */
112
- readonly events: InputEvents;
114
+ readonly events: Machine.EventProtocol<"public", InputEvents>;
113
115
  /**
114
- * Events reserved for raised events, child emissions, and other machine-local
115
- * work.
116
+ * Events reserved for raised events and other machine-local work.
116
117
  *
117
118
  * @since 0.4.0
118
119
  */
119
- readonly internalEvents: ReadonlyArray<Machine.TaggedSchema>;
120
+ readonly internalEvents: Machine.EventProtocol<"internal", Machine.InternalEventSchemas<Events, InputEvents>>;
120
121
  /**
121
- * Events that the machine may emit to its parent or external adapter.
122
+ * Ephemeral outward notifications published to this actor's observers.
123
+ * Emissions are never delivered implicitly to an owning actor.
122
124
  *
123
125
  * @since 0.4.0
124
126
  */
125
- readonly emits: Emits;
127
+ readonly emittedEvents: Machine.EventProtocol<"emitted", Emits>;
128
+ /**
129
+ * Public input events accepted by an owning actor when this machine is
130
+ * running as a child.
131
+ *
132
+ * The protocol types the optional `parent` actor reference exposed to
133
+ * handlers and is checked against a concrete parent's public events at
134
+ * composition boundaries.
135
+ *
136
+ * @since 0.10.0
137
+ */
138
+ readonly parentEvents: Machine.EventProtocol<"public", ParentEvents>;
126
139
  /**
127
140
  * Optional schema used to decode the machine input before initialization.
128
141
  *
@@ -151,7 +164,15 @@ export interface Machine<States extends Machine.StateSchemas, Events extends Rea
151
164
  *
152
165
  * @since 0.4.0
153
166
  */
154
- readonly handle: Machine.Handler<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents>;
167
+ readonly handle: Machine.Handler<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, ParentEvents>;
168
+ /**
169
+ * Preserves invocation inference with this machine's public input and parent
170
+ * protocols. Prefer this bound constructor when an invocation source or
171
+ * lifecycle handler uses `self` or `parent`.
172
+ *
173
+ * @since 0.11.0
174
+ */
175
+ readonly invoke: Invoker<States, Events, Emits, InputEvents, ParentEvents>;
155
176
  /** @internal */
156
177
  readonly initial: (...args: [...Machine.InputArgs<Input>]) => Machine.InitialResult<States, InitialE, InitialR>;
157
178
  }
@@ -257,7 +278,8 @@ export type PlanningServices<Requirements> = Exclude<Requirements, ActionRequire
257
278
  */
258
279
  export type ExecutionServices<Requirements> = Exclude<PlanningServices<Requirements>, MachineRuntimeRequirement> | Exclude<ActionServices<Requirements>, MachineRuntimeRequirement>;
259
280
  /**
260
- * Managed runtime capability used to deliver raised and emitted events.
281
+ * Managed runtime capability used to deliver raised events and publish
282
+ * emitted notifications.
261
283
  *
262
284
  * @category models
263
285
  * @since 0.4.0
@@ -270,11 +292,34 @@ export interface Runtime<in Events, in Emits> {
270
292
  */
271
293
  readonly raise: (event: Machine.EventInput<Events>) => Effect.Effect<void, MachineSchemaDecodeError | StoppedError>;
272
294
  /**
273
- * Emits an event through the running machine's parent boundary.
295
+ * Publishes an ephemeral notification to the running actor's observers.
274
296
  *
275
297
  * @since 0.4.0
276
298
  */
277
- readonly sendParent: (event: Emits) => Effect.Effect<void, MachineSchemaDecodeError | StoppedError>;
299
+ readonly emit: (event: Machine.EmittedEventInput<Emits>) => Effect.Effect<void, MachineSchemaDecodeError | StoppedError>;
300
+ }
301
+ /**
302
+ * Minimal typed reference accepted by targeted actor commands.
303
+ *
304
+ * @category models
305
+ * @since 0.10.0
306
+ */
307
+ export interface ActorRef<in Event> {
308
+ readonly id: string;
309
+ readonly sessionId: string;
310
+ readonly send: (event: Event) => Effect.Effect<void, StoppedError>;
311
+ }
312
+ /**
313
+ * Actor references available while evaluating machine behavior.
314
+ *
315
+ * @category models
316
+ * @since 0.10.0
317
+ */
318
+ export interface ActorContext<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> {
319
+ /** Reference to the current actor. Sending queues a later mailbox event. */
320
+ readonly self: ActorRef<Machine.EventInputOf<InputEvents>>;
321
+ /** Reference to the owning actor, or `undefined` when running as a root. */
322
+ readonly parent: ActorRef<Machine.EventInputOf<ParentEvents>> | undefined;
278
323
  }
279
324
  /**
280
325
  * Synchronous commands available while a machine transition is being
@@ -287,10 +332,11 @@ export interface Runtime<in Events, in Emits> {
287
332
  export interface Enqueue<in Events, in Emits> {
288
333
  /** Raises an event inside the current macrostep. */
289
334
  readonly raise: (event: Machine.EventInput<Events>) => void;
290
- /** Emits an event through the machine's parent boundary. */
291
- readonly emit: (event: Emits) => void;
335
+ /** Publishes an ephemeral notification to this actor's observers. */
336
+ readonly emit: (event: Machine.EmittedEventInput<Emits>) => void;
292
337
  /** Sends an event to an invoked child after the transition is selected. */
293
338
  readonly sendTo: {
339
+ <Event>(target: ActorRef<Event>, event: Event): void;
294
340
  <Child extends ChildMachine.Any>(child: Child, event: ChildMachine.Event<Child>): void;
295
341
  <Address extends ChildAddress<never>>(child: Address, event: ChildAddress.Event<Address>): void;
296
342
  };
@@ -308,7 +354,7 @@ export interface Enqueue<in Events, in Emits> {
308
354
  */
309
355
  export type Command = {
310
356
  readonly _tag: "SendTo";
311
- readonly child: ChildMachine.Any | ChildAddress<never>;
357
+ readonly target: ActorRef<unknown> | ChildMachine.Any | ChildAddress<never>;
312
358
  readonly event: unknown;
313
359
  } | {
314
360
  readonly _tag: "Stop";
@@ -451,9 +497,11 @@ type EventProtocolError<Message extends string, Tag extends PropertyKey = never>
451
497
  type DuplicateEventTag<Events extends ReadonlyArray<Machine.TaggedSchema>, Seen extends PropertyKey = never> = number extends Events["length"] ? never : Events extends readonly [
452
498
  infer Head extends Machine.TaggedSchema,
453
499
  ...infer Tail extends ReadonlyArray<Machine.TaggedSchema>
454
- ] ? Machine.TagOf<Head> extends infer Tag extends PropertyKey ? Tag extends Seen ? Tag | DuplicateEventTag<Tail, Seen> : DuplicateEventTag<Tail, Seen | Tag> : never : never;
500
+ ] ? Machine.TagOf<Head> extends infer Tag extends PropertyKey ? Extract<Tag, Seen> | DuplicateEventTag<Tail, Seen | Tag> : never : never;
455
501
  type ValidateInputEventProtocol<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateInput extends PropertyKey = DuplicateEventTag<InputEvents>> = [DuplicateInput] extends [never] ? unknown : EventProtocolError<"Public event tags must be unique", DuplicateInput>;
502
+ type ValidateEmittedEventProtocol<EmittedEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateEmitted extends PropertyKey = DuplicateEventTag<EmittedEvents>> = [DuplicateEmitted] extends [never] ? unknown : EventProtocolError<"Emitted event tags must be unique", DuplicateEmitted>;
456
503
  type ValidateInternalEventProtocol<InputEvents extends ReadonlyArray<Machine.TaggedSchema>, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, DuplicateInternal extends PropertyKey = DuplicateEventTag<InternalEvents>, Overlap extends PropertyKey = Extract<Machine.TagOf<InputEvents[number]>, Machine.TagOf<InternalEvents[number]>>> = [DuplicateInternal] extends [never] ? [Overlap] extends [never] ? unknown : EventProtocolError<"Public and internal event tags must be disjoint", Overlap> : EventProtocolError<"Internal event tags must be unique", DuplicateInternal>;
504
+ type ValidateEventProtocolBuilder<Kind extends Machine.EventProtocolKind, Inputs extends ReadonlyArray<Machine.EventProtocolInput<Kind>>, Schemas extends ReadonlyArray<Machine.TaggedSchema> = Machine.EventProtocolInputSchemasOf<Kind, Inputs>, Duplicate extends PropertyKey = DuplicateEventTag<Schemas>> = [Duplicate] extends [never] ? unknown : EventProtocolError<"Event protocol tags must be unique", Duplicate>;
457
505
  declare const SnapshotBuilderStateTypeId: typeof internal.SnapshotBuilderStateTypeId;
458
506
  declare const SnapshotBuilderConstructionTypeId: unique symbol;
459
507
  type SnapshotBuilderComplete<Regions, Constructed extends boolean = false> = {
@@ -811,6 +859,28 @@ export type RuntimeOutcome<State, Error = never, Output = never> = {
811
859
  readonly status: "stopped";
812
860
  }>;
813
861
  };
862
+ /**
863
+ * A fresh machine whose observable streams exist before initialization.
864
+ *
865
+ * Subscribe to `emissions` before evaluating `start` when initial-entry
866
+ * emissions must be observed. `start` is one-shot: concurrent and repeated
867
+ * evaluations share the same initialization and running reference.
868
+ *
869
+ * @category models
870
+ * @since 0.11.0
871
+ */
872
+ export interface Prepared<out State, in Event, out Error, out Output, out Emitted, out StartError, StartRequirements> {
873
+ /** Stable machine definition id, or a generated fallback when none was declared. */
874
+ readonly id: string;
875
+ /** Unique identity reserved for this prepared machine instance. */
876
+ readonly sessionId: string;
877
+ /** Waits for startup, then streams the initial lifecycle snapshot and later changes. */
878
+ readonly changes: Stream.Stream<RuntimeSnapshot<State, Error, Output>, StartError>;
879
+ /** Streams ephemeral notifications published after subscription. */
880
+ readonly emissions: Stream.Stream<Emitted>;
881
+ /** Initializes this machine once and returns its running reference. */
882
+ readonly start: Effect.Effect<MachineRef<State, Event, Error, Output, Emitted>, StartError, StartRequirements>;
883
+ }
814
884
  /**
815
885
  * Provides access to a running machine's state, lifecycle, event input, and
816
886
  * termination operations.
@@ -825,7 +895,7 @@ export type RuntimeOutcome<State, Error = never, Output = never> = {
825
895
  * @category models
826
896
  * @since 0.4.0
827
897
  */
828
- export interface MachineRef<out State, in Event, out Error = never, out Output = never> {
898
+ export interface MachineRef<out State, in Event, out Error = never, out Output = never, out Emitted = never> extends ActorRef<Event> {
829
899
  /** Stable machine definition id, or a generated fallback when none was declared. */
830
900
  readonly id: string;
831
901
  /** Unique identity for this running machine instance. */
@@ -834,8 +904,13 @@ export interface MachineRef<out State, in Event, out Error = never, out Output =
834
904
  readonly state: Effect.Effect<State>;
835
905
  /** Reads the latest lifecycle snapshot. */
836
906
  readonly snapshot: Effect.Effect<RuntimeSnapshot<State, Error, Output>>;
837
- /** Streams lifecycle snapshots published after subscription. */
907
+ /** Streams the current lifecycle snapshot followed by later changes. */
838
908
  readonly changes: Stream.Stream<RuntimeSnapshot<State, Error, Output>>;
909
+ /**
910
+ * Streams ephemeral notifications published after subscription. Emissions
911
+ * are not retained or replayed; the stream completes when the actor stops.
912
+ */
913
+ readonly emissions: Stream.Stream<Emitted>;
839
914
  /** Waits for machine output or fails when execution fails or is stopped. */
840
915
  readonly join: Effect.Effect<Output, Error | StoppedError>;
841
916
  /** Stops this machine instance and its owned child processes. */
@@ -903,13 +978,6 @@ export declare namespace Logic {
903
978
  /**
904
979
  * Machine-local capabilities available while process logic initializes.
905
980
  *
906
- * **Gotchas**
907
- *
908
- * `sendParent` accepts `unknown` because process logic is independent from
909
- * the parent that eventually owns it. Prefer typed process output or an
910
- * invocation lifecycle transition when either can represent the
911
- * communication.
912
- *
913
981
  * @category models
914
982
  * @since 0.4.0
915
983
  */
@@ -920,10 +988,11 @@ export declare namespace Logic {
920
988
  readonly parent: Address<unknown> | undefined;
921
989
  /** Starts a child process owned by this scope. */
922
990
  readonly spawn: Spawn;
923
- /** Sends an untyped event to the owning process. */
924
- readonly sendParent: (event: unknown) => Effect.Effect<void, StoppedError>;
925
- /** Sends an event through a typed parent-local child address. */
926
- readonly sendTo: <Address extends ChildAddress<never>>(id: Address, event: ChildAddress.Event<Address>) => Effect.Effect<void, StoppedError>;
991
+ /** Sends an event to an actor reference or typed parent-local child address. */
992
+ readonly sendTo: {
993
+ <TargetEvent>(target: ActorRef<TargetEvent>, event: TargetEvent): Effect.Effect<void, StoppedError>;
994
+ <Address extends ChildAddress<never>>(id: Address, event: ChildAddress.Event<Address>): Effect.Effect<void, StoppedError>;
995
+ };
927
996
  /** Stops a child process selected by its parent-local address. */
928
997
  readonly stopChild: <Event>(id: ChildAddress<Event>) => Effect.Effect<void>;
929
998
  }
@@ -992,14 +1061,14 @@ export declare namespace ChildMachine {
992
1061
  * @category utility types
993
1062
  * @since 0.4.0
994
1063
  */
995
- type Ref<Child> = Child extends ChildMachine<string, infer M> ? MachineRef<Machine.Snapshot<Machine.States<M>>, Machine.EventInput<Machine.InputEvent<M>>, Machine.Error<M> | ActionError<Machine.Services<M>> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Machine.Output<M>> : never;
1064
+ type Ref<Child> = Child extends ChildMachine<string, infer M> ? MachineRef<Machine.Snapshot<Machine.States<M>>, Machine.EventInput<Machine.InputEvent<M>>, Machine.Error<M> | ActionError<Machine.Services<M>> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Machine.Output<M>, Machine.EmittedEvent<M>> : never;
996
1065
  /**
997
1066
  * Event accepted by the child selected by a descriptor.
998
1067
  *
999
1068
  * @category utility types
1000
1069
  * @since 0.4.0
1001
1070
  */
1002
- type Event<Child> = Ref<Child> extends MachineRef<any, infer Event, any, any> ? Event : never;
1071
+ type Event<Child> = Child extends ChildMachine<string, infer M> ? Machine.EventInput<Machine.InputEvent<M>> : never;
1003
1072
  }
1004
1073
  /**
1005
1074
  * Parent-local address for a child process that can receive events.
@@ -1089,7 +1158,7 @@ export declare namespace Machine {
1089
1158
  *
1090
1159
  * @internal
1091
1160
  */
1092
- interface TypeCarrier<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, Emits extends ReadonlyArray<TaggedSchema>, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>> {
1161
+ interface TypeCarrier<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, Emits extends ReadonlyArray<TaggedSchema>, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>> {
1093
1162
  readonly states: States;
1094
1163
  readonly events: Events;
1095
1164
  readonly input: Input;
@@ -1100,9 +1169,10 @@ export declare namespace Machine {
1100
1169
  readonly initialServices: InitialR;
1101
1170
  readonly finalStates: FinalStates;
1102
1171
  readonly output: Output;
1103
- readonly emits: Emits;
1172
+ readonly emittedEvents: Emits;
1104
1173
  readonly outputStates: OutputStates;
1105
1174
  readonly inputEvents: InputEvents;
1175
+ readonly parentEvents: ParentEvents;
1106
1176
  }
1107
1177
  /**
1108
1178
  * Any schema-first machine.
@@ -1119,11 +1189,12 @@ export declare namespace Machine {
1119
1189
  interface Any extends Pipeable {
1120
1190
  readonly [TypeId]: TypeId;
1121
1191
  /** @internal */
1122
- readonly [MachineTypeId]: TypeCarrier<any, any, any, any, any, any, any, any, any, any, any, any, any>;
1192
+ readonly [MachineTypeId]: TypeCarrier<any, any, any, any, any, any, any, any, any, any, any, any, any, any>;
1123
1193
  readonly states: StateSchemas;
1124
- readonly events: ReadonlyArray<TaggedSchema>;
1125
- readonly internalEvents: ReadonlyArray<TaggedSchema>;
1126
- readonly emits: ReadonlyArray<TaggedSchema>;
1194
+ readonly events: EventProtocol.Any<"public">;
1195
+ readonly internalEvents: EventProtocol.Any<"internal">;
1196
+ readonly emittedEvents: EventProtocol.Any<"emitted">;
1197
+ readonly parentEvents: EventProtocol.Any<"public">;
1127
1198
  readonly input: Schema.Top | undefined;
1128
1199
  readonly id: string | undefined;
1129
1200
  /** @internal */
@@ -1135,6 +1206,8 @@ export declare namespace Machine {
1135
1206
  /** @internal */
1136
1207
  readonly handle: any;
1137
1208
  /** @internal */
1209
+ readonly invoke: any;
1210
+ /** @internal */
1138
1211
  readonly initial: any;
1139
1212
  }
1140
1213
  /**
@@ -1213,7 +1286,9 @@ export declare namespace Machine {
1213
1286
  * @category utility types
1214
1287
  * @since 0.4.0
1215
1288
  */
1216
- type Emits<M extends Any> = M[typeof MachineTypeId]["emits"];
1289
+ type EmittedEvents<M extends Any> = M[typeof MachineTypeId]["emittedEvents"];
1290
+ /** @deprecated Use {@link EmittedEvents}. */
1291
+ type Emits<M extends Any> = EmittedEvents<M>;
1217
1292
  /**
1218
1293
  * Extracts state paths with implemented output handlers.
1219
1294
  *
@@ -1228,11 +1303,15 @@ export declare namespace Machine {
1228
1303
  * @since 0.4.0
1229
1304
  */
1230
1305
  type InputEvents<M extends Any> = M[typeof MachineTypeId]["inputEvents"];
1231
- /** Extracts the internal event schema tuple carried by a machine definition. */
1232
- type InternalEvents<M extends Any> = Events<M> extends readonly [
1233
- ...InputEvents<M>,
1306
+ /** Extracts the public input protocol required from an owning actor. */
1307
+ type ParentEvents<M extends Any> = M[typeof MachineTypeId]["parentEvents"];
1308
+ /** Extracts an internal event schema tuple from the complete and public protocols. */
1309
+ type InternalEventSchemas<Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>> = Events extends readonly [
1310
+ ...InputEvents,
1234
1311
  ...infer Internal extends ReadonlyArray<TaggedSchema>
1235
- ] ? Internal : readonly [];
1312
+ ] ? readonly [...Internal] : readonly [];
1313
+ /** Extracts the internal event schema tuple carried by a machine definition. */
1314
+ type InternalEvents<M extends Any> = InternalEventSchemas<Events<M>, InputEvents<M>>;
1236
1315
  /**
1237
1316
  * Extracts the complete event protocol handled inside a machine.
1238
1317
  *
@@ -1260,34 +1339,83 @@ export declare namespace Machine {
1260
1339
  readonly [EventConstructionTypeId]: Event;
1261
1340
  readonly _tag: Event["_tag"];
1262
1341
  }
1342
+ /** Opaque construction returned by {@link emittedEvents}. */
1343
+ interface EmittedEventConstruction<out Event extends {
1344
+ readonly _tag: PropertyKey;
1345
+ }> {
1346
+ readonly [EmittedEventConstructionTypeId]: Event;
1347
+ readonly _tag: Event["_tag"];
1348
+ }
1263
1349
  /** A decoded event or a deferred machine-bound construction of that event. */
1264
1350
  type EventInput<Event> = Event | (Event extends {
1265
1351
  readonly _tag: PropertyKey;
1266
1352
  } ? EventConstruction<Event> : never);
1353
+ /** A decoded emitted event or a deferred emitted-event construction. */
1354
+ type EmittedEventInput<Event> = Event | (Event extends {
1355
+ readonly _tag: PropertyKey;
1356
+ } ? EmittedEventConstruction<Event> : never);
1267
1357
  /** Event inputs accepted for a schema tuple at machine delivery boundaries. */
1268
1358
  type EventInputOf<Events extends ReadonlyArray<TaggedSchema>> = EventInput<EventOf<Events>>;
1359
+ /** Identifies whether an event protocol is accepted publicly or only inside a machine. */
1360
+ type EventProtocolKind = "public" | "internal" | "emitted";
1269
1361
  type EventConstructorInput<EventSchema extends TaggedSchema> = Omit<EventSchema["~type.make.in"], "_tag">;
1270
- type EventConstructor<EventSchema extends TaggedSchema, Tag extends EventSchema["Type"]["_tag"]> = {} extends EventConstructorInput<EventSchema> ? (input?: EventConstructorInput<EventSchema>) => EventConstruction<EventByTag<readonly [EventSchema], Tag>> : (input: EventConstructorInput<EventSchema>) => EventConstruction<EventByTag<readonly [EventSchema], Tag>>;
1271
- type EventConstructorsForSchema<EventSchema extends TaggedSchema> = EventSchema extends {
1362
+ type EventConstructor<EventSchema extends TaggedSchema, Tag extends EventSchema["Type"]["_tag"], Kind extends EventProtocolKind> = {} extends EventConstructorInput<EventSchema> ? (input?: EventConstructorInput<EventSchema>) => Kind extends "emitted" ? EmittedEventConstruction<EventByTag<readonly [EventSchema], Tag>> : EventConstruction<EventByTag<readonly [EventSchema], Tag>> : (input: EventConstructorInput<EventSchema>) => Kind extends "emitted" ? EmittedEventConstruction<EventByTag<readonly [EventSchema], Tag>> : EventConstruction<EventByTag<readonly [EventSchema], Tag>>;
1363
+ type FiniteEventTag<Tag extends PropertyKey> = string extends Tag ? never : number extends Tag ? never : symbol extends Tag ? never : Tag;
1364
+ type EventConstructorsForSchema<EventSchema extends TaggedSchema, Kind extends EventProtocolKind> = EventSchema extends {
1272
1365
  readonly cases: infer Cases extends Readonly<Record<PropertyKey, TaggedSchema>>;
1273
1366
  } ? {
1274
- readonly [Tag in keyof Cases]: Tag extends Cases[Tag]["Type"]["_tag"] ? EventConstructor<Cases[Tag], Tag> : never;
1367
+ readonly [Tag in keyof Cases]: Tag extends Cases[Tag]["Type"]["_tag"] ? EventConstructor<Cases[Tag], Tag, Kind> : never;
1275
1368
  } : EventSchema extends {
1276
1369
  readonly members: infer Members extends ReadonlyArray<TaggedSchema>;
1277
- } ? Types.UnionToIntersection<EventConstructorsForSchema<Members[number]>> : {
1278
- readonly [Tag in EventSchema["Type"]["_tag"]]: EventConstructor<EventSchema, Tag>;
1370
+ } ? Types.UnionToIntersection<EventConstructorsForSchema<Members[number], Kind>> : {
1371
+ readonly [Tag in FiniteEventTag<EventSchema["Type"]["_tag"]>]: EventConstructor<EventSchema, Tag, Kind>;
1279
1372
  };
1280
1373
  /** Protocol-bound constructors keyed by each configured event tag. */
1281
- type EventConstructors<Events extends ReadonlyArray<TaggedSchema>> = {
1282
- readonly [Tag in keyof Types.UnionToIntersection<EventConstructorsForSchema<Events[number]>>]: Types.UnionToIntersection<EventConstructorsForSchema<Events[number]>>[Tag];
1374
+ type EventConstructors<Events extends ReadonlyArray<TaggedSchema>, Kind extends EventProtocolKind = "public"> = {
1375
+ readonly [Tag in keyof Types.UnionToIntersection<EventConstructorsForSchema<Events[number], Kind>>]: Types.UnionToIntersection<EventConstructorsForSchema<Events[number], Kind>>[Tag];
1376
+ };
1377
+ /**
1378
+ * A schema-backed event protocol exposing only deferred event constructors.
1379
+ *
1380
+ * The schema tuple is retained opaquely for machine runtime validation and
1381
+ * type inference. It is not exposed as a runtime property.
1382
+ *
1383
+ * @since 0.10.0
1384
+ */
1385
+ type EventProtocol<Kind extends EventProtocolKind, Schemas extends ReadonlyArray<TaggedSchema>> = EventConstructors<Schemas, Kind> & {
1386
+ readonly [EventProtocolTypeId]: {
1387
+ readonly kind: Kind;
1388
+ readonly schemas: Schemas;
1389
+ };
1283
1390
  };
1391
+ namespace EventProtocol {
1392
+ /** An erased event protocol descriptor retaining its kind and schema carrier. */
1393
+ interface Any<Kind extends EventProtocolKind = EventProtocolKind> {
1394
+ readonly [EventProtocolTypeId]: {
1395
+ readonly kind: Kind;
1396
+ readonly schemas: ReadonlyArray<TaggedSchema>;
1397
+ };
1398
+ }
1399
+ }
1400
+ /** A schema or an existing protocol accepted by an event builder. */
1401
+ type EventProtocolInput<Kind extends EventProtocolKind> = TaggedSchema | EventProtocol.Any<Kind>;
1402
+ type EventProtocolInputSchemas<Kind extends EventProtocolKind, Input extends EventProtocolInput<Kind>> = Input extends EventProtocol<Kind, infer Schemas> ? Schemas : Input extends TaggedSchema ? readonly [Input] : readonly [];
1403
+ /** Flattens schema and protocol inputs into one owned schema tuple. */
1404
+ type EventProtocolInputSchemasOf<Kind extends EventProtocolKind, Inputs extends ReadonlyArray<EventProtocolInput<Kind>>> = Inputs extends readonly [
1405
+ infer Head extends EventProtocolInput<Kind>,
1406
+ ...infer Tail extends ReadonlyArray<EventProtocolInput<Kind>>
1407
+ ] ? readonly [...EventProtocolInputSchemas<Kind, Head>, ...EventProtocolInputSchemasOf<Kind, Tail>] : readonly [];
1408
+ /** @internal Extracts the schema tuple carried opaquely by an event protocol. */
1409
+ type EventProtocolSchemas<Protocol extends EventProtocol.Any> = Protocol[typeof EventProtocolTypeId]["schemas"];
1284
1410
  /**
1285
1411
  * Extracts the event protocol emitted by a machine.
1286
1412
  *
1287
1413
  * @category utility types
1288
1414
  * @since 0.4.0
1289
1415
  */
1290
- type Emit<M extends Any> = EmitOf<Emits<M>>;
1416
+ type EmittedEvent<M extends Any> = EmittedEventOf<Emits<M>>;
1417
+ /** @deprecated Use {@link EmittedEvent}. */
1418
+ type Emit<M extends Any> = EmittedEvent<M>;
1291
1419
  /**
1292
1420
  * A schema whose decoded value contains a `_tag` discriminator.
1293
1421
  *
@@ -1860,7 +1988,9 @@ export declare namespace Machine {
1860
1988
  * @category utility types
1861
1989
  * @since 0.4.0
1862
1990
  */
1863
- type EmitOf<Emits extends ReadonlyArray<TaggedSchema>> = Emits[number]["Type"];
1991
+ type EmittedEventOf<Emits extends ReadonlyArray<TaggedSchema>> = Emits[number]["Type"];
1992
+ /** @deprecated Use {@link EmittedEventOf}. */
1993
+ type EmitOf<Emits extends ReadonlyArray<TaggedSchema>> = EmittedEventOf<Emits>;
1864
1994
  /**
1865
1995
  * Event values received by lifecycle callbacks.
1866
1996
  *
@@ -2260,6 +2390,20 @@ export declare namespace Machine {
2260
2390
  readonly [AncestorStateId in ValuedStateIdentifier<States>]: StateByIdentifier<States, AncestorStateId>;
2261
2391
  }>;
2262
2392
  }
2393
+ /**
2394
+ * Opaque result returned by an explicitly targetless transition.
2395
+ *
2396
+ * The transition remains handled and retains its queued commands, raised
2397
+ * events, and emitted events, but selects no concrete destination. Declared
2398
+ * `targets` constrain only concrete destinations, so this result is always
2399
+ * permitted from ordinary transition handlers.
2400
+ *
2401
+ * @category models
2402
+ * @since 0.10.0
2403
+ */
2404
+ interface NoTarget {
2405
+ readonly [Topology.NoTargetTypeId]: typeof Topology.NoTargetTypeId;
2406
+ }
2263
2407
  /**
2264
2408
  * Transition instruction that restores a history pseudo-state's parent.
2265
2409
  *
@@ -2336,9 +2480,9 @@ export declare namespace Machine {
2336
2480
  *
2337
2481
  * **Details**
2338
2482
  *
2339
- * `local` targets the nearest compound scope for the source state, `branch`
2340
- * targets descendants of the source root, and `full` builds complete
2341
- * snapshots for any root.
2483
+ * `none()` handles without selecting a destination, `local` targets the
2484
+ * nearest compound scope for the source state, `branch` targets descendants
2485
+ * of the source root, and `full` builds complete snapshots for any root.
2342
2486
  *
2343
2487
  * These builders control how the next active configuration is assembled; they
2344
2488
  * do not directly control state re-entry. Exit and entry paths are derived
@@ -2351,6 +2495,17 @@ export declare namespace Machine {
2351
2495
  * @since 0.4.0
2352
2496
  */
2353
2497
  interface TargetBuilder<States extends StateSchemas, Source extends StateNodeIdentifier<States>> {
2498
+ /**
2499
+ * Selects an explicitly targetless transition.
2500
+ *
2501
+ * The event or lifecycle outcome is handled and queued operations are
2502
+ * retained, while the current state configuration remains the transition
2503
+ * result. This remains valid when the handler declares concrete `targets`,
2504
+ * because those paths are an upper bound rather than an exhaustive result.
2505
+ *
2506
+ * @since 0.10.0
2507
+ */
2508
+ readonly none: () => NoTarget;
2354
2509
  /**
2355
2510
  * Moves to another state in the same local group. The value of the state
2356
2511
  * containing that group, and values in other active branches, are kept.
@@ -2388,10 +2543,10 @@ export declare namespace Machine {
2388
2543
  * @category models
2389
2544
  * @since 0.4.0
2390
2545
  */
2391
- interface HandlerContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R> {
2546
+ interface HandlerContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, EventTag extends TagOf<Events[number]>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2392
2547
  readonly state: StateByIdentifier<States, StateId>;
2393
- readonly parent: ParentStateValue<States, StateId>;
2394
- readonly parents: ParentStateValues<States, StateId>;
2548
+ readonly containingState: ParentStateValue<States, StateId>;
2549
+ readonly ancestors: ParentStateValues<States, StateId>;
2395
2550
  /** Complete logical configuration captured at the start of this microstep. */
2396
2551
  readonly snapshot: Snapshot<States>;
2397
2552
  readonly event: EventByTag<Events, EventTag>;
@@ -2409,10 +2564,10 @@ export declare namespace Machine {
2409
2564
  * @category models
2410
2565
  * @since 0.4.0
2411
2566
  */
2412
- interface StateActionContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2567
+ interface StateActionContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2413
2568
  readonly state: StateByIdentifier<States, StateId>;
2414
- readonly parent: ParentStateValue<States, StateId>;
2415
- readonly parents: ParentStateValues<States, StateId>;
2569
+ readonly containingState: ParentStateValue<States, StateId>;
2570
+ readonly ancestors: ParentStateValues<States, StateId>;
2416
2571
  readonly event: LifecycleEvent<Events>;
2417
2572
  }
2418
2573
  /**
@@ -2421,10 +2576,10 @@ export declare namespace Machine {
2421
2576
  * @category models
2422
2577
  * @since 0.4.0
2423
2578
  */
2424
- interface InvokeContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2579
+ interface InvokeContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2425
2580
  readonly state: StateByIdentifier<States, StateId>;
2426
- readonly parent: ParentStateValue<States, StateId>;
2427
- readonly parents: ParentStateValues<States, StateId>;
2581
+ readonly containingState: ParentStateValue<States, StateId>;
2582
+ readonly ancestors: ParentStateValues<States, StateId>;
2428
2583
  readonly event: LifecycleEvent<Events>;
2429
2584
  }
2430
2585
  /**
@@ -2433,11 +2588,11 @@ export declare namespace Machine {
2433
2588
  * @category models
2434
2589
  * @since 0.4.0
2435
2590
  */
2436
- interface InvokeSnapshotContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, State, Error, Output> {
2591
+ interface InvokeSnapshotContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, State, Error, Output, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2437
2592
  readonly id: string;
2438
2593
  readonly state: StateByIdentifier<States, StateId>;
2439
- readonly parent: ParentStateValue<States, StateId>;
2440
- readonly parents: ParentStateValues<States, StateId>;
2594
+ readonly containingState: ParentStateValue<States, StateId>;
2595
+ readonly ancestors: ParentStateValues<States, StateId>;
2441
2596
  readonly target: TargetBuilder<States, StateId>;
2442
2597
  readonly snapshot: Extract<RuntimeSnapshot<State, Error, Output>, {
2443
2598
  readonly status: "active";
@@ -2449,21 +2604,21 @@ export declare namespace Machine {
2449
2604
  * @category models
2450
2605
  * @since 0.4.0
2451
2606
  */
2452
- interface InvokeDoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Output> {
2607
+ interface InvokeDoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Output, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2453
2608
  readonly id: string;
2454
2609
  readonly state: StateByIdentifier<States, StateId>;
2455
- readonly parent: ParentStateValue<States, StateId>;
2456
- readonly parents: ParentStateValues<States, StateId>;
2610
+ readonly containingState: ParentStateValue<States, StateId>;
2611
+ readonly ancestors: ParentStateValues<States, StateId>;
2457
2612
  readonly snapshot: Snapshot<States>;
2458
2613
  readonly target: TargetBuilder<States, StateId>;
2459
2614
  readonly output: Output;
2460
2615
  }
2461
2616
  /** Context passed to an invocation typed-failure transition. */
2462
- interface InvokeFailureContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Error> {
2617
+ interface InvokeFailureContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Error, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2463
2618
  readonly id: string;
2464
2619
  readonly state: StateByIdentifier<States, StateId>;
2465
- readonly parent: ParentStateValue<States, StateId>;
2466
- readonly parents: ParentStateValues<States, StateId>;
2620
+ readonly containingState: ParentStateValue<States, StateId>;
2621
+ readonly ancestors: ParentStateValues<States, StateId>;
2467
2622
  readonly snapshot: Snapshot<States>;
2468
2623
  readonly target: TargetBuilder<States, StateId>;
2469
2624
  readonly error: Error;
@@ -2474,10 +2629,10 @@ export declare namespace Machine {
2474
2629
  * @category models
2475
2630
  * @since 0.4.0
2476
2631
  */
2477
- interface AlwaysContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2632
+ interface AlwaysContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2478
2633
  readonly state: StateByIdentifier<States, StateId>;
2479
- readonly parent: ParentStateValue<States, StateId>;
2480
- readonly parents: ParentStateValues<States, StateId>;
2634
+ readonly containingState: ParentStateValue<States, StateId>;
2635
+ readonly ancestors: ParentStateValues<States, StateId>;
2481
2636
  /** Complete logical configuration captured at the start of this microstep. */
2482
2637
  readonly snapshot: Snapshot<States>;
2483
2638
  readonly event: LifecycleEvent<Events>;
@@ -2496,10 +2651,10 @@ export declare namespace Machine {
2496
2651
  * @category models
2497
2652
  * @since 0.4.0
2498
2653
  */
2499
- interface DoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2654
+ interface DoneContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2500
2655
  readonly state: StateByIdentifier<States, StateId>;
2501
- readonly parent: ParentStateValue<States, StateId>;
2502
- readonly parents: ParentStateValues<States, StateId>;
2656
+ readonly containingState: ParentStateValue<States, StateId>;
2657
+ readonly ancestors: ParentStateValues<States, StateId>;
2503
2658
  /** Complete logical configuration captured at the start of this microstep. */
2504
2659
  readonly snapshot: Snapshot<States>;
2505
2660
  readonly event: LifecycleEvent<Events>;
@@ -2514,9 +2669,9 @@ export declare namespace Machine {
2514
2669
  readonly target: TargetBuilder<States, StateId>;
2515
2670
  }
2516
2671
  /** Context passed to a transient choice resolver. There is no `state` value. */
2517
- interface ChoiceContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>> {
2518
- readonly parent: StateByIdentifier<States, Extract<ImmediateParentStateIdentifier<ChoiceId>, StateIdentifier<States>>>;
2519
- readonly parents: {
2672
+ interface ChoiceContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> extends ActorContext<InputEvents, ParentEvents> {
2673
+ readonly containingState: StateByIdentifier<States, Extract<ImmediateParentStateIdentifier<ChoiceId>, StateIdentifier<States>>>;
2674
+ readonly ancestors: {
2520
2675
  readonly [Parent in Extract<ParentStateIdentifier<ChoiceId>, ValuedStateIdentifier<States>>]: StateByIdentifier<States, Parent>;
2521
2676
  };
2522
2677
  readonly event: LifecycleEvent<Events>;
@@ -2530,8 +2685,8 @@ export declare namespace Machine {
2530
2685
  */
2531
2686
  interface FinalOutputContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2532
2687
  readonly state: StateByIdentifier<States, StateId>;
2533
- readonly parent: ParentStateValue<States, StateId>;
2534
- readonly parents: ParentStateValues<States, StateId>;
2688
+ readonly containingState: ParentStateValue<States, StateId>;
2689
+ readonly ancestors: ParentStateValues<States, StateId>;
2535
2690
  readonly event: LifecycleEvent<Events>;
2536
2691
  }
2537
2692
  /**
@@ -2554,8 +2709,8 @@ export declare namespace Machine {
2554
2709
  */
2555
2710
  interface ParallelOutputContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> {
2556
2711
  readonly state: StateByIdentifier<States, StateId>;
2557
- readonly parent: ParentStateValue<States, StateId>;
2558
- readonly parents: ParentStateValues<States, StateId>;
2712
+ readonly containingState: ParentStateValue<States, StateId>;
2713
+ readonly ancestors: ParentStateValues<States, StateId>;
2559
2714
  readonly event: LifecycleEvent<Events>;
2560
2715
  readonly outputs: ParallelOutputRegions<States, StateId>;
2561
2716
  }
@@ -2582,14 +2737,15 @@ export declare namespace Machine {
2582
2737
  *
2583
2738
  * **Details**
2584
2739
  *
2585
- * Handlers return snapshots for complete state replacement or target builder
2586
- * results for path-safe partial transitions. Raw decoded state values are not
2587
- * accepted at transition boundaries.
2740
+ * Handlers return snapshots for complete state replacement, target builder
2741
+ * results for path-safe partial transitions, or `target.none()` for an
2742
+ * explicitly targetless transition. Raw decoded state values and `void` are
2743
+ * not accepted at transition boundaries.
2588
2744
  *
2589
2745
  * @category utility types
2590
2746
  * @since 0.4.0
2591
2747
  */
2592
- type HandlerResult<States extends StateSchemas, E, R> = Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>> | StateConstruction<Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>>> | void;
2748
+ type HandlerResult<States extends StateSchemas, E, R> = Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>> | StateConstruction<Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>>> | NoTarget;
2593
2749
  /** A choice resolver must always select a typed target synchronously. */
2594
2750
  type ChoiceResult<States extends StateSchemas, E, R> = Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>> | StateConstruction<Snapshot<States> | Target<States, StateIdentifier<States>> | HistoryTarget<States, HistoryIdentifier<States>> | ChoiceTarget<States, ChoiceIdentifier<States>>>;
2595
2751
  /**
@@ -2748,6 +2904,14 @@ export declare namespace Machine {
2748
2904
  } ? Emitted : Invoke extends {
2749
2905
  readonly child: ChildMachine<string, infer M>;
2750
2906
  } ? Emit<M> : never;
2907
+ /** Public parent inputs required by an invoked child machine. */
2908
+ type InvokeParentEvents<Invoke> = Invoke extends {
2909
+ readonly [InvokeTypeId]: {
2910
+ readonly parentEvents: Types.Covariant<infer ParentEvent>;
2911
+ };
2912
+ } ? ParentEvent : IsAny<Invoke> extends true ? never : Invoke extends {
2913
+ readonly child: ChildMachine<string, infer M>;
2914
+ } ? EventOf<ParentEvents<M>> : never;
2751
2915
  /** Extracts transition results returned by invocation lifecycle handlers. */
2752
2916
  type InvokeOutcomeReturn<Invoke> = Invoke extends unknown ? (Invoke extends {
2753
2917
  readonly onDone?: infer Handler;
@@ -2819,18 +2983,19 @@ export declare namespace Machine {
2819
2983
  readonly "~effect/Machine/InvokeOwner"?: Types.Covariant<readonly [States, Events, Emits, StateId]>;
2820
2984
  }
2821
2985
  /** Type evidence retained by {@link invoke} without affecting runtime data. */
2822
- interface InvokeTyped<Output, Error, Requirements, InitialError, Emits = never> {
2986
+ interface InvokeTyped<Output, Error, Requirements, InitialError, Emits = never, ParentEvent = never> {
2823
2987
  readonly [InvokeTypeId]: {
2824
2988
  readonly output: Types.Covariant<Output>;
2825
2989
  readonly error: Types.Covariant<Error>;
2826
2990
  readonly requirements: Types.Covariant<Requirements>;
2827
2991
  readonly initialError: Types.Covariant<InitialError>;
2828
2992
  readonly emits: Types.Covariant<Emits>;
2993
+ readonly parentEvents: Types.Covariant<ParentEvent>;
2829
2994
  };
2830
2995
  }
2831
- type InvokeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = InvokeOwned<States, Events, Emits, StateId> & ({
2996
+ type InvokeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = InvokeOwned<States, Events, Emits, StateId> & ({
2832
2997
  readonly id: string;
2833
- readonly effect: InvokeSource<Effect.Effect<any, any, any>, InvokeContext<States, Events, Emits, StateId>>;
2998
+ readonly effect: InvokeSource<Effect.Effect<any, any, any>, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
2834
2999
  readonly after?: never;
2835
3000
  readonly logic?: never;
2836
3001
  readonly child?: never;
@@ -2840,7 +3005,7 @@ export declare namespace Machine {
2840
3005
  readonly onSnapshot?: never;
2841
3006
  } | {
2842
3007
  readonly id: string;
2843
- readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId>>;
3008
+ readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
2844
3009
  readonly effect?: never;
2845
3010
  readonly logic?: never;
2846
3011
  readonly child?: never;
@@ -2851,7 +3016,7 @@ export declare namespace Machine {
2851
3016
  } | {
2852
3017
  readonly id: string;
2853
3018
  readonly address: string;
2854
- readonly logic: InvokeSource<AnyLogicSource, InvokeContext<States, Events, Emits, StateId>>;
3019
+ readonly logic: InvokeSource<AnyLogicSource, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
2855
3020
  readonly effect?: never;
2856
3021
  readonly after?: never;
2857
3022
  readonly child?: never;
@@ -2860,7 +3025,7 @@ export declare namespace Machine {
2860
3025
  readonly onSnapshot?: unknown;
2861
3026
  } | {
2862
3027
  readonly child: ChildMachine.Any;
2863
- readonly input?: {} | null | ((context: InvokeContext<States, Events, Emits, StateId>) => unknown);
3028
+ readonly input?: {} | null | ((context: InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => unknown);
2864
3029
  readonly id?: never;
2865
3030
  readonly address?: never;
2866
3031
  readonly effect?: never;
@@ -2871,7 +3036,8 @@ export declare namespace Machine {
2871
3036
  readonly onSnapshot?: unknown;
2872
3037
  });
2873
3038
  /** State-bound inline invocation configuration. */
2874
- type InvokeDefinition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = InvokeConfig<States, Events, Emits, StateId> | ReadonlyArray<InvokeConfig<States, Events, Emits, StateId>>;
3039
+ type InvokeDefinition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> | ReadonlyArray<InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3040
+ type TypedInvokeDefinition = InvokeTyped<any, any, any, any, any, any> | ReadonlyArray<InvokeTyped<any, any, any, any, any, any>>;
2875
3041
  type InvokeHandlerRequirement<Value, Handler> = IsAny<Value> extends true ? {
2876
3042
  readonly handler: Handler;
2877
3043
  } : [Value] extends [never] ? {
@@ -2893,7 +3059,7 @@ export declare namespace Machine {
2893
3059
  } : {
2894
3060
  readonly onFailure?: never;
2895
3061
  } : never;
2896
- type EffectInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Fx extends Effect.Effect<any, any, any>, Source = Fx> = {
3062
+ type EffectInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Fx extends Effect.Effect<any, any, any>, Source = Fx, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
2897
3063
  readonly id: InvokeLifecycleId;
2898
3064
  readonly effect: Source;
2899
3065
  readonly after?: never;
@@ -2901,74 +3067,74 @@ export declare namespace Machine {
2901
3067
  readonly child?: never;
2902
3068
  readonly address?: never;
2903
3069
  readonly onSnapshot?: never;
2904
- } & InvokeDoneRequirement<Effect.Success<NoInfer<Fx>>, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<NoInfer<Fx>>>>> & InvokeFailureRequirement<Effect.Error<NoInfer<Fx>>, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<NoInfer<Fx>>>>>;
2905
- type TimerInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = {
3070
+ } & InvokeDoneRequirement<Effect.Success<NoInfer<Fx>>, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<NoInfer<Fx>>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<Effect.Error<NoInfer<Fx>>, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<NoInfer<Fx>>, InputEvents, ParentEvents>>>;
3071
+ type TimerInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
2906
3072
  readonly id: InvokeLifecycleId;
2907
- readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId>>;
3073
+ readonly after: InvokeSource<Duration.Input, InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
2908
3074
  readonly effect?: never;
2909
3075
  readonly logic?: never;
2910
3076
  readonly child?: never;
2911
3077
  readonly address?: never;
2912
3078
  readonly onFailure?: never;
2913
3079
  readonly onSnapshot?: never;
2914
- readonly onDone: InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, void>>;
3080
+ readonly onDone: InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>>;
2915
3081
  };
2916
- type LogicInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>, Source = Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>> = {
3082
+ type LogicInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>, Source = Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
2917
3083
  readonly id: InvokeLifecycleId;
2918
3084
  readonly address: Address & ChildAddress.Compatibility<Address, ChildEvent>;
2919
3085
  readonly logic: Source;
2920
3086
  readonly effect?: never;
2921
3087
  readonly after?: never;
2922
3088
  readonly child?: never;
2923
- readonly onSnapshot?: InvokeTransition<States, Events, Emits, InvokeSnapshotContext<States, Events, Emits, StateId, ChildState, ChildError, ChildOutput>>;
2924
- } & InvokeDoneRequirement<ChildOutput, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, ChildOutput>>> & InvokeFailureRequirement<ChildError, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, ChildError>>>;
2925
- type ChildInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, ChildDefinition extends Machine.Any, Child extends ChildMachine<string, ChildDefinition>> = {
3089
+ readonly onSnapshot?: InvokeTransition<States, Events, Emits, InvokeSnapshotContext<States, Events, Emits, StateId, ChildState, ChildError, ChildOutput, InputEvents, ParentEvents>>;
3090
+ } & InvokeDoneRequirement<ChildOutput, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, ChildOutput, InputEvents, ParentEvents>>> & InvokeFailureRequirement<ChildError, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, ChildError, InputEvents, ParentEvents>>>;
3091
+ type ChildInvokeArgs<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, ChildDefinition extends Machine.Any, Child extends ChildMachine<string, ChildDefinition>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
2926
3092
  readonly child: Child & (ChildDefinition extends EnsureExecutable<Machine.States<ChildDefinition>, Machine.UnhandledStates<ChildDefinition>, Machine.OutputStates<ChildDefinition>> ? unknown : never);
2927
3093
  readonly id?: never;
2928
3094
  readonly address?: never;
2929
3095
  readonly effect?: never;
2930
3096
  readonly after?: never;
2931
3097
  readonly logic?: never;
2932
- readonly onSnapshot?: InvokeTransition<States, Events, Emits, InvokeSnapshotContext<States, Events, Emits, StateId, Snapshot<Machine.States<ChildDefinition>>, Error<ChildDefinition>, Output<ChildDefinition>>>;
3098
+ readonly onSnapshot?: InvokeTransition<States, Events, Emits, InvokeSnapshotContext<States, Events, Emits, StateId, Snapshot<Machine.States<ChildDefinition>>, Error<ChildDefinition>, Output<ChildDefinition>, InputEvents, ParentEvents>>;
2933
3099
  } & (Input<ChildDefinition> extends typeof Schema.Void ? {
2934
3100
  readonly input?: never;
2935
3101
  } : {
2936
- readonly input: InvokeSource<Input<ChildDefinition>["Type"], InvokeContext<States, Events, Emits, StateId>>;
2937
- }) & InvokeDoneRequirement<Output<ChildDefinition>, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, Output<ChildDefinition>>>> & InvokeFailureRequirement<Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, Error<ChildDefinition> | ActionError<Services<ChildDefinition>>>>>;
3102
+ readonly input: InvokeSource<Input<ChildDefinition>["Type"], InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
3103
+ }) & InvokeDoneRequirement<Output<ChildDefinition>, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, Output<ChildDefinition>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, InputEvents, ParentEvents>>>;
2938
3104
  type LogicStateOf<Value> = Value extends Logic<infer State, any, any, any, any, any> ? State : never;
2939
3105
  type LogicEventOf<Value> = Value extends Logic<any, infer Event, any, any, any, any> ? Event : never;
2940
3106
  type LogicErrorOf<Value> = Value extends Logic<any, any, infer Error, any, any, any> ? Error : never;
2941
3107
  type LogicServicesOf<Value> = Value extends Logic<any, any, any, infer Services, any, any> ? Services : never;
2942
3108
  type LogicOutputOf<Value> = Value extends Logic<any, any, any, any, infer Output, any> ? Output : never;
2943
3109
  type LogicInitialErrorOf<Value> = Value extends Logic<any, any, any, any, any, infer Error> ? Error : never;
2944
- type ContextualInvokeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Raw> = Raw extends InvokeTyped<any, any, any, any, any> ? unknown : Raw extends {
3110
+ type ContextualInvokeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Raw> = Raw extends InvokeTyped<any, any, any, any, any> ? unknown : Raw extends {
2945
3111
  readonly effect: infer Source;
2946
- } ? InvokeResolvedSource<Source> extends infer Fx extends Effect.Effect<any, any, any> ? InvokeDoneRequirement<Effect.Success<Fx>, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<Fx>>>> & InvokeFailureRequirement<Effect.Error<Fx>, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<Fx>>>> & {
3112
+ } ? InvokeResolvedSource<Source> extends infer Fx extends Effect.Effect<any, any, any> ? InvokeDoneRequirement<Effect.Success<Fx>, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<Fx>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<Effect.Error<Fx>, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<Fx>, InputEvents, ParentEvents>>> & {
2947
3113
  readonly onSnapshot?: never;
2948
3114
  } : never : Raw extends {
2949
3115
  readonly after: unknown;
2950
3116
  } ? {
2951
- readonly onDone: InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, void>>;
3117
+ readonly onDone: InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, void, InputEvents, ParentEvents>>;
2952
3118
  readonly onFailure?: never;
2953
3119
  readonly onSnapshot?: never;
2954
3120
  } : Raw extends {
2955
3121
  readonly logic: infer Source;
2956
3122
  readonly address: infer Address;
2957
- } ? InvokeResolvedSource<Source> extends infer ChildLogic extends Logic<any, any, any, any, any, any> ? InvokeDoneRequirement<InvokeOutput<Raw>, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, InvokeOutput<Raw>>>> & InvokeFailureRequirement<InvokeRuntimeError<Raw>, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, InvokeRuntimeError<Raw>>>> & {
3123
+ } ? InvokeResolvedSource<Source> extends infer ChildLogic extends Logic<any, any, any, any, any, any> ? InvokeDoneRequirement<InvokeOutput<Raw>, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, InvokeOutput<Raw>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<InvokeRuntimeError<Raw>, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, InvokeRuntimeError<Raw>, InputEvents, ParentEvents>>> & {
2958
3124
  readonly address: ChildAddress<never> & ChildAddress.Compatibility<Address, ChildLogic extends Logic<any, infer ChildEvent, any, any, any, any> ? ChildEvent : never>;
2959
- readonly onSnapshot?: InvokeTransition<States, Events, Emits, InvokeSnapshotContext<States, Events, Emits, StateId, ChildLogic extends Logic<infer ChildState, any, any, any, any, any> ? ChildState : never, InvokeRuntimeError<Raw>, InvokeOutput<Raw>>>;
3125
+ readonly onSnapshot?: InvokeTransition<States, Events, Emits, InvokeSnapshotContext<States, Events, Emits, StateId, ChildLogic extends Logic<infer ChildState, any, any, any, any, any> ? ChildState : never, InvokeRuntimeError<Raw>, InvokeOutput<Raw>, InputEvents, ParentEvents>>;
2960
3126
  } : never : Raw extends {
2961
3127
  readonly child: infer Child extends ChildMachine<string, infer ChildDefinition>;
2962
- } ? ChildMachineLogic<Child> extends infer ChildLogic extends Logic<any, any, any, any, any, any> ? InvokeDoneRequirement<Output<ChildDefinition>, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, Output<ChildDefinition>>>> & InvokeFailureRequirement<Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, Error<ChildDefinition> | ActionError<Services<ChildDefinition>>>>> & (Input<ChildDefinition> extends typeof Schema.Void ? {
3128
+ } ? ChildMachineLogic<Child> extends infer ChildLogic extends Logic<any, any, any, any, any, any> ? InvokeDoneRequirement<Output<ChildDefinition>, InvokeTransition<States, Events, Emits, InvokeDoneContext<States, Events, Emits, StateId, Output<ChildDefinition>, InputEvents, ParentEvents>>> & InvokeFailureRequirement<Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, InvokeTransition<States, Events, Emits, InvokeFailureContext<States, Events, Emits, StateId, Error<ChildDefinition> | ActionError<Services<ChildDefinition>>, InputEvents, ParentEvents>>> & (Input<ChildDefinition> extends typeof Schema.Void ? {
2963
3129
  readonly input?: never;
2964
3130
  } : {
2965
- readonly input: InvokeSource<Input<ChildDefinition>["Type"], InvokeContext<States, Events, Emits, StateId>>;
3131
+ readonly input: InvokeSource<Input<ChildDefinition>["Type"], InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>>;
2966
3132
  }) & {
2967
- readonly onSnapshot?: InvokeTransition<States, Events, Emits, InvokeSnapshotContext<States, Events, Emits, StateId, Snapshot<Machine.States<ChildDefinition>>, Error<ChildDefinition>, Output<ChildDefinition>>>;
3133
+ readonly onSnapshot?: InvokeTransition<States, Events, Emits, InvokeSnapshotContext<States, Events, Emits, StateId, Snapshot<Machine.States<ChildDefinition>>, Error<ChildDefinition>, Output<ChildDefinition>, InputEvents, ParentEvents>>;
2968
3134
  } : never : never;
2969
- type ContextualInvokeDefinition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Raw> = Raw extends ReadonlyArray<any> ? {
2970
- readonly [Index in keyof Raw]: ContextualInvokeConfig<States, Events, Emits, StateId, Raw[Index]>;
2971
- } : ContextualInvokeConfig<States, Events, Emits, StateId, Raw>;
3135
+ type ContextualInvokeDefinition<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Raw> = Raw extends ReadonlyArray<any> ? {
3136
+ readonly [Index in keyof Raw]: ContextualInvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents, Raw[Index]>;
3137
+ } : ContextualInvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents, Raw>;
2972
3138
  type OutputHandlerConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, Context> = NodeByIdentifier<States, StateId> extends {
2973
3139
  readonly output: Schema.Top;
2974
3140
  } ? {
@@ -2987,33 +3153,33 @@ export declare namespace Machine {
2987
3153
  * @category models
2988
3154
  * @since 0.4.0
2989
3155
  */
2990
- type ActiveStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R> = {
2991
- readonly entry?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
2992
- readonly exit?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
2993
- readonly invoke?: InvokeDefinition<States, Events, Emits, StateId>;
2994
- readonly always?: ((context: AlwaysContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
3156
+ type ActiveStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
3157
+ readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
3158
+ readonly exit?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
3159
+ readonly invoke?: InvokeDefinition<States, Events, Emits, StateId, InputEvents, ParentEvents> | TypedInvokeDefinition;
3160
+ readonly always?: ((context: AlwaysContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
2995
3161
  /** Statically declared upper bound of possible target paths. */
2996
3162
  readonly targets?: ReadonlyArray<StateNodeIdentifier<States>>;
2997
- readonly transition: (context: AlwaysContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
3163
+ readonly transition: (context: AlwaysContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
2998
3164
  };
2999
- readonly onDone?: ((context: DoneContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
3165
+ readonly onDone?: ((context: DoneContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
3000
3166
  /** Statically declared upper bound of possible target paths. */
3001
3167
  readonly targets?: ReadonlyArray<StateNodeIdentifier<States>>;
3002
- readonly transition: (context: DoneContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
3168
+ readonly transition: (context: DoneContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
3003
3169
  };
3004
3170
  readonly on?: {
3005
- readonly [EventTag in TagOf<Events[number]>]?: ((context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
3171
+ readonly [EventTag in TagOf<Events[number]>]?: ((context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>) | {
3006
3172
  readonly reenter?: boolean;
3007
3173
  /**
3008
3174
  * Upper bound of state or history paths this handler may target.
3009
- * Returning `void` is always permitted. Declaring a parent state also
3175
+ * Returning `target.none()` is always permitted. Declaring a parent state also
3010
3176
  * permits concrete descendant targets below it.
3011
3177
  */
3012
3178
  readonly targets?: ReadonlyArray<StateNodeIdentifier<States>>;
3013
- readonly transition: (context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
3179
+ readonly transition: (context: HandlerContext<States, Events, Emits, StateId, EventTag, E, R, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => HandlerResult<States, any, any>;
3014
3180
  };
3015
3181
  };
3016
- readonly initial?: StateInitialHandler<States, Events, Emits, StateId>;
3182
+ readonly initial?: StateInitialHandler<States, Events, Emits, StateId, InputEvents, ParentEvents>;
3017
3183
  } & ActiveOutputHandlerConfig<States, Events, StateId>;
3018
3184
  /** Values supplied when a statechart implicitly enters a state's initial children. */
3019
3185
  type StateInitialValue<States extends StateSchemas, StateId extends StateIdentifier<States>> = NodeByIdentifier<States, StateId> extends infer Node ? Node extends {
@@ -3026,14 +3192,14 @@ export declare namespace Machine {
3026
3192
  readonly initial: infer Initial;
3027
3193
  } ? Initial extends ActiveStateKey<Children> ? NodeSchema<Children[Initial]> extends never ? never : NodeValue<Children[Initial]> : never : never : never;
3028
3194
  /** Context passed to an implicit child-state initializer. */
3029
- type StateInitialContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = StateActionContext<States, Events, Emits, StateId>;
3195
+ type StateInitialContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>;
3030
3196
  /** Initial child value implementation for a compound or parallel state. */
3031
- type StateInitialHandler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = (context: StateInitialContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateInitialValue<States, StateId>;
3197
+ type StateInitialHandler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = (context: StateInitialContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateInitialValue<States, StateId>;
3032
3198
  /** Context used only when a history node has no previously captured record. */
3033
3199
  interface HistoryDefaultContext<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ParentId extends StateIdentifier<States>> {
3034
3200
  readonly event: LifecycleEvent<Events>;
3035
3201
  readonly target: HistoryDefaultTargetBuilder<States, ParentId>;
3036
- readonly parent: ParentId;
3202
+ readonly owner: ParentId;
3037
3203
  }
3038
3204
  /**
3039
3205
  * Typed fallback evaluated when a history node has no record yet.
@@ -3050,11 +3216,11 @@ export declare namespace Machine {
3050
3216
  };
3051
3217
  };
3052
3218
  /** Required implementation for a choice pseudo-state. */
3053
- interface ChoiceStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>> {
3219
+ interface ChoiceStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ChoiceId extends ChoiceIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> {
3054
3220
  readonly choice: {
3055
3221
  /** Statically inspectable upper bound of every possible target. */
3056
3222
  readonly targets: readonly [StateNodeIdentifier<States>, ...ReadonlyArray<StateNodeIdentifier<States>>];
3057
- readonly transition: (context: ChoiceContext<States, Events, Emits, ChoiceId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => ChoiceResult<States, any, any>;
3223
+ readonly transition: (context: ChoiceContext<States, Events, Emits, ChoiceId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => ChoiceResult<States, any, any>;
3058
3224
  };
3059
3225
  readonly entry?: never;
3060
3226
  readonly exit?: never;
@@ -3071,8 +3237,8 @@ export declare namespace Machine {
3071
3237
  * @category models
3072
3238
  * @since 0.4.0
3073
3239
  */
3074
- type FinalStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>> = {
3075
- readonly entry?: (context: StateActionContext<States, Events, Emits, StateId>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
3240
+ type FinalStateConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = {
3241
+ readonly entry?: (context: StateActionContext<States, Events, Emits, StateId, InputEvents, ParentEvents>, enqueue: Enqueue<EventOf<Events>, EmitOf<Emits>>) => StateActionResult<any, any>;
3076
3242
  readonly exit?: never;
3077
3243
  readonly always?: never;
3078
3244
  readonly onDone?: never;
@@ -3084,10 +3250,10 @@ export declare namespace Machine {
3084
3250
  * @category models
3085
3251
  * @since 0.4.0
3086
3252
  */
3087
- type HandlerConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R> = NodeByIdentifier<States, StateId> extends {
3253
+ type HandlerConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateIdentifier<States>, E, R, InputEvents extends ReadonlyArray<TaggedSchema> = Events, ParentEvents extends ReadonlyArray<TaggedSchema> = readonly []> = NodeByIdentifier<States, StateId> extends {
3088
3254
  readonly type: "final";
3089
- } ? FinalStateConfig<States, Events, Emits, StateId> : ActiveStateConfig<States, Events, Emits, StateId, E, R>;
3090
- type HandlerNodeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Path extends StateNodeIdentifier<States>, E, R> = Path extends ChoiceIdentifier<States> ? ChoiceStateConfig<States, Events, Emits, Path> : Path extends StateIdentifier<States> ? HandlerConfig<States, Events, Emits, Path, E, R> : never;
3255
+ } ? FinalStateConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> : ActiveStateConfig<States, Events, Emits, StateId, E, R, InputEvents, ParentEvents>;
3256
+ type HandlerNodeConfig<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Path extends StateNodeIdentifier<States>, E, R, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>> = Path extends ChoiceIdentifier<States> ? ChoiceStateConfig<States, Events, Emits, Path, InputEvents, ParentEvents> : Path extends StateIdentifier<States> ? HandlerConfig<States, Events, Emits, Path, E, R, InputEvents, ParentEvents> : never;
3091
3257
  type HandlerChildren<Node> = Node extends {
3092
3258
  readonly states: infer Children extends StateSchemas;
3093
3259
  } ? Children : never;
@@ -3102,12 +3268,12 @@ export declare namespace Machine {
3102
3268
  readonly states: infer Children extends StateSchemas;
3103
3269
  } ? HandlerNodeByPath<Children, Rest> : never : never : Path extends keyof States ? States[Path] : never;
3104
3270
  type HandlerConfigAtPath<Config, Path extends string> = Path extends `${infer Head}.${infer Rest}` ? Head extends keyof Config ? HandlerConfigAtPath<HandlerNodeChildrenConfig<Config[Head]>, Rest> : never : Path extends keyof Config ? Config[Path] : never;
3105
- type HandlerInvokeContextAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = StateId extends StateIdentifier<AllStates> ? NodeConfig extends {
3271
+ type HandlerInvokeContextAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Config, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = StateId extends StateIdentifier<AllStates> ? NodeConfig extends {
3106
3272
  readonly invoke: infer Invoke;
3107
3273
  } ? HandlerValidationAtPath<StateId, {
3108
- readonly invoke: ContextualInvokeDefinition<AllStates, Events, Emits, StateId, Invoke>;
3274
+ readonly invoke: ContextualInvokeDefinition<AllStates, Events, Emits, StateId, InputEvents, ParentEvents, Invoke>;
3109
3275
  }> : unknown : unknown;
3110
- type HandlerInvokeContexts<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config> = Types.UnionToIntersection<StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerInvokeContextAtPath<AllStates, Events, Emits, Config, StateId> : never : never>;
3276
+ type HandlerInvokeContexts<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Config> = Types.UnionToIntersection<StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerInvokeContextAtPath<AllStates, Events, InputEvents, Emits, ParentEvents, Config, StateId> : never : never>;
3111
3277
  type HandlerValidationAtPath<Path extends string, Validation> = Path extends `${infer Head}.${infer Rest}` ? {
3112
3278
  readonly [Key in Head]?: {
3113
3279
  readonly states: HandlerValidationAtPath<Rest, Validation>;
@@ -3115,21 +3281,21 @@ export declare namespace Machine {
3115
3281
  } : {
3116
3282
  readonly [Key in Path]?: Validation;
3117
3283
  };
3118
- type HandlerNode<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, StateId extends StateNodeIdentifier<AllStates>> = HandlerNodeConfig<AllStates, Events, Emits, StateId, E, R> & (StateId extends ChoiceIdentifier<AllStates> ? {
3284
+ type HandlerNode<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<AllStates>> = HandlerNodeConfig<AllStates, Events, Emits, StateId, E, R, InputEvents, ParentEvents> & (StateId extends ChoiceIdentifier<AllStates> ? {
3119
3285
  readonly states?: never;
3120
3286
  readonly history?: never;
3121
3287
  } : HandlerChildren<Node> extends infer Children extends StateSchemas ? [Children] extends [never] ? {
3122
3288
  readonly states?: never;
3123
3289
  readonly history?: never;
3124
3290
  } : {
3125
- readonly states?: HandlerTree<AllStates, Children, Events, Emits, E, R, Extract<StateId, StateIdentifier<AllStates>>>;
3291
+ readonly states?: HandlerTree<AllStates, Children, Events, Emits, E, R, InputEvents, ParentEvents, Extract<StateId, StateIdentifier<AllStates>>>;
3126
3292
  readonly history?: HistoryDefaultConfig<AllStates, Events, Emits, Extract<StateId, StateIdentifier<AllStates>>, Children>;
3127
3293
  } : {
3128
3294
  readonly states?: never;
3129
3295
  readonly history?: never;
3130
3296
  });
3131
- type HandlerTree<AllStates extends StateSchemas, States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, Prefix extends string> = {
3132
- readonly [Key in ActiveStateKey<States> | ChoiceStateKey<States>]?: HandlerNode<AllStates, States[Key], Events, Emits, E, R, HandlerNodeId<AllStates, JoinPath<Prefix, Key>>>;
3297
+ type HandlerTree<AllStates extends StateSchemas, States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, E, R, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Prefix extends string> = {
3298
+ readonly [Key in ActiveStateKey<States> | ChoiceStateKey<States>]?: HandlerNode<AllStates, States[Key], Events, Emits, E, R, InputEvents, ParentEvents, HandlerNodeId<AllStates, JoinPath<Prefix, Key>>>;
3133
3299
  };
3134
3300
  type HandlerNodeConfigKey = "always" | "choice" | "entry" | "exit" | "history" | "initial" | "invoke" | "on" | "onDone" | "output" | "states";
3135
3301
  type HandlerValidationError<Message extends string, Path extends string, Detail = unknown> = {
@@ -3210,7 +3376,7 @@ export declare namespace Machine {
3210
3376
  ] extends [never] ? unknown : {
3211
3377
  readonly output: HandlerValidationError<"Handler config is missing a region output implementation required by parallel output", StateId, Exclude<RequiredParallelOutputStates<AllStates, StateId>, AvailableOutputStates>>;
3212
3378
  } : unknown : unknown);
3213
- type HandlerNodeValidation<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<AllStates>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = StateId extends ChoiceIdentifier<AllStates> ? HandlerChoiceUnknownConfigKeyValidation<StateId, Config> & HandlerChoiceTargetValidation<StateId, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : StateId extends StateIdentifier<AllStates> ? HandlerUnknownConfigKeyValidation<StateId, Config> & HandlerOnKeyValidation<Events, StateId, Config> & HandlerOnTargetValidation<StateId, Config> & HandlerDirectTargetValidation<StateId, Config, "always"> & HandlerDirectTargetValidation<StateId, Config, "onDone"> & HandlerInvokeEmitsValidation<Events, StateId, Config> & HandlerChildrenValidation<Node, StateId, Config> & HandlerOutputRequirementValidation<AllStates, StateId, AvailableOutputStates, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : unknown;
3379
+ type HandlerNodeValidation<AllStates extends StateSchemas, Node, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends StateNodeIdentifier<AllStates>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = StateId extends ChoiceIdentifier<AllStates> ? HandlerChoiceUnknownConfigKeyValidation<StateId, Config> & HandlerChoiceTargetValidation<StateId, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : StateId extends StateIdentifier<AllStates> ? HandlerUnknownConfigKeyValidation<StateId, Config> & HandlerOnKeyValidation<Events, StateId, Config> & HandlerOnTargetValidation<StateId, Config> & HandlerDirectTargetValidation<StateId, Config, "always"> & HandlerDirectTargetValidation<StateId, Config, "onDone"> & HandlerInvokeParentEventsValidation<InputEvents, StateId, Config> & HandlerChildrenValidation<Node, StateId, Config> & HandlerOutputRequirementValidation<AllStates, StateId, AvailableOutputStates, Config> & HandlerRuntimeValidation<Events, Emits, StateId, Config> : unknown;
3214
3380
  type HandlerChoiceUnknownConfigKeyValidation<StateId extends string, Config, UnknownKeys extends string = Exclude<Extract<keyof Config, string>, "choice">> = [UnknownKeys] extends [never] ? unknown : {
3215
3381
  readonly [Key in UnknownKeys]: HandlerValidationError<"Choice handler config contains an invalid key", StateId, Key>;
3216
3382
  };
@@ -3219,13 +3385,13 @@ export declare namespace Machine {
3219
3385
  } ? [UndeclaredTransitionTarget<Choice>] extends [never] ? unknown : {
3220
3386
  readonly choice: HandlerValidationError<"Choice resolver returns a target not listed in targets", StateId, UndeclaredTransitionTarget<Choice>>;
3221
3387
  } : unknown;
3222
- type HandlerInvokeEmitsValidation<Events extends ReadonlyArray<TaggedSchema>, StateId extends string, Config> = [InvokeReturn<Config>] extends [never] ? unknown : [Exclude<InvokeEmits<InvokeReturn<Config>>, EventOf<Events>>] extends [never] ? unknown : {
3223
- readonly invoke: HandlerValidationError<"Invoked child emits events not accepted by the parent machine", StateId, Exclude<InvokeEmits<InvokeReturn<Config>>, EventOf<Events>>>;
3388
+ type HandlerInvokeParentEventsValidation<Events extends ReadonlyArray<TaggedSchema>, StateId extends string, Config> = [InvokeReturn<Config>] extends [never] ? unknown : [Exclude<InvokeParentEvents<InvokeReturn<Config>>, EventOf<Events>>] extends [never] ? unknown : {
3389
+ readonly invoke: HandlerValidationError<"Invoked child expects parent events not accepted by this machine", StateId, Exclude<InvokeParentEvents<InvokeReturn<Config>>, EventOf<Events>>>;
3224
3390
  };
3225
3391
  type HandlerRuntimeValidation<Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, StateId extends string, Config, Incompatible = IncompatibleRuntime<ConfigServices<HandlerConfigPart<Config>>, EventOf<Events>, EmitOf<Emits>>> = [Incompatible] extends [never] ? unknown : HandlerValidationError<"Handler config requires an incompatible machine runtime", StateId, Incompatible>;
3226
- type HandlerNodeValidationAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = [NodeConfig] extends [never] ? never : HandlerNodeValidation<AllStates, HandlerNodeByPath<AllStates, StateId>, Events, Emits, StateId, NodeConfig, AvailableOutputStates> extends infer Validation ? unknown extends Validation ? never : HandlerValidationAtPath<StateId, Validation> : never;
3227
- type HandlerTreeNodeValidations<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = Types.UnionToIntersection<StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeValidationAtPath<AllStates, Events, Emits, Config, AvailableOutputStates, StateId> : never : never>;
3228
- type HandlerTreeValidation<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = HandlerUnknownStateKeyValidation<AllStates, "", Config> & HandlerTreeNodeValidations<AllStates, Events, Emits, Config, AvailableOutputStates>;
3392
+ type HandlerNodeValidationAtPath<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>, StateId extends StateNodeIdentifier<AllStates>, NodeConfig = HandlerConfigAtPath<Config, StateId>> = [NodeConfig] extends [never] ? never : HandlerNodeValidation<AllStates, HandlerNodeByPath<AllStates, StateId>, Events, InputEvents, Emits, StateId, NodeConfig, AvailableOutputStates> extends infer Validation ? unknown extends Validation ? never : HandlerValidationAtPath<StateId, Validation> : never;
3393
+ type HandlerTreeNodeValidations<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = Types.UnionToIntersection<StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeValidationAtPath<AllStates, Events, InputEvents, Emits, Config, AvailableOutputStates, StateId> : never : never>;
3394
+ type HandlerTreeValidation<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, InputEvents extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Config, AvailableOutputStates extends StateIdentifier<AllStates>> = HandlerUnknownStateKeyValidation<AllStates, "", Config> & HandlerTreeNodeValidations<AllStates, Events, InputEvents, Emits, Config, AvailableOutputStates>;
3229
3395
  type HandlerHasRequiredInitial<AllStates extends StateSchemas, StateId extends StateIdentifier<AllStates>, Config> = StateId extends RequiredHistoryInitializers<AllStates> ? "initial" extends keyof Config ? true : false : true;
3230
3396
  type HandlerHasRequiredHistoryDefaults<Node, Config> = Node extends {
3231
3397
  readonly states: infer Children extends StateSchemas;
@@ -3250,15 +3416,15 @@ export declare namespace Machine {
3250
3416
  readonly outputState: StateId extends StateIdentifier<AllStates> ? HandlerOutputStates<AllStates, StateId, HandlerConfigPart<NodeConfig>> : never;
3251
3417
  };
3252
3418
  type HandlerTreeEvidence<AllStates extends StateSchemas, Config> = StateNodeIdentifier<AllStates> extends infer StateId extends StateNodeIdentifier<AllStates> ? StateId extends StateNodeIdentifier<AllStates> ? HandlerNodeEvidence<AllStates, Config, StateId> : never : never;
3253
- type HandleTreeResult<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<AllStates>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<AllStates>, Output, OutputStates extends StateIdentifier<AllStates>, InputEvents extends ReadonlyArray<TaggedSchema>, Config> = Machine<AllStates, Events, Input, Exclude<UnhandledStates, HandlerTreeEvidence<AllStates, Config>["stateId"]>, E | HandlerTreeEvidence<AllStates, Config>["error"], ExcludeCompatibleRuntime<R | HandlerTreeEvidence<AllStates, Config>["services"], EventOf<Events>, EmitOf<Emits>>, InitialE, InitialR, FinalStates, Output, Emits, OutputStates | Extract<HandlerTreeEvidence<AllStates, Config>["outputState"], StateIdentifier<AllStates>>, InputEvents>;
3419
+ type HandleTreeResult<AllStates extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<AllStates>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<AllStates>, Output, OutputStates extends StateIdentifier<AllStates>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>, Config> = Machine<AllStates, Events, Input, Exclude<UnhandledStates, HandlerTreeEvidence<AllStates, Config>["stateId"]>, E | HandlerTreeEvidence<AllStates, Config>["error"], ExcludeCompatibleRuntime<R | HandlerTreeEvidence<AllStates, Config>["services"], EventOf<Events>, EmitOf<Emits>>, InitialE, InitialR, FinalStates, Output, Emits, OutputStates | Extract<HandlerTreeEvidence<AllStates, Config>["outputState"], StateIdentifier<AllStates>>, InputEvents, ParentEvents>;
3254
3420
  /**
3255
3421
  * Adds state handlers from a root state object.
3256
3422
  *
3257
3423
  * @category combinators
3258
3424
  * @since 0.4.0
3259
3425
  */
3260
- interface Handler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>> {
3261
- <const Config extends HandlerTree<States, States, Events, Emits, E, R, "">>(config: Config & HandlerInvokeContexts<States, Events, Emits, NoInfer<Config>> & HandlerTreeValidation<States, Events, Emits, NoInfer<Config>, OutputStates | Extract<HandlerTreeEvidence<States, NoInfer<Config>>["outputState"], StateIdentifier<States>>>): HandleTreeResult<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, Config>;
3426
+ interface Handler<States extends StateSchemas, Events extends ReadonlyArray<TaggedSchema>, Emits extends ReadonlyArray<TaggedSchema>, Input extends Schema.Top, UnhandledStates extends StateIdentifier<States>, E, R, InitialE, InitialR, FinalStates extends StateIdentifier<States>, Output, OutputStates extends StateIdentifier<States>, InputEvents extends ReadonlyArray<TaggedSchema>, ParentEvents extends ReadonlyArray<TaggedSchema>> {
3427
+ <const Config extends HandlerTree<States, States, Events, Emits, E, R, InputEvents, ParentEvents, "">>(config: Config & HandlerInvokeContexts<States, Events, InputEvents, Emits, ParentEvents, NoInfer<Config>> & HandlerTreeValidation<States, Events, InputEvents, Emits, NoInfer<Config>, OutputStates | Extract<HandlerTreeEvidence<States, NoInfer<Config>>["outputState"], StateIdentifier<States>>>): HandleTreeResult<States, Events, Emits, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, OutputStates, InputEvents, ParentEvents, Config>;
3262
3428
  }
3263
3429
  /**
3264
3430
  * Any state config.
@@ -3321,7 +3487,7 @@ export declare const isMachine: (u: unknown) => u is Machine.Any;
3321
3487
  * @category guards
3322
3488
  * @since 0.4.0
3323
3489
  */
3324
- export declare const isFinal: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, state: Machine.Snapshot<States>) => state is Machine.SnapshotContainingFinal<States, FinalStates>;
3490
+ export declare const isFinal: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>, state: Machine.Snapshot<States>) => state is Machine.SnapshotContainingFinal<States, FinalStates>;
3325
3491
  /**
3326
3492
  * Defines a state tree while preserving literal state paths.
3327
3493
  *
@@ -3350,7 +3516,7 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
3350
3516
  *
3351
3517
  * Machine.make({
3352
3518
  * states: States.states,
3353
- * events: [],
3519
+ * events: Machine.events(),
3354
3520
  * initial: () => States.initial.idle.from()
3355
3521
  * })
3356
3522
  * ```
@@ -3359,19 +3525,20 @@ export declare const isFinal: <const States extends Machine.StateSchemas, const
3359
3525
  * @since 0.4.0
3360
3526
  */
3361
3527
  export declare const defineStates: DefineStates;
3362
- type MakeConfig<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>> = {
3528
+ type MakeConfig<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> = {
3363
3529
  readonly id?: string;
3364
3530
  readonly states: States & DefineStateTreeInput<NoInfer<States>>;
3365
- readonly events: InputEvents & ValidateInputEventProtocol<NoInfer<InputEvents>>;
3366
- readonly internalEvents?: InternalEvents & ValidateInternalEventProtocol<NoInfer<InputEvents>, NoInfer<InternalEvents>>;
3367
- readonly emits?: Emits;
3531
+ readonly events: Machine.EventProtocol<"public", InputEvents> & ValidateInputEventProtocol<NoInfer<InputEvents>>;
3532
+ readonly internalEvents?: Machine.EventProtocol<"internal", InternalEvents> & ValidateInternalEventProtocol<NoInfer<InputEvents>, NoInfer<InternalEvents>>;
3533
+ readonly emittedEvents?: Machine.EventProtocol<"emitted", Emits>;
3534
+ readonly parentEvents?: Machine.EventProtocol<"public", ParentEvents>;
3368
3535
  readonly input?: Input;
3369
3536
  readonly initial: (...args: [...Machine.InputArgs<Input>]) => Machine.InitialResult<States, InitialE, InitialR>;
3370
3537
  };
3371
- type MakeResult<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>> = Machine<States, readonly [...InputEvents, ...InternalEvents], Input, Machine.StateIdentifier<States>, never, never, InitialE, InitialR, Machine.FinalStateFromDefinition<States>, Machine.TerminalOutput<States>, Emits, never, InputEvents>;
3538
+ type MakeResult<States extends Machine.StateSchemas, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, Input extends Schema.Top, InitialE, InitialR, InternalEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> = Machine<States, readonly [...InputEvents, ...InternalEvents], Input, Machine.StateIdentifier<States>, never, never, InitialE, InitialR, Machine.FinalStateFromDefinition<States>, Machine.TerminalOutput<States>, Emits, never, InputEvents, ParentEvents>;
3372
3539
  interface Make {
3373
- <const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents>, ..._validation: ValidateDefinedStates<NoInfer<States>>): MakeResult<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents>;
3374
- <const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents>, "states"> & {
3540
+ <const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>, ..._validation: ValidateDefinedStates<NoInfer<States>>): MakeResult<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>;
3541
+ <const States extends Machine.StateSchemas, const InputEvents extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, InitialE = never, InitialR = never, const InternalEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(config: Omit<MakeConfig<States, InputEvents, Emits, Input, InitialE, InitialR, InternalEvents, ParentEvents>, "states"> & {
3375
3542
  readonly states: InvalidDefinedStateTreeInput<States>;
3376
3543
  }): never;
3377
3544
  }
@@ -3386,10 +3553,13 @@ interface Make {
3386
3553
  * `defineStates` or is passed inline. Call `handle` on the returned definition
3387
3554
  * to implement state behavior with ordinary TypeScript control flow.
3388
3555
  *
3389
- * Schemas in `events` define the public input protocol. Schemas in
3390
- * `internalEvents` are added to the complete handler protocol for raised
3391
- * events, child emissions, and other machine-local deliveries. Their tags
3392
- * must be disjoint.
3556
+ * `Machine.events` defines the public input protocol. `Machine.internalEvents`
3557
+ * adds raised events and other machine-local deliveries.
3558
+ * `Machine.emittedEvents` defines outward ephemeral notifications, while
3559
+ * `parentEvents` declares the inputs a child may explicitly send to its owning
3560
+ * actor. All descriptors expose deferred constructors while retaining their
3561
+ * schemas opaquely for runtime validation. Public and internal tags must be
3562
+ * disjoint.
3393
3563
  *
3394
3564
  * **Example** (Typed counter machine)
3395
3565
  *
@@ -3406,10 +3576,11 @@ interface Make {
3406
3576
  * }) {}
3407
3577
  *
3408
3578
  * const States = Machine.defineStates({ Count })
3579
+ * const Events = Machine.events(Increment)
3409
3580
  *
3410
3581
  * const counter = Machine.make({
3411
3582
  * states: States.states,
3412
- * events: [Increment],
3583
+ * events: Events,
3413
3584
  * initial: () => States.initial.Count(new Count({ value: 0 }))
3414
3585
  * }).handle({
3415
3586
  * Count: {
@@ -3426,54 +3597,16 @@ interface Make {
3426
3597
  * @since 0.4.0
3427
3598
  */
3428
3599
  export declare const make: Make;
3429
- type EventConstructorArgs<EventSchema extends Machine.TaggedSchema> = {} extends EventSchema["~type.make.in"] ? [
3430
- input?: EventSchema["~type.make.in"]
3431
- ] : [input: EventSchema["~type.make.in"]];
3432
3600
  /**
3433
- * Constructs an event from a schema owned by a machine's protocol.
3434
- *
3435
- * **Details**
3436
- *
3437
- * The schema constructor runs exactly once. The resulting decoded event is
3438
- * trusted by this machine and definitions derived from it with `handle`, so
3439
- * repeated delivery does not decode the same already-constructed value again.
3440
- * Events supplied through ordinary `send` and `plan` calls remain untrusted
3441
- * and continue through full runtime schema validation.
3442
- * Treat the returned event as immutable after construction.
3443
- * This eager low-level constructor throws `MachineSchemaDecodeError` when
3444
- * construction fails. Prefer {@link events} and {@link internalEvents} for
3445
- * ordinary delivery so construction remains inside the machine error channel.
3446
- *
3447
- * The schema must be one of the machine's configured public or internal event
3448
- * schemas, or a case schema belonging to a configured `Schema.TaggedUnion`.
3601
+ * Extracts the decoded event union carried by an event protocol descriptor.
3449
3602
  *
3450
- * **Example**
3451
- *
3452
- * ```ts
3453
- * import { Schema } from "effect"
3454
- * import { Machine } from "@typeonce/effect-machine"
3455
- *
3456
- * class Idle extends Schema.TaggedClass<Idle>("Idle")("Idle", {}) {}
3457
- * class Increment extends Schema.TaggedClass<Increment>("Increment")("Increment", {
3458
- * by: Schema.Number
3459
- * }) {}
3460
- *
3461
- * const States = Machine.defineStates({ Idle })
3462
- * const counter = Machine.make({
3463
- * states: States.states,
3464
- * events: [Increment],
3465
- * initial: () => States.initial.Idle.from()
3466
- * }).handle({ Idle: { on: { Increment: () => States.initial.Idle.from() } } })
3467
- *
3468
- * const increment = Machine.event(counter, Increment, { by: 1 })
3469
- * ```
3470
- *
3471
- * @category constructors
3472
- * @since 0.4.0
3603
+ * @category utility types
3604
+ * @since 0.10.0
3473
3605
  */
3474
- export declare const event: <const M extends Machine.Any, const EventSchema extends Machine.TaggedSchema>(machine: M, schema: EventSchema & ([EventSchema["Type"]] extends [Machine.Event<M>] ? unknown : never), ...args: EventConstructorArgs<EventSchema>) => EventSchema["Type"];
3606
+ export type EventOf<Protocol extends Machine.EventProtocol.Any> = Machine.EventOf<Machine.EventProtocolSchemas<Protocol>>;
3475
3607
  /**
3476
- * Returns deferred constructors for every public event in a machine protocol.
3608
+ * Defines a public event protocol and returns deferred constructors for every
3609
+ * statically finite configured event tag.
3477
3610
  *
3478
3611
  * Constructor inputs retain their schema-derived required fields, defaults,
3479
3612
  * and transformations. Construction is deferred until delivery so failures
@@ -3483,26 +3616,56 @@ export declare const event: <const M extends Machine.Any, const EventSchema exte
3483
3616
  * **Example**
3484
3617
  *
3485
3618
  * ```ts
3486
- * const Event = Machine.events(counter)
3487
- * yield* ref.send(Event.Increment({ by: 1 }))
3619
+ * const Events = Machine.events(Increment, Reset)
3620
+ * const machine = Machine.make({ events: Events, ... })
3621
+ * yield* ref.send(Events.Increment({ by: 1 }))
3488
3622
  * ```
3489
3623
  *
3490
3624
  * @category constructors
3491
- * @since 0.9.0
3625
+ * @since 0.10.0
3492
3626
  */
3493
- export declare const events: <const M extends Machine.Any>(machine: M) => Machine.EventConstructors<Machine.InputEvents<M>>;
3627
+ export declare const events: {
3628
+ <const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateInputEventProtocol<NoInfer<Schemas>>): Machine.EventProtocol<"public", readonly [...Schemas]>;
3629
+ <const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"public">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"public", Inputs>): Machine.EventProtocol<"public", Machine.EventProtocolInputSchemasOf<"public", Inputs>>;
3630
+ };
3494
3631
  /**
3495
- * Returns deferred constructors for every internal event in a machine
3496
- * protocol.
3632
+ * Defines an internal event protocol and returns deferred constructors for
3633
+ * every statically finite configured event tag.
3497
3634
  *
3498
3635
  * Use these constructors for raised events and other machine-local deliveries.
3499
3636
  * Construction failures are reported through the
3500
3637
  * owning machine's `MachineSchemaDecodeError` channel.
3501
3638
  *
3639
+ * **Example**
3640
+ *
3641
+ * ```ts
3642
+ * const InternalEvents = Machine.internalEvents(Loaded, Failed)
3643
+ * const machine = Machine.make({ internalEvents: InternalEvents, ... })
3644
+ *
3645
+ * // Inside a transition callback:
3646
+ * enqueue.raise(InternalEvents.Loaded({ value }))
3647
+ * ```
3648
+ *
3502
3649
  * @category constructors
3503
- * @since 0.9.0
3650
+ * @since 0.10.0
3504
3651
  */
3505
- export declare const internalEvents: <const M extends Machine.Any>(machine: M) => Machine.EventConstructors<Machine.InternalEvents<M>>;
3652
+ export declare const internalEvents: {
3653
+ <const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateInternalEventProtocol<readonly [], NoInfer<Schemas>>): Machine.EventProtocol<"internal", readonly [...Schemas]>;
3654
+ <const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"internal">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"internal", Inputs>): Machine.EventProtocol<"internal", Machine.EventProtocolInputSchemasOf<"internal", Inputs>>;
3655
+ };
3656
+ /**
3657
+ * Defines the ephemeral notifications a machine may publish to external
3658
+ * observers. Emitted events are separate from actor input and are never sent
3659
+ * implicitly to a parent actor. Observe them through `MachineRef.emissions` or
3660
+ * the AtomMachine emission stream adapters.
3661
+ *
3662
+ * @category constructors
3663
+ * @since 0.10.0
3664
+ */
3665
+ export declare const emittedEvents: {
3666
+ <const Schemas extends ReadonlyArray<Machine.TaggedSchema>>(...schemas: Schemas & ValidateEmittedEventProtocol<NoInfer<Schemas>>): Machine.EventProtocol<"emitted", readonly [...Schemas]>;
3667
+ <const Inputs extends ReadonlyArray<Machine.EventProtocolInput<"emitted">>>(...inputs: Inputs & ValidateEventProtocolBuilder<"emitted", Inputs>): Machine.EventProtocol<"emitted", Machine.EventProtocolInputSchemasOf<"emitted", Inputs>>;
3668
+ };
3506
3669
  /**
3507
3670
  * Encodes a decoded machine snapshot into a normalized data representation.
3508
3671
  *
@@ -3536,7 +3699,7 @@ export declare const internalEvents: <const M extends Machine.Any>(machine: M) =
3536
3699
  * const States = Machine.defineStates({ Idle })
3537
3700
  * const machine = Machine.make({
3538
3701
  * states: States.states,
3539
- * events: [],
3702
+ * events: Machine.events(),
3540
3703
  * initial: () => States.initial.Idle.from()
3541
3704
  * }).handle({ Idle: {} })
3542
3705
  *
@@ -3550,7 +3713,7 @@ export declare const internalEvents: <const M extends Machine.Any>(machine: M) =
3550
3713
  * @category encoding
3551
3714
  * @since 0.4.0
3552
3715
  */
3553
- export declare const encodeSnapshot: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, snapshot: Machine.Snapshot<States>) => Effect.Effect<Machine.EncodedSnapshot, MachineSchemaEncodeError, Machine.SnapshotEncodingServices<States>>;
3716
+ export declare const encodeSnapshot: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>, snapshot: Machine.Snapshot<States>) => Effect.Effect<Machine.EncodedSnapshot, MachineSchemaEncodeError, Machine.SnapshotEncodingServices<States>>;
3554
3717
  /**
3555
3718
  * Decodes a normalized data representation into a validated machine snapshot.
3556
3719
  *
@@ -3580,7 +3743,7 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
3580
3743
  * const States = Machine.defineStates({ Idle })
3581
3744
  * const machine = Machine.make({
3582
3745
  * states: States.states,
3583
- * events: [],
3746
+ * events: Machine.events(),
3584
3747
  * initial: () => States.initial.Idle.from()
3585
3748
  * }).handle({ Idle: {} })
3586
3749
  *
@@ -3595,8 +3758,8 @@ export declare const encodeSnapshot: <const States extends Machine.StateSchemas,
3595
3758
  * @category decoding
3596
3759
  * @since 0.4.0
3597
3760
  */
3598
- export declare const decodeSnapshot: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, encoded: unknown) => Effect.Effect<Machine.Snapshot<States>, MachineSchemaDecodeError, Machine.SnapshotDecodingServices<States>>;
3599
- type DynamicEffectInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId>) => Effect.Effect<unknown, unknown, unknown>> = {
3761
+ export declare const decodeSnapshot: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>, encoded: unknown) => Effect.Effect<Machine.Snapshot<States>, MachineSchemaDecodeError, Machine.SnapshotDecodingServices<States>>;
3762
+ type DynamicEffectInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>) => Effect.Effect<unknown, unknown, unknown>> = {
3600
3763
  readonly id: InvokeLifecycleId;
3601
3764
  readonly effect: Source;
3602
3765
  readonly after?: never;
@@ -3605,10 +3768,60 @@ type DynamicEffectInvokeSource<States extends Machine.StateSchemas, Events exten
3605
3768
  readonly address?: never;
3606
3769
  readonly onSnapshot?: never;
3607
3770
  };
3608
- type DynamicEffectDoneHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, Machine.InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<ReturnType<NoInfer<Source>>>>>;
3609
- type DynamicEffectFailureHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, Machine.InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<ReturnType<NoInfer<Source>>>>>;
3610
- type DynamicEffectInvokeResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeConfig<States, Events, Emits, StateId> & Machine.InvokeTyped<Effect.Success<ReturnType<Source>>, Effect.Error<ReturnType<Source>>, Effect.Services<ReturnType<Source>>, never>;
3771
+ type DynamicEffectDoneHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, Machine.InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<ReturnType<NoInfer<Source>>>, readonly [], readonly []>>;
3772
+ type DynamicEffectFailureHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, Machine.InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<ReturnType<NoInfer<Source>>>, readonly [], readonly []>>;
3773
+ type DynamicEffectInvokeResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeConfig<States, Events, Emits, StateId, readonly [], readonly []> & Machine.InvokeTyped<Effect.Success<ReturnType<Source>>, Effect.Error<ReturnType<Source>>, Effect.Services<ReturnType<Source>>, never>;
3611
3774
  type InvokeChannelIsNever<Value> = IsAny<Value> extends true ? false : [Value] extends [never] ? true : false;
3775
+ type BoundDynamicEffectInvokeSource<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, unknown, unknown>> = {
3776
+ readonly id: InvokeLifecycleId;
3777
+ readonly effect: Source;
3778
+ readonly after?: never;
3779
+ readonly logic?: never;
3780
+ readonly child?: never;
3781
+ readonly address?: never;
3782
+ readonly onSnapshot?: never;
3783
+ };
3784
+ type BoundDynamicEffectDoneHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, Machine.InvokeDoneContext<States, Events, Emits, StateId, Effect.Success<ReturnType<NoInfer<Source>>>, InputEvents, ParentEvents>>;
3785
+ type BoundDynamicEffectFailureHandler<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeTransition<States, Events, Emits, Machine.InvokeFailureContext<States, Events, Emits, StateId, Effect.Error<ReturnType<NoInfer<Source>>>, InputEvents, ParentEvents>>;
3786
+ type BoundDynamicEffectInvokeResult<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, Source extends (...args: ReadonlyArray<never>) => Effect.Effect<unknown, unknown, unknown>> = Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<Effect.Success<ReturnType<Source>>, Effect.Error<ReturnType<Source>>, Effect.Services<ReturnType<Source>>, never>;
3787
+ /**
3788
+ * Machine-bound invocation constructor that preserves the owning machine's
3789
+ * public input and parent protocols in every invocation callback.
3790
+ *
3791
+ * @category constructors
3792
+ * @since 0.11.0
3793
+ */
3794
+ export interface Invoker<States extends Machine.StateSchemas, Events extends ReadonlyArray<Machine.TaggedSchema>, Emits extends ReadonlyArray<Machine.TaggedSchema>, InputEvents extends ReadonlyArray<Machine.TaggedSchema>, ParentEvents extends ReadonlyArray<Machine.TaggedSchema>> {
3795
+ <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, unknown, unknown>>(config: BoundDynamicEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
3796
+ readonly onDone: BoundDynamicEffectDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
3797
+ readonly onFailure: BoundDynamicEffectFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
3798
+ }, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
3799
+ "onDone must be omitted when the Effect output is never"
3800
+ ] : InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
3801
+ "onFailure must be omitted when the Effect error is never"
3802
+ ] : []): BoundDynamicEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
3803
+ <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<unknown, never, unknown>>(config: BoundDynamicEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
3804
+ readonly onDone: BoundDynamicEffectDoneHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
3805
+ readonly onFailure?: never;
3806
+ }, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
3807
+ "onDone must be omitted when the Effect output is never"
3808
+ ] : []): BoundDynamicEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
3809
+ <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<never, unknown, unknown>>(config: BoundDynamicEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
3810
+ readonly onDone?: never;
3811
+ readonly onFailure: BoundDynamicEffectFailureHandler<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
3812
+ }, ..._validation: InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
3813
+ "onFailure must be omitted when the Effect error is never"
3814
+ ] : []): BoundDynamicEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
3815
+ <StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Effect.Effect<never, never, unknown>>(config: BoundDynamicEffectInvokeSource<States, Events, Emits, InputEvents, ParentEvents, StateId, Source> & {
3816
+ readonly onDone?: never;
3817
+ readonly onFailure?: never;
3818
+ }): BoundDynamicEffectInvokeResult<States, Events, Emits, InputEvents, ParentEvents, StateId, Source>;
3819
+ <StateId extends Machine.StateIdentifier<States>, const Fx extends Effect.Effect<any, any, any>, const Config extends object>(config: Config & Machine.EffectInvokeArgs<States, Events, Emits, StateId, Fx, Fx, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<Effect.Success<Fx>, Effect.Error<Fx>, Effect.Services<Fx>, never>;
3820
+ <StateId extends Machine.StateIdentifier<States>, const Config extends object>(config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>;
3821
+ <StateId extends Machine.StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>>(config: Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, (context: Machine.InvokeContext<States, Events, Emits, StateId, InputEvents, ParentEvents>) => Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, InputEvents, ParentEvents>): Machine.InvokeConfig<States, Events, Emits, StateId, InputEvents, ParentEvents> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
3822
+ <StateId extends Machine.StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>, const Config extends object>(config: Config & Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
3823
+ <StateId extends Machine.StateIdentifier<States>, const Child extends ChildMachine.Any, const Config extends object>(config: Config & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child, InputEvents, ParentEvents>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<Machine.Output<Child["machine"]>, Machine.Error<Child["machine"]> | ActionError<Machine.Services<Child["machine"]>>, Machine.Services<Child["machine"]>, Machine.InitialError<Child["machine"]>, Machine.Emit<Child["machine"]>, Machine.EventOf<Machine.ParentEvents<Child["machine"]>>>;
3824
+ }
3612
3825
  /**
3613
3826
  * Preserves inference for a state-owned invocation configuration.
3614
3827
  *
@@ -3625,6 +3838,12 @@ type InvokeChannelIsNever<Value> = IsAny<Value> extends true ? false : [Value] e
3625
3838
  * lifecycle `id` and a typed communication `address`. Child descriptors already
3626
3839
  * own their identity, so `id` and `address` must not be repeated.
3627
3840
  *
3841
+ * Owner references are intentionally non-sendable here because this standalone
3842
+ * constructor does not know the owning definition. When a callback sends to
3843
+ * `self` or `parent`, use the bound constructor on the owning definition
3844
+ * (`definition.invoke(...)`) so the exact public input and `parentEvents`
3845
+ * protocols are available.
3846
+ *
3628
3847
  * ```ts
3629
3848
  * invoke: Machine.invoke({
3630
3849
  * id: "load",
@@ -3641,7 +3860,7 @@ type InvokeChannelIsNever<Value> = IsAny<Value> extends true ? false : [Value] e
3641
3860
  * @since 0.9.0
3642
3861
  */
3643
3862
  export declare const invoke: {
3644
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId>) => Effect.Effect<unknown, unknown, unknown>>(config: DynamicEffectInvokeSource<States, Events, Emits, StateId, Source> & {
3863
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>) => Effect.Effect<unknown, unknown, unknown>>(config: DynamicEffectInvokeSource<States, Events, Emits, StateId, Source> & {
3645
3864
  readonly onDone: DynamicEffectDoneHandler<States, Events, Emits, StateId, Source>;
3646
3865
  readonly onFailure: DynamicEffectFailureHandler<States, Events, Emits, StateId, Source>;
3647
3866
  }, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
@@ -3649,62 +3868,28 @@ export declare const invoke: {
3649
3868
  ] : InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
3650
3869
  "onFailure must be omitted when the Effect error is never"
3651
3870
  ] : []): DynamicEffectInvokeResult<States, Events, Emits, StateId, Source>;
3652
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId>) => Effect.Effect<unknown, never, unknown>>(config: DynamicEffectInvokeSource<States, Events, Emits, StateId, Source> & {
3871
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>) => Effect.Effect<unknown, never, unknown>>(config: DynamicEffectInvokeSource<States, Events, Emits, StateId, Source> & {
3653
3872
  readonly onDone: DynamicEffectDoneHandler<States, Events, Emits, StateId, Source>;
3654
3873
  readonly onFailure?: never;
3655
3874
  }, ..._validation: InvokeChannelIsNever<Effect.Success<ReturnType<Source>>> extends true ? [
3656
3875
  "onDone must be omitted when the Effect output is never"
3657
3876
  ] : []): DynamicEffectInvokeResult<States, Events, Emits, StateId, Source>;
3658
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId>) => Effect.Effect<never, unknown, unknown>>(config: DynamicEffectInvokeSource<States, Events, Emits, StateId, Source> & {
3877
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>) => Effect.Effect<never, unknown, unknown>>(config: DynamicEffectInvokeSource<States, Events, Emits, StateId, Source> & {
3659
3878
  readonly onDone?: never;
3660
3879
  readonly onFailure: DynamicEffectFailureHandler<States, Events, Emits, StateId, Source>;
3661
3880
  }, ..._validation: InvokeChannelIsNever<Effect.Error<ReturnType<Source>>> extends true ? [
3662
3881
  "onFailure must be omitted when the Effect error is never"
3663
3882
  ] : []): DynamicEffectInvokeResult<States, Events, Emits, StateId, Source>;
3664
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId>) => Effect.Effect<never, never, unknown>>(config: DynamicEffectInvokeSource<States, Events, Emits, StateId, Source> & {
3883
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Source extends (context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>) => Effect.Effect<never, never, unknown>>(config: DynamicEffectInvokeSource<States, Events, Emits, StateId, Source> & {
3665
3884
  readonly onDone?: never;
3666
3885
  readonly onFailure?: never;
3667
3886
  }): DynamicEffectInvokeResult<States, Events, Emits, StateId, Source>;
3668
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Fx extends Effect.Effect<any, any, any>, const Config extends object>(config: Config & Machine.EffectInvokeArgs<States, Events, Emits, StateId, Fx>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<Effect.Success<Fx>, Effect.Error<Fx>, Effect.Services<Fx>, never>;
3669
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Config extends object>(config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>;
3670
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>>(config: Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, (context: Machine.InvokeContext<States, Events, Emits, StateId>) => Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>>): Machine.InvokeConfig<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
3671
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>, const Config extends object>(config: Config & Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
3672
- <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Child extends ChildMachine.Any, const Config extends object>(config: Config & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<Machine.Output<Child["machine"]>, Machine.Error<Child["machine"]> | ActionError<Machine.Services<Child["machine"]>>, Machine.Services<Child["machine"]>, Machine.InitialError<Child["machine"]>, Machine.Emit<Child["machine"]>>;
3673
- };
3674
- type RetagFields<Target extends Machine.TaggedSchema> = Omit<Target["~type.make.in"], "_tag">;
3675
- type RetagTargetCompatibility<Target extends Machine.TaggedSchema> = Target extends {
3676
- readonly fields: Schema.Struct.Fields;
3677
- } ? "_tag" extends keyof Target["~type.make.in"] ? {} extends Pick<Target["~type.make.in"], "_tag"> ? unknown : {
3678
- readonly "~effect/Machine/RetagTargetError": "Target schema must supply its discriminator when make is called";
3679
- } : unknown : {
3680
- readonly "~effect/Machine/RetagTargetError": "Target schema must be one tagged struct or tagged class";
3887
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Fx extends Effect.Effect<any, any, any>, const Config extends object>(config: Config & Machine.EffectInvokeArgs<States, Events, Emits, StateId, Fx, Fx, readonly [], readonly []>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<Effect.Success<Fx>, Effect.Error<Fx>, Effect.Services<Fx>, never>;
3888
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Config extends object>(config: Config & Machine.TimerInvokeArgs<States, Events, Emits, StateId, readonly [], readonly []>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<void, never, never, never>;
3889
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>>(config: Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, (context: Machine.InvokeContext<States, Events, Emits, StateId, readonly [], readonly []>) => Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, readonly [], readonly []>): Machine.InvokeConfig<States, Events, Emits, StateId, readonly [], readonly []> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
3890
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address extends ChildAddress<never>, const Config extends object>(config: Config & Machine.LogicInvokeArgs<States, Events, Emits, StateId, ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError, Address, Logic<ChildState, ChildEvent, ChildError, ChildRequirements, ChildOutput, ChildInitialError>, readonly [], readonly []>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<ChildOutput, ChildError, ChildRequirements, ChildInitialError>;
3891
+ <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, StateId extends Machine.StateIdentifier<States>, const Child extends ChildMachine.Any, const Config extends object>(config: Config & Machine.ChildInvokeArgs<States, Events, Emits, StateId, Child["machine"], Child, readonly [], readonly []>): Config & Machine.InvokeOwned<States, Events, Emits, StateId> & Machine.InvokeTyped<Machine.Output<Child["machine"]>, Machine.Error<Child["machine"]> | ActionError<Machine.Services<Child["machine"]>>, Machine.Services<Child["machine"]>, Machine.InitialError<Child["machine"]>, Machine.Emit<Child["machine"]>, Machine.EventOf<Machine.ParentEvents<Child["machine"]>>>;
3681
3892
  };
3682
- type RequiredKeys<A> = {
3683
- readonly [Key in keyof A]-?: {} extends Pick<A, Key> ? never : Key;
3684
- }[keyof A];
3685
- type CompatibleSourceKeys<Fields, Source> = {
3686
- readonly [Key in Extract<keyof Fields, keyof Source>]: Source[Key] extends Fields[Key] ? Key : never;
3687
- }[Extract<keyof Fields, keyof Source>];
3688
- type RetagPatch<Target extends Machine.TaggedSchema, Source> = Partial<RetagFields<Target>> & Pick<RetagFields<Target>, Exclude<RequiredKeys<RetagFields<Target>>, CompatibleSourceKeys<RetagFields<Target>, Source>>>;
3689
- type RetagArgs<Target extends Machine.TaggedSchema, Source> = [
3690
- Exclude<RequiredKeys<RetagFields<Target>>, CompatibleSourceKeys<RetagFields<Target>, Source>>
3691
- ] extends [never] ? [patch?: RetagPatch<Target, Source>] : [patch: RetagPatch<Target, Source>];
3692
- /**
3693
- * Constructs another tagged case from compatible source fields.
3694
- *
3695
- * The target must be one tagged struct or tagged class whose discriminator is
3696
- * supplied by its constructor. Union wrappers are rejected because their
3697
- * `make` operation cannot select a member after the source discriminator has
3698
- * been discarded. Missing or incompatible required target fields must be
3699
- * supplied by the patch, and the target schema's normal `make` validation
3700
- * remains authoritative at runtime.
3701
- *
3702
- * @category constructors
3703
- * @since 0.4.0
3704
- */
3705
- export declare const retag: <const Target extends Machine.TaggedSchema, const Source extends {
3706
- readonly _tag: PropertyKey;
3707
- }>(target: Target & RetagTargetCompatibility<Target>, source: Source, ...args: RetagArgs<Target, Source>) => Target["Type"];
3708
3893
  /**
3709
3894
  * Plans the initial state for a machine without executing actor commands.
3710
3895
  *
@@ -3733,7 +3918,7 @@ export declare const retag: <const Target extends Machine.TaggedSchema, const So
3733
3918
  * const States = Machine.defineStates({ Idle })
3734
3919
  * const machine = Machine.make({
3735
3920
  * states: States.states,
3736
- * events: [],
3921
+ * events: Machine.events(),
3737
3922
  * initial: () => States.initial.Idle.from()
3738
3923
  * }).handle({ Idle: {} })
3739
3924
  *
@@ -3745,7 +3930,7 @@ export declare const retag: <const Target extends Machine.TaggedSchema, const So
3745
3930
  * @category constructors
3746
3931
  * @since 0.4.0
3747
3932
  */
3748
- export declare const planInitial: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<{
3933
+ export declare const planInitial: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<{
3749
3934
  readonly startingState: Machine.Snapshot<States>;
3750
3935
  readonly initialEntryPaths: ReadonlyArray<Machine.StateIdentifier<States>>;
3751
3936
  readonly state: Machine.Snapshot<States>;
@@ -3831,7 +4016,7 @@ export declare const configuration: <M extends Machine.Any>(machine: M, state: M
3831
4016
  * @category getters
3832
4017
  * @since 0.4.0
3833
4018
  */
3834
- export declare const enabled: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents>, state: Machine.Snapshot<States>) => ReadonlyArray<Machine.TagOf<Events[number]>>;
4019
+ export declare const enabled: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema>, const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents>, state: Machine.Snapshot<States>) => ReadonlyArray<Machine.TagOf<Events[number]>>;
3835
4020
  /**
3836
4021
  * Plans the next state snapshot synchronously.
3837
4022
  *
@@ -3861,7 +4046,7 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
3861
4046
  * const States = Machine.defineStates({ Off, On })
3862
4047
  * const machine = Machine.make({
3863
4048
  * states: States.states,
3864
- * events: [Toggle],
4049
+ * events: Machine.events(Toggle),
3865
4050
  * initial: () => States.initial.Off.from()
3866
4051
  * }).handle({ Off: { on: { Toggle: () => States.initial.On.from() } }, On: {} })
3867
4052
  *
@@ -3876,7 +4061,7 @@ export declare const enabled: <const States extends Machine.StateSchemas, const
3876
4061
  * @category combinators
3877
4062
  * @since 0.4.0
3878
4063
  */
3879
- export declare const plan: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, state: Machine.Snapshot<States>, event: Machine.EventInputOf<InputEvents>) => Effect.Effect<{
4064
+ export declare const plan: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, state: Machine.Snapshot<States>, event: Machine.EventInputOf<InputEvents>) => Effect.Effect<{
3880
4065
  readonly next: Machine.Snapshot<States>;
3881
4066
  readonly commands: ReadonlyArray<Command>;
3882
4067
  readonly emittedEvents: ReadonlyArray<Machine.EmitOf<Emits>>;
@@ -4031,6 +4216,29 @@ export declare const stopChild: {
4031
4216
  * @since 0.4.0
4032
4217
  */
4033
4218
  export declare const watch: <State, Event, Error = never, Output = never>(ref: MachineRef<State, Event, Error, Output>) => Stream.Stream<RuntimeOutcome<State, Error, Output>>;
4219
+ /**
4220
+ * Prepares a fresh machine without initializing it.
4221
+ *
4222
+ * Use this constructor when observation must be composed before initial-entry
4223
+ * actions run. Subscribe to `prepared.emissions`, then evaluate
4224
+ * `prepared.start`. Ordinary callers can continue to use {@link start}, which
4225
+ * starts directly and does not allocate the prepared lifecycle boundary.
4226
+ *
4227
+ * ```ts
4228
+ * const prepared = yield* Machine.prepare(machine)
4229
+ *
4230
+ * yield* prepared.emissions.pipe(
4231
+ * Stream.runForEach(handleEmission),
4232
+ * Effect.forkScoped({ startImmediately: true })
4233
+ * )
4234
+ *
4235
+ * const ref = yield* prepared.start
4236
+ * ```
4237
+ *
4238
+ * @category constructors
4239
+ * @since 0.11.0
4240
+ */
4241
+ export declare const prepare: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<Prepared<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>, InitialE | E | ActionError<InitialR | R> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError, ExcludeCompatibleRuntime<ExecutionServices<InitialR | R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>>;
4034
4242
  /**
4035
4243
  * Starts a machine.
4036
4244
  *
@@ -4063,7 +4271,7 @@ export declare const watch: <State, Event, Error = never, Output = never>(ref: M
4063
4271
  * const States = Machine.defineStates({ Idle })
4064
4272
  * const machine = Machine.make({
4065
4273
  * states: States.states,
4066
- * events: [],
4274
+ * events: Machine.events(),
4067
4275
  * initial: () => States.initial.Idle.from()
4068
4276
  * }).handle({ Idle: {} })
4069
4277
  *
@@ -4078,7 +4286,7 @@ export declare const watch: <State, Event, Error = never, Output = never>(ref: M
4078
4286
  * @category constructors
4079
4287
  * @since 0.4.0
4080
4288
  */
4081
- export declare const start: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output>, InitialE | E | ActionError<InitialR | R> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError, ExcludeCompatibleRuntime<ExecutionServices<InitialR | R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
4289
+ export declare const start: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, ...args: [...Machine.InputArgs<Input>]) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>>, InitialE | E | ActionError<InitialR | R> | InfiniteTransitionError | MachineSchemaDecodeError | StartupError | StoppedError, ExcludeCompatibleRuntime<ExecutionServices<InitialR | R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
4082
4290
  /**
4083
4291
  * Starts a fresh managed runtime from a decoded logical snapshot.
4084
4292
  *
@@ -4113,7 +4321,7 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
4113
4321
  * const States = Machine.defineStates({ Idle })
4114
4322
  * const machine = Machine.make({
4115
4323
  * states: States.states,
4116
- * events: [],
4324
+ * events: Machine.events(),
4117
4325
  * initial: () => States.initial.Idle.from()
4118
4326
  * }).handle({ Idle: {} })
4119
4327
  *
@@ -4130,5 +4338,5 @@ export declare const start: <const States extends Machine.StateSchemas, const Ev
4130
4338
  * @category constructors
4131
4339
  * @since 0.4.0
4132
4340
  */
4133
- export declare const resume: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, snapshot: Machine.Snapshot<States>) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output>, MachineSchemaDecodeError, ExcludeCompatibleRuntime<ExecutionServices<R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
4341
+ export declare const resume: <const States extends Machine.StateSchemas, const Events extends ReadonlyArray<Machine.TaggedSchema>, const Emits extends ReadonlyArray<Machine.TaggedSchema> = readonly [], const Input extends Schema.Top = typeof Schema.Void, UnhandledStates extends Machine.StateIdentifier<States> = Machine.StateIdentifier<States>, E = never, R = never, InitialE = never, InitialR = never, FinalStates extends Machine.StateIdentifier<States> = never, Output = never, OutputStates extends Machine.StateIdentifier<States> = never, InputEvents extends ReadonlyArray<Machine.TaggedSchema> = Events, ParentEvents extends ReadonlyArray<Machine.TaggedSchema> = readonly []>(machine: Machine<States, Events, Input, UnhandledStates, E, R, InitialE, InitialR, FinalStates, Output, Emits, OutputStates, InputEvents, ParentEvents> & EnsureExecutable<States, UnhandledStates, OutputStates>, snapshot: Machine.Snapshot<States>) => Effect.Effect<MachineRef<Machine.Snapshot<States>, Machine.EventInputOf<InputEvents>, E | ActionError<R> | InfiniteTransitionError | MachineSchemaDecodeError | StoppedError, Output, Machine.EmittedEventOf<Emits>>, MachineSchemaDecodeError, ExcludeCompatibleRuntime<ExecutionServices<R>, Machine.EventOf<Events>, Machine.EmitOf<Emits>>>;
4134
4342
  //# sourceMappingURL=Machine.d.ts.map