posipaki 0.14.0 → 0.16.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 (36) hide show
  1. package/dist/{actor-types-B4Yn1k1C.d.ts → hooks-Czj67zNB.d.ts} +67 -9
  2. package/dist/hooks-Czj67zNB.d.ts.map +1 -0
  3. package/dist/hooks-D5DhD9gu.js +23 -0
  4. package/dist/hooks-D5DhD9gu.js.map +1 -0
  5. package/dist/hooks.d.ts +2 -2
  6. package/dist/hooks.js +1 -19
  7. package/dist/index.d.ts +4 -5
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +2 -2
  10. package/dist/pipe.d.ts +1 -1
  11. package/dist/plugins/debug-logger.d.ts +1 -1
  12. package/dist/plugins/debug-logger.js +6 -6
  13. package/dist/plugins/debug-logger.js.map +1 -1
  14. package/dist/plugins/rbac.d.ts +1 -1
  15. package/dist/plugins/rbac.js +4 -4
  16. package/dist/plugins/rbac.js.map +1 -1
  17. package/dist/plugins/timeout-guard.d.ts +1 -1
  18. package/dist/plugins/timeout-guard.js +4 -4
  19. package/dist/plugins/timeout-guard.js.map +1 -1
  20. package/dist/{process-oAztLPCm.d.ts → process-Bf9HTr0m.d.ts} +2 -2
  21. package/dist/{process-oAztLPCm.d.ts.map → process-Bf9HTr0m.d.ts.map} +1 -1
  22. package/dist/remote/index.d.ts +2 -2
  23. package/dist/remote/index.js +2 -2
  24. package/dist/{src-CqzaKQBZ.js → src-4KNZmXeS.js} +62 -46
  25. package/dist/src-4KNZmXeS.js.map +1 -0
  26. package/dist/supervisor.d.ts +2 -2
  27. package/dist/{types-C6plZEPj.d.ts → types-BLIFntvm.d.ts} +5 -11
  28. package/dist/types-BLIFntvm.d.ts.map +1 -0
  29. package/dist/xfetch.d.ts +2 -2
  30. package/package.json +1 -1
  31. package/dist/actor-types-B4Yn1k1C.d.ts.map +0 -1
  32. package/dist/hooks-BdNEs0DD.d.ts +0 -48
  33. package/dist/hooks-BdNEs0DD.d.ts.map +0 -1
  34. package/dist/hooks.js.map +0 -1
  35. package/dist/src-CqzaKQBZ.js.map +0 -1
  36. package/dist/types-C6plZEPj.d.ts.map +0 -1
@@ -1,5 +1,4 @@
1
- import { a as ProcessCtx, n as ExitMessage, p as AsyncProcess, r as Message, s as SenderInfo, t as AsyncProcessFn } from "./types-C6plZEPj.js";
2
- import { f as PluginTransform, i as HookResult, n as ActorPlugin, t as ActorDecorated, u as OnStartHook } from "./hooks-BdNEs0DD.js";
1
+ import { a as ProcessCtx, n as ExitMessage, p as AsyncProcess, r as Message, s as SenderInfo, t as AsyncProcessFn } from "./types-BLIFntvm.js";
3
2
 
4
3
  //#region src/actor-types.d.ts
5
4
  type ActorMessages<M extends Message> = {
@@ -12,7 +11,7 @@ type HandlerFn<InMsg extends Message> = (msg: InMsg, sender: SenderInfo) => void
12
11
  type HandlerOptions<InMsg extends Message> = Omit<{ [K in InMsg["type"]]: HandlerFn<Extract<InMsg, {
13
12
  type: K;
14
13
  }>> }, "STOP">;
15
- interface ActorDefinition<Args, ExposedState, InMsg extends Message, OutMsg extends Message, Handlers extends HandlerOptions<InMsg>> {
14
+ interface ActorDefinition<Args, ExposedState, InMsg extends Message, OutMsg extends Message, Handlers extends HandlerOptions<InMsg>, ReflectionMethods = {}> {
16
15
  fn: AsyncProcessFn<Args, ExposedState, InMsg, OutMsg>;
17
16
  config: ActorConfig<Args, any, ExposedState, InMsg, OutMsg, {}, Handlers>;
18
17
  /** Preferred process name (from config.name). */
@@ -20,9 +19,9 @@ interface ActorDefinition<Args, ExposedState, InMsg extends Message, OutMsg exte
20
19
  /** Raw plugin config (array or transform). Resolved at fork time. @internal */
21
20
  pvtPluginsRaw?: ActorPlugin[] | PluginTransform;
22
21
  /** Spawn this actor as a standalone process. */
23
- spawn(args: Args): AsyncProcess<Args, ExposedState, InMsg, OutMsg>;
22
+ spawn(args: Args): AsyncProcess<Args, ExposedState, InMsg, OutMsg, ReflectionMethods>;
24
23
  /** Spawn this actor as a child of the calling process. */
25
- spawnAsChild(ctx: ProcessCtx<any, any, any, any>, args: Args, name?: string): AsyncProcess<Args, ExposedState, InMsg, OutMsg>;
24
+ spawnAsChild(ctx: ProcessCtx<any, any, any, any>, args: Args, name?: string): AsyncProcess<Args, ExposedState, InMsg, OutMsg, ReflectionMethods>;
26
25
  }
27
26
  interface ActorHooksConfig<Args, InternalState, ExposedState, InMsg extends Message, OutMsg extends Message, Methods extends MethodOptions, Handlers extends HandlerOptions<InMsg>> {
28
27
  onStart?: OnStartHook<ExposedState>;
@@ -33,7 +32,7 @@ interface ActorHooksConfig<Args, InternalState, ExposedState, InMsg extends Mess
33
32
  onEnd?: (this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>, reason: unknown) => void | Promise<void>;
34
33
  onError?: (this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>, err: unknown) => void;
35
34
  }
36
- interface ActorConfig<Args, InternalState, ExposedState, InMsg extends Message, OutMsg extends Message, Methods extends MethodOptions, Handlers extends HandlerOptions<InMsg>> {
35
+ interface ActorConfig<Args, InternalState, ExposedState, InMsg extends Message, OutMsg extends Message, Methods extends MethodOptions, Handlers extends HandlerOptions<InMsg>, ReflectionMethods = {}> {
37
36
  initialState?: InternalState | ((this: void, args: Args, ctx: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>["ctx"]) => InternalState);
38
37
  expose?: (internalState: InternalState) => ExposedState;
39
38
  /** Preferred process name. Used by ctx.fork() when no explicit name is given. */
@@ -52,18 +51,77 @@ interface ActorConfig<Args, InternalState, ExposedState, InMsg extends Message,
52
51
  methods?: Methods & ThisType<ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>>;
53
52
  onUnhandled?: (this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>, msg: InMsg, sender: SenderInfo) => void | Promise<void>;
54
53
  onChildExit?: (this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>, name: string, reason: ExitMessage) => void | Promise<void>;
54
+ $reflectionMethods?: ReflectionMethods & ThisType<ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>>;
55
55
  }
56
+ /** Returned by onMessage hooks to prevent further dispatch. */
57
+ declare const STOP_SENTINEL: unique symbol;
58
+ /** Type-safe sentinel for short-circuiting onMessage hooks. */
59
+ declare const stopPropagation: () => typeof STOP_SENTINEL;
60
+ /** Return type of onMessage hooks: void (continue) or sentinel (stop). */
61
+ type HookResult = void | typeof STOP_SENTINEL;
62
+ type OnStartHook<State> = (state: State) => void | Promise<void>;
63
+ type OnMessageHook<InMsg extends Message> = (msg: InMsg, sender: SenderInfo) => HookResult | Promise<HookResult>;
64
+ type OnEmitHook<OutMsg extends Message> = (msg: OutMsg) => void;
65
+ type OnChildExitHook = (name: string) => void | Promise<void>;
66
+ type OnStopRequestedHook = () => void | Promise<void>;
67
+ type OnEndHook = (reason: unknown) => void | Promise<void>;
68
+ type OnErrorHook = (err: unknown) => void;
69
+ /** A reusable unit of actor behaviour, installed at fork time. */
70
+ interface ActorPlugin<InMsg extends Message = Message, OutMsg extends Message = Message, State = unknown> {
71
+ name: string;
72
+ install(self: ActorContext<unknown, State, InMsg, OutMsg, MethodOptions, HandlerOptions<InMsg>>): void | Promise<void>;
73
+ }
74
+ /** Transform parent plugins into child plugins. */
75
+ type PluginTransform = (parentPlugins: ActorPlugin[]) => ActorPlugin[];
56
76
  type ActorContext<Args, InternalState, InMsg extends Message, OutMsg extends Message, Methods extends MethodOptions, Handlers extends HandlerOptions<InMsg>> = Methods & ActorDecorated & {
57
77
  state: InternalState;
58
78
  name: string;
59
79
  id: symbol;
60
80
  emit: (msg: OutMsg) => void;
61
- agreeToStop: () => void;
81
+ agreeToStop: () => void; /** Hook registration. */
82
+ hooks: {
83
+ onMessage: (h: OnMessageHook<InMsg>) => void;
84
+ onEmit: (h: OnEmitHook<OutMsg>) => void;
85
+ onChildExit: (h: OnChildExitHook) => void;
86
+ onStart: (h: OnStartHook<unknown>) => void;
87
+ onStopRequested: (h: OnStopRequestedHook) => void;
88
+ onError: (h: OnErrorHook) => void;
89
+ onEnd: (h: OnEndHook) => void;
90
+ }; /** Reflection method registration. Plugin name is automatically prefixed. */
91
+ reflection: {
92
+ register(name: string, method: (this: ActorContext<unknown, unknown, Message, Message, MethodOptions, HandlerOptions<Message>>) => unknown): void;
93
+ }; /** Property decoration. Throws if key conflicts with built-in. */
94
+ decorate: (key: string, value: unknown) => void;
62
95
  exit: (reason?: unknown) => void;
63
96
  $child: Record<string, AsyncProcess<unknown, unknown, Message, Message>>;
64
97
  fork<A, S, IM extends Message, OM extends Message, H extends HandlerOptions<IM>>(fn: AsyncProcessFn<A, S, IM, OM> | ActorDefinition<A, S, IM, OM, H>, name?: string, args?: A): AsyncProcess<A, S, IM, OM>;
65
98
  ctx: ProcessCtx<Args, InternalState, InMsg, OutMsg>;
66
99
  };
67
100
  //#endregion
68
- export { HandlerFn as a, ActorMessages as i, ActorContext as n, HandlerOptions as o, ActorDefinition as r, MethodOptions as s, ActorConfig as t };
69
- //# sourceMappingURL=actor-types-B4Yn1k1C.d.ts.map
101
+ //#region src/hooks.d.ts
102
+ /** Returned by onMessage hooks to prevent further dispatch. */
103
+ declare class HookRegistry<State, InMsg extends Message, OutMsg extends Message> {
104
+ onStart: Array<OnStartHook<State>>;
105
+ onMessage: Array<OnMessageHook<InMsg>>;
106
+ onEmit: Array<OnEmitHook<OutMsg>>;
107
+ onChildExit: Array<OnChildExitHook>;
108
+ onStopRequested: Array<OnStopRequestedHook>;
109
+ onEnd: Array<OnEndHook>;
110
+ onError: Array<OnErrorHook>;
111
+ }
112
+ /**
113
+ * Interface that plugins can augment via declaration merging.
114
+ * Plugins ship a .d.ts that adds properties to this interface,
115
+ * making them available on `this` in handlers and methods.
116
+ *
117
+ * Example (in a plugin's .d.ts):
118
+ * declare module 'posipaki' {
119
+ * interface ActorDecorated {
120
+ * log: Logger;
121
+ * }
122
+ * }
123
+ */
124
+ interface ActorDecorated {}
125
+ //#endregion
126
+ export { OnStartHook as _, ActorDefinition as a, STOP_SENTINEL as b, HandlerFn as c, MethodOptions as d, OnChildExitHook as f, OnMessageHook as g, OnErrorHook as h, ActorContext as i, HandlerOptions as l, OnEndHook as m, HookRegistry as n, ActorMessages as o, OnEmitHook as p, ActorConfig as r, ActorPlugin as s, ActorDecorated as t, HookResult as u, OnStopRequestedHook as v, stopPropagation as x, PluginTransform as y };
127
+ //# sourceMappingURL=hooks-Czj67zNB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-Czj67zNB.d.ts","names":[],"sources":["../src/actor-types.ts","../src/hooks.ts"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ //#region src/actor-types.ts
2
+ /** Returned by onMessage hooks to prevent further dispatch. */
3
+ const STOP_SENTINEL = Symbol("posipaki.stopPropagation");
4
+ /** Type-safe sentinel for short-circuiting onMessage hooks. */
5
+ const stopPropagation = () => STOP_SENTINEL;
6
+ //#endregion
7
+ //#region src/hooks.ts
8
+ /** Returned by onMessage hooks to prevent further dispatch. */
9
+ var HookRegistry = class {
10
+ constructor() {
11
+ this.onStart = [];
12
+ this.onMessage = [];
13
+ this.onEmit = [];
14
+ this.onChildExit = [];
15
+ this.onStopRequested = [];
16
+ this.onEnd = [];
17
+ this.onError = [];
18
+ }
19
+ };
20
+ //#endregion
21
+ export { STOP_SENTINEL as n, stopPropagation as r, HookRegistry as t };
22
+
23
+ //# sourceMappingURL=hooks-D5DhD9gu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-D5DhD9gu.js","names":[],"sources":["../src/actor-types.ts","../src/hooks.ts"],"sourcesContent":["// ── defineActor types ────────────────────────────────────────────────────────\n//\n// Shared between define-actor.ts (implementation) and consumers that want\n// to reference the config/context/definition shapes without importing the\n// implementation module directly.\n\nimport type {\n SenderInfo,\n AsyncProcessFn,\n Message,\n ProcessCtx,\n ExitMessage,\n} from \"./types.js\";\nimport type { ActorDecorated } from \"./hooks.js\";\nimport type { AsyncProcess } from \"./process.async.js\";\n\n// Internal marker do not use\nexport type ActorMessages<M extends Message> = {\n __tag_messages: M;\n};\nexport interface MethodOptions {\n [key: string]: Function;\n}\nexport type HandlerFn<InMsg extends Message> = (\n msg: InMsg,\n sender: SenderInfo,\n) => void | Promise<void>;\nexport type HandlerOptions<InMsg extends Message> = Omit<\n {\n [K in InMsg[\"type\"]]: HandlerFn<Extract<InMsg, { type: K }>>;\n },\n \"STOP\"\n>;\n\nexport interface ActorDefinition<\n Args,\n ExposedState,\n InMsg extends Message,\n OutMsg extends Message,\n // eslint-disable-next-line no-unused-vars\n Handlers extends HandlerOptions<InMsg>,\n ReflectionMethods = {},\n> {\n fn: AsyncProcessFn<Args, ExposedState, InMsg, OutMsg>;\n config: ActorConfig<Args, any, ExposedState, InMsg, OutMsg, {}, Handlers>;\n /** Preferred process name (from config.name). */\n name?: string;\n /** Raw plugin config (array or transform). Resolved at fork time. @internal */\n pvtPluginsRaw?: ActorPlugin[] | PluginTransform;\n /** Spawn this actor as a standalone process. */\n spawn(args: Args): AsyncProcess<Args, ExposedState, InMsg, OutMsg, ReflectionMethods>;\n /** Spawn this actor as a child of the calling process. */\n spawnAsChild(\n ctx: ProcessCtx<any, any, any, any>,\n args: Args,\n name?: string,\n ): AsyncProcess<Args, ExposedState, InMsg, OutMsg, ReflectionMethods>;\n}\n\nexport interface ActorHooksConfig<\n Args,\n InternalState,\n ExposedState,\n InMsg extends Message,\n OutMsg extends Message,\n Methods extends MethodOptions,\n // eslint-disable-next-line no-unused-vars\n Handlers extends HandlerOptions<InMsg>,\n> {\n onStart?: OnStartHook<ExposedState>;\n onMessage?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n msg: InMsg,\n sender: SenderInfo,\n ) => HookResult | Promise<HookResult>;\n onEmit?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n msg: OutMsg,\n ) => void;\n onChildExit?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n name: string,\n ) => void | Promise<void>;\n onStopRequested?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n ) => void | Promise<void>;\n onEnd?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n reason: unknown,\n ) => void | Promise<void>;\n onError?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n err: unknown,\n ) => void;\n}\n\nexport interface ActorConfig<\n Args,\n InternalState,\n ExposedState,\n InMsg extends Message,\n OutMsg extends Message,\n Methods extends MethodOptions,\n // eslint-disable-next-line no-unused-vars\n Handlers extends HandlerOptions<InMsg>,\n ReflectionMethods = {},\n> {\n initialState?:\n | InternalState\n | ((\n this: void,\n args: Args,\n // initial state is called before the actor\n // context is created (not that it's really necessay)\n // so we can only pass the process context here.\n ctx: ActorContext<\n Args,\n InternalState,\n InMsg,\n OutMsg,\n Methods,\n Handlers\n >[\"ctx\"],\n ) => InternalState);\n expose?: (internalState: InternalState) => ExposedState;\n /** Preferred process name. Used by ctx.fork() when no explicit name is given. */\n name?: string;\n hooks?: ActorHooksConfig<Args, InternalState, ExposedState, InMsg, OutMsg, Methods, Handlers>;\n /** Plugins installed at fork time. Array = replace, function = transform parent chain. */\n plugins?: ActorPlugin[] | PluginTransform;\n outMessages?: ActorMessages<OutMsg>;\n inMessages?: ActorMessages<InMsg>;\n\n setup?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n args: Args,\n ) => InternalState | Promise<InternalState>;\n\n afterStart?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n ) => void | Promise<void>;\n\n onStart?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n args: Args,\n ) => void | Promise<void>;\n\n onStopRequested?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n ) => void | Promise<void>;\n\n onEnd?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n reason?: unknown,\n ) => void | Promise<void>;\n\n handlers: Handlers &\n ThisType<\n ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>\n >;\n\n methods?: Methods &\n ThisType<\n ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>\n >;\n\n onUnhandled?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n msg: InMsg,\n sender: SenderInfo,\n ) => void | Promise<void>;\n\n onChildExit?: (\n this: ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>,\n name: string,\n reason: ExitMessage,\n ) => void | Promise<void>;\n\n $reflectionMethods?: ReflectionMethods &\n ThisType<ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>>;\n}\n\n// ── stop propagation sentinel ────────────────────────────────────────────\n\n/** Returned by onMessage hooks to prevent further dispatch. */\nexport const STOP_SENTINEL = Symbol('posipaki.stopPropagation');\n\n/** Type-safe sentinel for short-circuiting onMessage hooks. */\nexport const stopPropagation = (): typeof STOP_SENTINEL => STOP_SENTINEL;\n\n// ── hook function types ──────────────────────────────────────────────────\n\n/** Return type of onMessage hooks: void (continue) or sentinel (stop). */\nexport type HookResult = void | typeof STOP_SENTINEL;\n\nexport type OnStartHook<State> = (state: State) => void | Promise<void>;\nexport type OnMessageHook<InMsg extends Message> = (msg: InMsg, sender: SenderInfo) => HookResult | Promise<HookResult>;\nexport type OnEmitHook<OutMsg extends Message> = (msg: OutMsg) => void;\nexport type OnChildExitHook = (name: string) => void | Promise<void>;\nexport type OnStopRequestedHook = () => void | Promise<void>;\nexport type OnEndHook = (reason: unknown) => void | Promise<void>;\nexport type OnErrorHook = (err: unknown) => void;\n\n// ── plugin types ─────────────────────────────────────────────────────────\n\n/** A reusable unit of actor behaviour, installed at fork time. */\nexport interface ActorPlugin<\n InMsg extends Message = Message,\n OutMsg extends Message = Message,\n State = unknown,\n> {\n name: string;\n install(self: ActorContext<unknown, State, InMsg, OutMsg, MethodOptions, HandlerOptions<InMsg>>): void | Promise<void>;\n}\n\n/** Transform parent plugins into child plugins. */\nexport type PluginTransform = (parentPlugins: ActorPlugin[]) => ActorPlugin[];\n\nexport type ActorContext<\n Args,\n InternalState,\n InMsg extends Message,\n OutMsg extends Message,\n Methods extends MethodOptions,\n // eslint-disable-next-line no-unused-vars\n Handlers extends HandlerOptions<InMsg>,\n> = Methods & ActorDecorated & {\n state: InternalState;\n name: string;\n id: symbol;\n\n emit: (msg: OutMsg) => void;\n agreeToStop: () => void;\n\n /** Hook registration. */\n hooks: {\n onMessage: (h: OnMessageHook<InMsg>) => void;\n onEmit: (h: OnEmitHook<OutMsg>) => void;\n onChildExit: (h: OnChildExitHook) => void;\n onStart: (h: OnStartHook<unknown>) => void;\n onStopRequested: (h: OnStopRequestedHook) => void;\n onError: (h: OnErrorHook) => void;\n onEnd: (h: OnEndHook) => void;\n };\n\n /** Reflection method registration. Plugin name is automatically prefixed. */\n reflection: {\n register(name: string, method: (this: ActorContext<unknown, unknown, Message, Message, MethodOptions, HandlerOptions<Message>>) => unknown): void;\n };\n\n /** Property decoration. Throws if key conflicts with built-in. */\n decorate: (key: string, value: unknown) => void;\n exit: (reason?: unknown) => void;\n\n $child: Record<string, AsyncProcess<unknown, unknown, Message, Message>>;\n\n fork<\n A,\n S,\n IM extends Message,\n OM extends Message,\n H extends HandlerOptions<IM>,\n >(\n fn: AsyncProcessFn<A, S, IM, OM> | ActorDefinition<A, S, IM, OM, H>,\n name?: string,\n args?: A,\n ): AsyncProcess<A, S, IM, OM>;\n\n ctx: ProcessCtx<Args, InternalState, InMsg, OutMsg>;\n};\n","// ── Lifecycle Hooks ──────────────────────────────────────────────────────\n//\n// Extends ProcessCtx and defineActor with observable lifecycle hooks.\n// Hooks are additive — multiple callbacks can register for the same hook\n// point, and they fire in registration order.\n\nimport type { Message } from './types.js';\nimport {\n STOP_SENTINEL,\n stopPropagation,\n} from './actor-types.js';\nimport type {\n HookResult,\n OnStartHook,\n OnMessageHook,\n OnEmitHook,\n OnChildExitHook,\n OnStopRequestedHook,\n OnEndHook,\n OnErrorHook,\n ActorPlugin,\n PluginTransform,\n} from './actor-types.js';\n\n// ── stop propagation sentinel ────────────────────────────────────────────\n\n/** Returned by onMessage hooks to prevent further dispatch. */\n// ── hook registry ────────────────────────────────────────────────────────\n\nexport class HookRegistry<State, InMsg extends Message, OutMsg extends Message> {\n onStart: Array<OnStartHook<State>> = [];\n onMessage: Array<OnMessageHook<InMsg>> = [];\n onEmit: Array<OnEmitHook<OutMsg>> = [];\n onChildExit: Array<OnChildExitHook> = [];\n onStopRequested: Array<OnStopRequestedHook> = [];\n onEnd: Array<OnEndHook> = [];\n onError: Array<OnErrorHook> = [];\n}\n\n// Re-exports from actor-types.ts (backward compatibility)\nexport { STOP_SENTINEL, stopPropagation };\nexport type { HookResult, OnStartHook, OnMessageHook, OnEmitHook, OnChildExitHook, OnStopRequestedHook, OnEndHook, OnErrorHook, ActorPlugin, PluginTransform };\n\n// ── type augmentation (Fastify-style) ────────────────────────────────────\n\n/**\n * Interface that plugins can augment via declaration merging.\n * Plugins ship a .d.ts that adds properties to this interface,\n * making them available on `this` in handlers and methods.\n *\n * Example (in a plugin's .d.ts):\n * declare module 'posipaki' {\n * interface ActorDecorated {\n * log: Logger;\n * }\n * }\n */\nexport interface ActorDecorated {}\n"],"mappings":";;AAyLA,MAAa,gBAAgB,OAAO,0BAA0B;;AAG9D,MAAa,wBAA8C;;;;AC/J3D,IAAa,eAAb,MAAgF;;iBACzC,CAAC;mBACG,CAAC;gBACN,CAAC;qBACC,CAAC;yBACO,CAAC;eACrB,CAAC;iBACG,CAAC;;AACjC"}
package/dist/hooks.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as OnChildExitHook, c as OnErrorHook, d as OnStopRequestedHook, f as PluginTransform, i as HookResult, l as OnMessageHook, m as stopPropagation, n as ActorPlugin, o as OnEmitHook, p as STOP_SENTINEL, r as HookRegistry, s as OnEndHook, t as ActorDecorated, u as OnStartHook } from "./hooks-BdNEs0DD.js";
2
- export { ActorDecorated, ActorPlugin, HookRegistry, HookResult, OnChildExitHook, OnEmitHook, OnEndHook, OnErrorHook, OnMessageHook, OnStartHook, OnStopRequestedHook, PluginTransform, STOP_SENTINEL, stopPropagation };
1
+ import { _ as OnStartHook, b as STOP_SENTINEL, f as OnChildExitHook, g as OnMessageHook, h as OnErrorHook, m as OnEndHook, n as HookRegistry, p as OnEmitHook, s as ActorPlugin, t as ActorDecorated, u as HookResult, v as OnStopRequestedHook, x as stopPropagation, y as PluginTransform } from "./hooks-Czj67zNB.js";
2
+ export { ActorDecorated, type ActorPlugin, HookRegistry, type HookResult, type OnChildExitHook, type OnEmitHook, type OnEndHook, type OnErrorHook, type OnMessageHook, type OnStartHook, type OnStopRequestedHook, type PluginTransform, STOP_SENTINEL, stopPropagation };
package/dist/hooks.js CHANGED
@@ -1,20 +1,2 @@
1
- //#region src/hooks.ts
2
- /** Returned by onMessage hooks to prevent further dispatch. */
3
- const STOP_SENTINEL = Symbol("posipaki.stopPropagation");
4
- /** Type-safe sentinel for short-circuiting onMessage hooks. */
5
- const stopPropagation = () => STOP_SENTINEL;
6
- var HookRegistry = class {
7
- constructor() {
8
- this.onStart = [];
9
- this.onMessage = [];
10
- this.onEmit = [];
11
- this.onChildExit = [];
12
- this.onStopRequested = [];
13
- this.onEnd = [];
14
- this.onError = [];
15
- }
16
- };
17
- //#endregion
1
+ import { n as STOP_SENTINEL, r as stopPropagation, t as HookRegistry } from "./hooks-D5DhD9gu.js";
18
2
  export { HookRegistry, STOP_SENTINEL, stopPropagation };
19
-
20
- //# sourceMappingURL=hooks.js.map
package/dist/index.d.ts CHANGED
@@ -1,14 +1,13 @@
1
- import { a as ProcessCtx, c as SenderOrigin, d as WithSender, f as WithoutSender, h as spawnAsync, i as PipeState, l as StopMessage, m as runDispatchAsync, n as ExitMessage, o as ProcessFn, p as AsyncProcess, r as Message, s as SenderInfo, t as AsyncProcessFn, u as SupervisorState } from "./types-C6plZEPj.js";
2
- import { a as OnChildExitHook, c as OnErrorHook, d as OnStopRequestedHook, f as PluginTransform, i as HookResult, l as OnMessageHook, m as stopPropagation, n as ActorPlugin, o as OnEmitHook, r as HookRegistry, s as OnEndHook, t as ActorDecorated, u as OnStartHook } from "./hooks-BdNEs0DD.js";
3
- import { n as spawn, r as runDispatch, t as Process } from "./process-oAztLPCm.js";
4
- import { a as HandlerFn, i as ActorMessages, n as ActorContext, o as HandlerOptions, r as ActorDefinition, s as MethodOptions, t as ActorConfig } from "./actor-types-B4Yn1k1C.js";
1
+ import { a as ProcessCtx, c as SenderOrigin, d as WithSender, f as WithoutSender, h as spawnAsync, i as PipeState, l as StopMessage, m as runDispatchAsync, n as ExitMessage, o as ProcessFn, p as AsyncProcess, r as Message, s as SenderInfo, t as AsyncProcessFn, u as SupervisorState } from "./types-BLIFntvm.js";
2
+ import { _ as OnStartHook, a as ActorDefinition, c as HandlerFn, d as MethodOptions, f as OnChildExitHook, g as OnMessageHook, h as OnErrorHook, i as ActorContext, l as HandlerOptions, m as OnEndHook, n as HookRegistry, o as ActorMessages, p as OnEmitHook, r as ActorConfig, s as ActorPlugin, t as ActorDecorated, u as HookResult, v as OnStopRequestedHook, x as stopPropagation, y as PluginTransform } from "./hooks-Czj67zNB.js";
3
+ import { n as spawn, r as runDispatch, t as Process } from "./process-Bf9HTr0m.js";
5
4
 
6
5
  //#region src/adapters.d.ts
7
6
  declare function asyncify<A, S, IM extends Message, OM extends Message>(fn: ProcessFn<A, S, IM, OM>): AsyncProcessFn<A, S, IM, OM>;
8
7
  //#endregion
9
8
  //#region src/define-actor.d.ts
10
9
  declare function defineMessages<OutMsg extends Message = Message>(): ActorMessages<OutMsg>;
11
- declare function defineActor<Args, InternalState, ExposedState, InMsg extends Message, OutMsg extends Message, Methods extends MethodOptions, Handlers extends HandlerOptions<InMsg>>(config: ActorConfig<Args, InternalState, ExposedState, InMsg, OutMsg, Methods, Handlers>): ActorDefinition<Args, ExposedState, InMsg, OutMsg, Handlers>;
10
+ declare function defineActor<Args, InternalState, ExposedState, InMsg extends Message, OutMsg extends Message, Methods extends MethodOptions, Handlers extends HandlerOptions<InMsg>, ReflectionMethods = {}>(config: ActorConfig<Args, InternalState, ExposedState, InMsg, OutMsg, Methods, Handlers, ReflectionMethods>): ActorDefinition<Args, ExposedState, InMsg, OutMsg, Handlers, ReflectionMethods>;
12
11
  //#endregion
13
12
  export { type ActorConfig, type ActorContext, type ActorDecorated, type ActorDefinition, type ActorPlugin, AsyncProcess, type AsyncProcessFn, type ExitMessage, type HandlerFn, type HandlerOptions, HookRegistry, type HookResult, type Message, type MethodOptions, type OnChildExitHook, type OnEmitHook, type OnEndHook, type OnErrorHook, type OnMessageHook, type OnStartHook, type OnStopRequestedHook, type PipeState, type PluginTransform, Process, type ProcessCtx, type ProcessFn, type SenderInfo, type SenderOrigin, type StopMessage, type SupervisorState, type WithSender, type WithoutSender, asyncify, defineActor, defineMessages, runDispatch, runDispatchAsync, spawn, spawnAsync, stopPropagation };
14
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/adapters.ts","../src/define-actor.ts"],"mappings":";;;;;;iBAEgB,QAAA,kBAA0B,OAAA,aAAoB,OAAA,EAC5D,EAAA,EAAI,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA,IACvB,cAAA,CAAe,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA;;;iBC6BZ,cAAA,gBACC,OAAA,GAAU,OAAA,KACtB,aAAA,CAAc,MAAA;AAAA,iBAIH,WAAA,kDAIA,OAAA,iBACC,OAAA,kBACC,aAAA,mBACC,cAAA,CAAe,KAAA,GAEhC,MAAA,EAAQ,WAAA,CACN,IAAA,EACA,aAAA,EACA,YAAA,EACA,KAAA,EACA,MAAA,EACA,OAAA,EACA,QAAA,IAED,eAAA,CAAgB,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,QAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/adapters.ts","../src/define-actor.ts"],"mappings":";;;;;iBAEgB,QAAA,kBAA0B,OAAA,aAAoB,OAAA,EAC5D,EAAA,EAAI,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA,IACvB,cAAA,CAAe,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA;;;iBC6BZ,cAAA,gBACC,OAAA,GAAU,OAAA,KACtB,aAAA,CAAc,MAAA;AAAA,iBAIH,WAAA,kDAIA,OAAA,iBACC,OAAA,kBACC,aAAA,mBACC,cAAA,CAAe,KAAA,2BAGhC,MAAA,EAAQ,WAAA,CACN,IAAA,EACA,aAAA,EACA,YAAA,EACA,KAAA,EACA,MAAA,EACA,OAAA,EACA,QAAA,EACA,iBAAA,IAED,eAAA,CAAgB,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,iBAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { i as runDispatch } from "./util-DsfVKxTT.js";
2
- import { a as AsyncProcess, c as asyncify, i as spawn, n as defineMessages, o as runDispatchAsync, r as Process, s as spawnAsync, t as defineActor } from "./src-CqzaKQBZ.js";
3
- import { HookRegistry, stopPropagation } from "./hooks.js";
2
+ import { a as AsyncProcess, c as asyncify, i as spawn, n as defineMessages, o as runDispatchAsync, r as Process, s as spawnAsync, t as defineActor } from "./src-4KNZmXeS.js";
3
+ import { r as stopPropagation, t as HookRegistry } from "./hooks-D5DhD9gu.js";
4
4
  export { AsyncProcess, HookRegistry, Process, asyncify, defineActor, defineMessages, runDispatch, runDispatchAsync, spawn, spawnAsync, stopPropagation };
package/dist/pipe.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as ExitMessage, o as ProcessFn, r as Message } from "./types-C6plZEPj.js";
1
+ import { n as ExitMessage, o as ProcessFn, r as Message } from "./types-BLIFntvm.js";
2
2
 
3
3
  //#region src/pipe.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { n as ActorPlugin } from "../hooks-BdNEs0DD.js";
1
+ import { s as ActorPlugin } from "../hooks-Czj67zNB.js";
2
2
 
3
3
  //#region src/plugins/debug-logger.d.ts
4
4
  interface DebugLoggerOpts {
@@ -4,20 +4,20 @@ function debugLogger(opts) {
4
4
  const skipHbs = opts?.skipHeartbeats ?? true;
5
5
  return {
6
6
  name: "debugLogger",
7
- install(ctx) {
8
- const name = ctx.pname;
9
- ctx.onMessage?.((msg, sender) => {
7
+ install(self) {
8
+ const name = self.name;
9
+ self.hooks.onMessage((msg, sender) => {
10
10
  if (skipHbs && msg.type === "HEARTBEAT") return;
11
11
  const via = sender ? ` from ${sender.fromName}` : "";
12
12
  log(level, `${name} ← ${msg.type}${via}`);
13
13
  });
14
- ctx.onEmit?.((msg) => {
14
+ self.hooks.onEmit((msg) => {
15
15
  log(level, `${name} → ${msg.type}`);
16
16
  });
17
- ctx.onChildExit?.((childName) => {
17
+ self.hooks.onChildExit((childName) => {
18
18
  log(level, `${name}: child ${childName} exited`);
19
19
  });
20
- ctx.onError?.((err) => {
20
+ self.hooks.onError((err) => {
21
21
  console.error(`[${name}] error:`, err.message ?? err);
22
22
  });
23
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"debug-logger.js","names":[],"sources":["../../src/plugins/debug-logger.ts"],"sourcesContent":["// ── debugLogger Plugin ───────────────────────────────────────────────────\n//\n// Example plugin: logs every message entering and leaving the actor.\n//\n// Usage:\n// import { debugLogger } from 'posipaki/plugins/debug-logger';\n// const MyActor = defineActor({ plugins: [debugLogger()], ... });\n\nimport type { ActorPlugin } from '../hooks.js';\n\nexport interface DebugLoggerOpts {\n level?: 'debug' | 'info';\n skipHeartbeats?: boolean;\n}\n\nexport function debugLogger(opts?: DebugLoggerOpts): ActorPlugin {\n const level = opts?.level ?? 'debug';\n const skipHbs = opts?.skipHeartbeats ?? true;\n\n return {\n name: 'debugLogger',\n install(ctx: any) {\n const name = ctx.pname;\n\n ctx.onMessage?.((msg: any, sender: any) => {\n if (skipHbs && msg.type === 'HEARTBEAT') return;\n const via = sender ? ` from ${sender.fromName}` : '';\n log(level, `${name} ← ${msg.type}${via}`);\n });\n\n ctx.onEmit?.((msg: any) => {\n log(level, `${name} → ${msg.type}`);\n });\n\n ctx.onChildExit?.((childName: string) => {\n log(level, `${name}: child ${childName} exited`);\n });\n\n ctx.onError?.((err: unknown) => {\n console.error(`[${name}] error:`, (err as Error).message ?? err);\n });\n },\n };\n}\n\nfunction log(level: string, msg: string): void {\n const ts = new Date().toISOString().slice(11, 23);\n const line = `[${ts}] ${msg}`;\n if (level === 'info') console.info(line);\n else console.debug(line);\n}\n"],"mappings":";AAeA,SAAgB,YAAY,MAAqC;CAC/D,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,UAAU,MAAM,kBAAkB;CAExC,OAAO;EACL,MAAM;EACN,QAAQ,KAAU;GAChB,MAAM,OAAO,IAAI;GAEjB,IAAI,aAAa,KAAU,WAAgB;IACzC,IAAI,WAAW,IAAI,SAAS,aAAa;IACzC,MAAM,MAAM,SAAS,SAAS,OAAO,aAAa;IAClD,IAAI,OAAO,GAAG,KAAK,KAAK,IAAI,OAAO,KAAK;GAC1C,CAAC;GAED,IAAI,UAAU,QAAa;IACzB,IAAI,OAAO,GAAG,KAAK,KAAK,IAAI,MAAM;GACpC,CAAC;GAED,IAAI,eAAe,cAAsB;IACvC,IAAI,OAAO,GAAG,KAAK,UAAU,UAAU,QAAQ;GACjD,CAAC;GAED,IAAI,WAAW,QAAiB;IAC9B,QAAQ,MAAM,IAAI,KAAK,WAAY,IAAc,WAAW,GAAG;GACjE,CAAC;EACH;CACF;AACF;AAEA,SAAS,IAAI,OAAe,KAAmB;CAE7C,MAAM,OAAO,qBADF,IAAI,KAAK,GAAE,YAAY,EAAE,MAAM,IAAI,EAC5B,EAAE,IAAI;CACxB,IAAI,UAAU,QAAQ,QAAQ,KAAK,IAAI;MAClC,QAAQ,MAAM,IAAI;AACzB"}
1
+ {"version":3,"file":"debug-logger.js","names":[],"sources":["../../src/plugins/debug-logger.ts"],"sourcesContent":["// ── debugLogger Plugin ───────────────────────────────────────────────────\n//\n// Example plugin: logs every message entering and leaving the actor.\n//\n// Usage:\n// import { debugLogger } from 'posipaki/plugins/debug-logger';\n// const MyActor = defineActor({ plugins: [debugLogger()], ... });\n\nimport type { ActorPlugin } from '../hooks.js';\n\nexport interface DebugLoggerOpts {\n level?: 'debug' | 'info';\n skipHeartbeats?: boolean;\n}\n\nexport function debugLogger(opts?: DebugLoggerOpts): ActorPlugin {\n const level = opts?.level ?? 'debug';\n const skipHbs = opts?.skipHeartbeats ?? true;\n\n return {\n name: 'debugLogger',\n install(self: any) {\n const name = self.name;\n\n self.hooks.onMessage((msg: any, sender: any) => {\n if (skipHbs && msg.type === 'HEARTBEAT') return;\n const via = sender ? ` from ${sender.fromName}` : '';\n log(level, `${name} ← ${msg.type}${via}`);\n });\n\n self.hooks.onEmit((msg: any) => {\n log(level, `${name} → ${msg.type}`);\n });\n\n self.hooks.onChildExit((childName: string) => {\n log(level, `${name}: child ${childName} exited`);\n });\n\n self.hooks.onError((err: unknown) => {\n console.error(`[${name}] error:`, (err as Error).message ?? err);\n });\n },\n };\n}\n\nfunction log(level: string, msg: string): void {\n const ts = new Date().toISOString().slice(11, 23);\n const line = `[${ts}] ${msg}`;\n if (level === 'info') console.info(line);\n else console.debug(line);\n}\n"],"mappings":";AAeA,SAAgB,YAAY,MAAqC;CAC/D,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,UAAU,MAAM,kBAAkB;CAExC,OAAO;EACL,MAAM;EACN,QAAQ,MAAW;GACjB,MAAM,OAAO,KAAK;GAElB,KAAK,MAAM,WAAW,KAAU,WAAgB;IAC9C,IAAI,WAAW,IAAI,SAAS,aAAa;IACzC,MAAM,MAAM,SAAS,SAAS,OAAO,aAAa;IAClD,IAAI,OAAO,GAAG,KAAK,KAAK,IAAI,OAAO,KAAK;GAC1C,CAAC;GAED,KAAK,MAAM,QAAQ,QAAa;IAC9B,IAAI,OAAO,GAAG,KAAK,KAAK,IAAI,MAAM;GACpC,CAAC;GAED,KAAK,MAAM,aAAa,cAAsB;IAC5C,IAAI,OAAO,GAAG,KAAK,UAAU,UAAU,QAAQ;GACjD,CAAC;GAED,KAAK,MAAM,SAAS,QAAiB;IACnC,QAAQ,MAAM,IAAI,KAAK,WAAY,IAAc,WAAW,GAAG;GACjE,CAAC;EACH;CACF;AACF;AAEA,SAAS,IAAI,OAAe,KAAmB;CAE7C,MAAM,OAAO,qBADF,IAAI,KAAK,GAAE,YAAY,EAAE,MAAM,IAAI,EAC5B,EAAE,IAAI;CACxB,IAAI,UAAU,QAAQ,QAAQ,KAAK,IAAI;MAClC,QAAQ,MAAM,IAAI;AACzB"}
@@ -1,4 +1,4 @@
1
- import { n as ActorPlugin } from "../hooks-BdNEs0DD.js";
1
+ import { s as ActorPlugin } from "../hooks-Czj67zNB.js";
2
2
 
3
3
  //#region src/plugins/rbac.d.ts
4
4
  interface RbacOpts {
@@ -1,14 +1,14 @@
1
- import { stopPropagation } from "../hooks.js";
1
+ import { r as stopPropagation } from "../hooks-D5DhD9gu.js";
2
2
  //#region src/plugins/rbac.ts
3
3
  function rbac(opts) {
4
4
  const allowed = new Set(opts.allow);
5
5
  return {
6
6
  name: "rbac",
7
- install(ctx) {
8
- ctx.onMessage?.((msg) => {
7
+ install(self) {
8
+ self.hooks.onMessage((msg) => {
9
9
  const toolName = msg.toolCall?.function?.name ?? msg.type === "TOOL_EXECUTE" ? msg.toolCall?.function?.name : null;
10
10
  if (toolName && !allowed.has(toolName)) {
11
- console.warn(`[${ctx.pname}] blocked tool: ${toolName}`);
11
+ console.warn(`[${self.name}] blocked tool: ${toolName}`);
12
12
  return stopPropagation();
13
13
  }
14
14
  });
@@ -1 +1 @@
1
- {"version":3,"file":"rbac.js","names":[],"sources":["../../src/plugins/rbac.ts"],"sourcesContent":["// ── rbac Plugin ──────────────────────────────────────────────────────────\n//\n// Blocks tool execution for tools not in the allowed list.\n// Uses stopPropagation() to prevent handlers from running.\n//\n// Usage:\n// import { rbac } from 'posipaki/plugins/rbac';\n// const MyActor = defineActor({ plugins: [rbac({ allow: ['get_time'] })], ... });\n\nimport type { ActorPlugin } from '../hooks.js';\nimport { stopPropagation } from '../hooks.js';\n\nexport interface RbacOpts {\n allow: string[];\n}\n\nexport function rbac(opts: RbacOpts): ActorPlugin {\n const allowed = new Set(opts.allow);\n\n return {\n name: 'rbac',\n install(ctx: any) {\n ctx.onMessage?.((msg: any) => {\n const toolName = msg.toolCall?.function?.name\n ?? msg.type === 'TOOL_EXECUTE' ? (msg as any).toolCall?.function?.name\n : null;\n\n if (toolName && !allowed.has(toolName)) {\n console.warn(`[${ctx.pname}] blocked tool: ${toolName}`);\n return stopPropagation();\n }\n });\n },\n };\n}\n"],"mappings":";;AAgBA,SAAgB,KAAK,MAA6B;CAChD,MAAM,UAAU,IAAI,IAAI,KAAK,KAAK;CAElC,OAAO;EACL,MAAM;EACN,QAAQ,KAAU;GAChB,IAAI,aAAa,QAAa;IAC5B,MAAM,WAAW,IAAI,UAAU,UAAU,QACpC,IAAI,SAAS,iBAAkB,IAAY,UAAU,UAAU,OAChE;IAEJ,IAAI,YAAY,CAAC,QAAQ,IAAI,QAAQ,GAAG;KACtC,QAAQ,KAAK,IAAI,IAAI,MAAM,kBAAkB,UAAU;KACvD,OAAO,gBAAgB;IACzB;GACF,CAAC;EACH;CACF;AACF"}
1
+ {"version":3,"file":"rbac.js","names":[],"sources":["../../src/plugins/rbac.ts"],"sourcesContent":["// ── rbac Plugin ──────────────────────────────────────────────────────────\n//\n// Blocks tool execution for tools not in the allowed list.\n// Uses stopPropagation() to prevent handlers from running.\n//\n// Usage:\n// import { rbac } from 'posipaki/plugins/rbac';\n// const MyActor = defineActor({ plugins: [rbac({ allow: ['get_time'] })], ... });\n\nimport type { ActorPlugin } from '../hooks.js';\nimport { stopPropagation } from '../hooks.js';\n\nexport interface RbacOpts {\n allow: string[];\n}\n\nexport function rbac(opts: RbacOpts): ActorPlugin {\n const allowed = new Set(opts.allow);\n\n return {\n name: 'rbac',\n install(self: any) {\n self.hooks.onMessage((msg: any) => {\n const toolName = msg.toolCall?.function?.name\n ?? msg.type === 'TOOL_EXECUTE' ? (msg as any).toolCall?.function?.name\n : null;\n\n if (toolName && !allowed.has(toolName)) {\n console.warn(`[${self.name}] blocked tool: ${toolName}`);\n return stopPropagation();\n }\n });\n },\n };\n}\n"],"mappings":";;AAgBA,SAAgB,KAAK,MAA6B;CAChD,MAAM,UAAU,IAAI,IAAI,KAAK,KAAK;CAElC,OAAO;EACL,MAAM;EACN,QAAQ,MAAW;GACjB,KAAK,MAAM,WAAW,QAAa;IACjC,MAAM,WAAW,IAAI,UAAU,UAAU,QACpC,IAAI,SAAS,iBAAkB,IAAY,UAAU,UAAU,OAChE;IAEJ,IAAI,YAAY,CAAC,QAAQ,IAAI,QAAQ,GAAG;KACtC,QAAQ,KAAK,IAAI,KAAK,KAAK,kBAAkB,UAAU;KACvD,OAAO,gBAAgB;IACzB;GACF,CAAC;EACH;CACF;AACF"}
@@ -1,4 +1,4 @@
1
- import { n as ActorPlugin } from "../hooks-BdNEs0DD.js";
1
+ import { s as ActorPlugin } from "../hooks-Czj67zNB.js";
2
2
 
3
3
  //#region src/plugins/timeout-guard.d.ts
4
4
  interface TimeoutGuardOpts {
@@ -2,19 +2,19 @@
2
2
  function timeoutGuard(opts) {
3
3
  return {
4
4
  name: "timeoutGuard",
5
- install(ctx) {
5
+ install(self) {
6
6
  let timer = null;
7
7
  const reset = () => {
8
8
  if (timer) clearTimeout(timer);
9
9
  timer = setTimeout(() => {
10
- console.error(`[${ctx.pname}] timeout after ${opts.ms}ms — exiting`);
10
+ console.error(`[${self.name}] timeout after ${opts.ms}ms — exiting`);
11
11
  try {
12
12
  process.exit(1);
13
13
  } catch {}
14
14
  }, opts.ms);
15
15
  };
16
- ctx.onMessage?.(() => reset());
17
- ctx.onStart?.(() => reset());
16
+ self.hooks.onMessage(() => reset());
17
+ self.hooks.onStart(() => reset());
18
18
  }
19
19
  };
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"timeout-guard.js","names":[],"sources":["../../src/plugins/timeout-guard.ts"],"sourcesContent":["// ── timeoutGuard Plugin ──────────────────────────────────────────────────\n//\n// Kills the actor if no message is received within `ms` milliseconds.\n//\n// Usage:\n// import { timeoutGuard } from 'posipaki/plugins/timeout-guard';\n// const MyActor = defineActor({ plugins: [timeoutGuard({ ms: 30_000 })], ... });\n\nimport type { ActorPlugin } from '../hooks.js';\n\nexport interface TimeoutGuardOpts {\n ms: number;\n}\n\nexport function timeoutGuard(opts: TimeoutGuardOpts): ActorPlugin {\n return {\n name: 'timeoutGuard',\n install(ctx: any) {\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const reset = () => {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n console.error(`[${ctx.pname}] timeout after ${opts.ms}ms — exiting`);\n try { process.exit(1); } catch {}\n }, opts.ms);\n };\n\n ctx.onMessage?.(() => reset());\n ctx.onStart?.(() => reset());\n },\n };\n}\n"],"mappings":";AAcA,SAAgB,aAAa,MAAqC;CAChE,OAAO;EACL,MAAM;EACN,QAAQ,KAAU;GAChB,IAAI,QAA8C;GAElD,MAAM,cAAc;IAClB,IAAI,OAAO,aAAa,KAAK;IAC7B,QAAQ,iBAAiB;KACvB,QAAQ,MAAM,IAAI,IAAI,MAAM,kBAAkB,KAAK,GAAG,aAAa;KACnE,IAAI;MAAE,QAAQ,KAAK,CAAC;KAAG,QAAQ,CAAC;IAClC,GAAG,KAAK,EAAE;GACZ;GAEA,IAAI,kBAAkB,MAAM,CAAC;GAC7B,IAAI,gBAAgB,MAAM,CAAC;EAC7B;CACF;AACF"}
1
+ {"version":3,"file":"timeout-guard.js","names":[],"sources":["../../src/plugins/timeout-guard.ts"],"sourcesContent":["// ── timeoutGuard Plugin ──────────────────────────────────────────────────\n//\n// Kills the actor if no message is received within `ms` milliseconds.\n//\n// Usage:\n// import { timeoutGuard } from 'posipaki/plugins/timeout-guard';\n// const MyActor = defineActor({ plugins: [timeoutGuard({ ms: 30_000 })], ... });\n\nimport type { ActorPlugin } from '../hooks.js';\n\nexport interface TimeoutGuardOpts {\n ms: number;\n}\n\nexport function timeoutGuard(opts: TimeoutGuardOpts): ActorPlugin {\n return {\n name: 'timeoutGuard',\n install(self: any) {\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const reset = () => {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n console.error(`[${self.name}] timeout after ${opts.ms}ms — exiting`);\n try { process.exit(1); } catch {}\n }, opts.ms);\n };\n\n self.hooks.onMessage(() => reset());\n self.hooks.onStart(() => reset());\n },\n };\n}\n"],"mappings":";AAcA,SAAgB,aAAa,MAAqC;CAChE,OAAO;EACL,MAAM;EACN,QAAQ,MAAW;GACjB,IAAI,QAA8C;GAElD,MAAM,cAAc;IAClB,IAAI,OAAO,aAAa,KAAK;IAC7B,QAAQ,iBAAiB;KACvB,QAAQ,MAAM,IAAI,KAAK,KAAK,kBAAkB,KAAK,GAAG,aAAa;KACnE,IAAI;MAAE,QAAQ,KAAK,CAAC;KAAG,QAAQ,CAAC;IAClC,GAAG,KAAK,EAAE;GACZ;GAEA,KAAK,MAAM,gBAAgB,MAAM,CAAC;GAClC,KAAK,MAAM,cAAc,MAAM,CAAC;EAClC;CACF;AACF"}
@@ -1,4 +1,4 @@
1
- import { d as WithSender, n as ExitMessage, o as ProcessFn, p as AsyncProcess, r as Message } from "./types-C6plZEPj.js";
1
+ import { d as WithSender, n as ExitMessage, o as ProcessFn, p as AsyncProcess, r as Message } from "./types-BLIFntvm.js";
2
2
 
3
3
  //#region src/util.d.ts
4
4
  type ReducerClosure<M> = (msg: M) => void;
@@ -30,4 +30,4 @@ declare class Process<A, S, IM extends Message, OM extends Message> extends Asyn
30
30
  }
31
31
  //#endregion
32
32
  export { spawn as n, runDispatch as r, Process as t };
33
- //# sourceMappingURL=process-oAztLPCm.d.ts.map
33
+ //# sourceMappingURL=process-Bf9HTr0m.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"process-oAztLPCm.d.ts","names":["level","args","Array","M","msg","name","ReducerClosure","fn","ReadyFn","readyFn","debugLevel","Generator","A","S","IM","type","OM","ExitMessage","toAllChildren","m","toParent","id","pname","proc","ctx","gen","cancel","flush","DeferCb","DeferredCall","promise","Promise","resolve","NotifyFn","Waiter"],"sources":["../src/util.d.ts","../src/process.ts"],"mappings":";;;KAEK,cAAA,OAAqBI,GAAAA,EAAK,CAAC;AAAA,KAC3B,OAAA;;;;;;iBAOY,WAAA,IAAeC,IAAAA,UAAcE,EAAAA,EAAI,cAAA,CAAe,CAAA,GAAIE,OAAAA,GAAU,OAAA,EAASC,UAAAA,aAAuB,SAAA,aAAsB,CAAA;AARrG;AAAA;;;;AACpB;AACC;;;;;iBCIG,KAAA,kBAGH,OAAA,GAAU,OAAA,aACV,OAAA,GAAU,WAAA,EAErB,EAAA,EAAI,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA,GACxB,KAAA,UACA,EAAA,IAAM,CAAA,EAAG,UAAA,CAAW,EAAA,cAClB,CAAA,EAAG,CAAA,KAAM,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA;;;cAMzB,OAAA,kBAGO,OAAA,aACA,OAAA,UACH,YAAA,CAAa,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA;cAE7B,EAAA,EAAI,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA,GACxB,KAAA,UACA,EAAA,IAAM,CAAA,EAAG,UAAA,CAAW,EAAA;EAKtB,KAAA,CAAM,CAAA,EAAG,CAAA;EAIT,IAAA,IAAQ,OAAA;AAAA"}
1
+ {"version":3,"file":"process-Bf9HTr0m.d.ts","names":["level","args","Array","M","msg","name","ReducerClosure","fn","ReadyFn","readyFn","debugLevel","Generator","A","S","IM","type","OM","ExitMessage","toAllChildren","m","toParent","id","pname","proc","ctx","gen","cancel","flush","DeferCb","DeferredCall","promise","Promise","resolve","NotifyFn","Waiter"],"sources":["../src/util.d.ts","../src/process.ts"],"mappings":";;;KAEK,cAAA,OAAqBI,GAAAA,EAAK,CAAC;AAAA,KAC3B,OAAA;;;;;;iBAOY,WAAA,IAAeC,IAAAA,UAAcE,EAAAA,EAAI,cAAA,CAAe,CAAA,GAAIE,OAAAA,GAAU,OAAA,EAASC,UAAAA,aAAuB,SAAA,aAAsB,CAAA;AARrG;AAAA;;;;AACpB;AACC;;;;;iBCIG,KAAA,kBAGH,OAAA,GAAU,OAAA,aACV,OAAA,GAAU,WAAA,EAErB,EAAA,EAAI,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA,GACxB,KAAA,UACA,EAAA,IAAM,CAAA,EAAG,UAAA,CAAW,EAAA,cAClB,CAAA,EAAG,CAAA,KAAM,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA;;;cAMzB,OAAA,kBAGO,OAAA,aACA,OAAA,UACH,YAAA,CAAa,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA;cAE7B,EAAA,EAAI,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,EAAA,EAAI,EAAA,GACxB,KAAA,UACA,EAAA,IAAM,CAAA,EAAG,UAAA,CAAW,EAAA;EAKtB,KAAA,CAAM,CAAA,EAAG,CAAA;EAIT,IAAA,IAAQ,OAAA;AAAA"}
@@ -1,5 +1,5 @@
1
- import { r as Message, t as AsyncProcessFn } from "../types-C6plZEPj.js";
2
- import { o as HandlerOptions, r as ActorDefinition } from "../actor-types-B4Yn1k1C.js";
1
+ import { r as Message, t as AsyncProcessFn } from "../types-BLIFntvm.js";
2
+ import { a as ActorDefinition, l as HandlerOptions } from "../hooks-Czj67zNB.js";
3
3
  import { FileHandle } from "node:fs/promises";
4
4
 
5
5
  //#region src/remote/child.d.ts
@@ -1,5 +1,5 @@
1
- import { s as spawnAsync, t as defineActor } from "../src-CqzaKQBZ.js";
2
- import { stopPropagation } from "../hooks.js";
1
+ import { s as spawnAsync, t as defineActor } from "../src-4KNZmXeS.js";
2
+ import { r as stopPropagation } from "../hooks-D5DhD9gu.js";
3
3
  import { open, unlink } from "node:fs/promises";
4
4
  import { createReadStream } from "node:fs";
5
5
  import * as readline from "node:readline";
@@ -1,5 +1,5 @@
1
1
  import { n as defer, r as makeWaiter, t as debugLog } from "./util-DsfVKxTT.js";
2
- import { HookRegistry, STOP_SENTINEL } from "./hooks.js";
2
+ import { n as STOP_SENTINEL, t as HookRegistry } from "./hooks-D5DhD9gu.js";
3
3
  //#region src/adapters.ts
4
4
  function asyncify(fn) {
5
5
  return async function* (ctx, args) {
@@ -32,6 +32,7 @@ const noop = () => null;
32
32
  */
33
33
  var AsyncProcess = class AsyncProcess {
34
34
  constructor(fn, pname, toParent) {
35
+ this.$reflection = {};
35
36
  this.current = null;
36
37
  this.buffer = [];
37
38
  this.nextTick = null;
@@ -271,6 +272,8 @@ function defineActor(config) {
271
272
  const stashPlugins = (f, plugs) => {
272
273
  f.pvtResolvedPlugins = plugs;
273
274
  };
275
+ const actorCtxMap = /* @__PURE__ */ new Map();
276
+ const pvtRegisteredReflection = /* @__PURE__ */ new Map();
274
277
  const fn = async function* (ctx, args) {
275
278
  let done = false;
276
279
  let exitReason;
@@ -278,6 +281,7 @@ function defineActor(config) {
278
281
  let rawState = void 0;
279
282
  let exposedState = void 0;
280
283
  const pvtHooks = new HookRegistry();
284
+ const decorated = /* @__PURE__ */ new Map();
281
285
  const self = {
282
286
  ctx,
283
287
  ...config.methods || {},
@@ -299,20 +303,41 @@ function defineActor(config) {
299
303
  done = true;
300
304
  },
301
305
  $child: {},
302
- onMessage: (h) => {
303
- pvtHooks.onMessage.push(h);
304
- },
305
- onEmit: (h) => {
306
- pvtHooks.onEmit.push(h);
307
- },
308
- onChildExit: (h) => {
309
- pvtHooks.onChildExit.push(h);
310
- },
311
- onStopRequested: (h) => {
312
- pvtHooks.onStopRequested.push(h);
306
+ hooks: {
307
+ onMessage: (h) => {
308
+ pvtHooks.onMessage.push(h);
309
+ },
310
+ onEmit: (h) => {
311
+ pvtHooks.onEmit.push(h);
312
+ },
313
+ onChildExit: (h) => {
314
+ pvtHooks.onChildExit.push(h);
315
+ },
316
+ onStart: (h) => {
317
+ pvtHooks.onStart.push(h);
318
+ },
319
+ onStopRequested: (h) => {
320
+ pvtHooks.onStopRequested.push(h);
321
+ },
322
+ onError: (h) => {
323
+ pvtHooks.onError.push(h);
324
+ },
325
+ onEnd: (h) => {
326
+ pvtHooks.onEnd.push(h);
327
+ }
313
328
  },
314
- onError: (h) => {
315
- pvtHooks.onError.push(h);
329
+ reflection: { register(name, method) {
330
+ let methods = pvtRegisteredReflection.get(ctx.id);
331
+ if (!methods) {
332
+ methods = /* @__PURE__ */ new Map();
333
+ pvtRegisteredReflection.set(ctx.id, methods);
334
+ }
335
+ methods.set(`${currentPluginName}.${name}`, method);
336
+ } },
337
+ decorate: (key, value) => {
338
+ if (key in self) throw new Error(`decorate: key "${key}" conflicts with built-in`);
339
+ if (decorated.has(key)) throw new Error(`decorate: key "${key}" already decorated`);
340
+ decorated.set(key, value);
316
341
  },
317
342
  fork(childFn, name, childArgs) {
318
343
  const resolved = typeof childFn === "function" ? childFn : childFn.fn;
@@ -331,39 +356,14 @@ function defineActor(config) {
331
356
  return child;
332
357
  }
333
358
  };
334
- const decorated = /* @__PURE__ */ new Map();
335
- const ctxAny = ctx;
336
- ctxAny.onMessage = (h) => {
337
- pvtHooks.onMessage.push(h);
338
- };
339
- ctxAny.onEmit = (h) => {
340
- pvtHooks.onEmit.push(h);
341
- };
342
- ctxAny.onChildExit = (h) => {
343
- pvtHooks.onChildExit.push(h);
344
- };
345
- ctxAny.onStart = (h) => {
346
- pvtHooks.onStart.push(h);
347
- };
348
- ctxAny.onStopRequested = (h) => {
349
- pvtHooks.onStopRequested.push(h);
350
- };
351
- ctxAny.onError = (h) => {
352
- pvtHooks.onError.push(h);
353
- };
354
- ctxAny.onEnd = (h) => {
355
- pvtHooks.onEnd.push(h);
356
- };
357
- ctxAny.decorate = (key, value) => {
358
- if (key in self) throw new Error(`decorate: key "${key}" conflicts with built-in`);
359
- if (decorated.has(key)) throw new Error(`decorate: key "${key}" already decorated`);
360
- decorated.set(key, value);
361
- };
359
+ actorCtxMap.set(ctx.id, self);
362
360
  const resolvedPlugs = getResolvedPlugins(fn) ?? (config.plugins ? typeof config.plugins === "function" ? config.plugins([]) : config.plugins : []);
361
+ let currentPluginName = null;
363
362
  for (const p of resolvedPlugs) {
364
363
  let pvtErr = null;
364
+ currentPluginName = p.name;
365
365
  try {
366
- await p.install(ctx);
366
+ await p.install(self);
367
367
  } catch (e) {
368
368
  pvtErr = e;
369
369
  }
@@ -460,17 +460,33 @@ function defineActor(config) {
460
460
  await hookFn(exitReason ?? "done");
461
461
  } catch {}
462
462
  if (config.onEnd) await config.onEnd.call(self, exitReason ?? "done");
463
+ actorCtxMap.delete(ctx.id);
464
+ pvtRegisteredReflection.delete(ctx.id);
463
465
  };
466
+ function attachReflection(proc) {
467
+ const merged = /* @__PURE__ */ new Map();
468
+ if (config.$reflectionMethods) for (const [key, method] of Object.entries(config.$reflectionMethods)) merged.set(key, method);
469
+ const pluginMethods = pvtRegisteredReflection.get(proc.id);
470
+ if (pluginMethods) for (const [key, method] of pluginMethods) merged.set(key, method);
471
+ const refl = proc.$reflection;
472
+ for (const [key, method] of merged) refl[key] = async (...methodArgs) => {
473
+ return method.call(actorCtxMap.get(proc.id), ...methodArgs);
474
+ };
475
+ }
464
476
  return {
465
477
  fn,
466
478
  name: config.name,
467
479
  pvtPluginsRaw: config.plugins,
468
480
  config,
469
481
  spawn(args) {
470
- return spawnAsync(fn, config.name ?? "actor")(args);
482
+ const proc = spawnAsync(fn, config.name ?? "actor")(args);
483
+ attachReflection(proc);
484
+ return proc;
471
485
  },
472
486
  spawnAsChild(ctx, args, name) {
473
- return ctx.fork(fn, name ?? config.name ?? "child")(args);
487
+ const proc = ctx.fork(fn, name ?? config.name ?? "child")(args);
488
+ attachReflection(proc);
489
+ return proc;
474
490
  }
475
491
  };
476
492
  }
@@ -486,4 +502,4 @@ function defineActor(config) {
486
502
  //#endregion
487
503
  export { AsyncProcess as a, asyncify as c, spawn as i, defineMessages as n, runDispatchAsync as o, Process as r, spawnAsync as s, defineActor as t };
488
504
 
489
- //# sourceMappingURL=src-CqzaKQBZ.js.map
505
+ //# sourceMappingURL=src-4KNZmXeS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"src-4KNZmXeS.js","names":["withPlugins"],"sources":["../src/adapters.ts","../src/process.async.ts","../src/process.ts","../src/define-actor.ts","../src/index.ts"],"sourcesContent":["import type { ProcessFn, AsyncProcessFn, Message } from \"./types.js\"\n\nexport function asyncify<A, S, IM extends Message, OM extends Message>(\n fn: ProcessFn<A, S, IM, OM>,\n): AsyncProcessFn<A, S, IM, OM> {\n return async function* (ctx, args) {\n yield* fn(ctx, args) as any\n }\n}\n","import { defer, makeWaiter, debugLog } from \"./util.js\";\nimport type { DeferredCall, Waiter } from \"./util.js\";\nimport type {\n Message,\n WithSender,\n SenderInfo,\n ExitMessage,\n StopMessage,\n ProcessCtx,\n AsyncProcessFn,\n ProcessFn,\n} from \"./types.js\";\nimport { asyncify } from \"./adapters.js\";\n\n// ---- types ------------------------------------------------------------------\n\n/** An async iterator over process state. Receives `WithSender<InMessage | StopMessage>`. */\ntype AsyncProcessGenerator<ProcessState, InMessage extends Message> =\n AsyncGenerator<ProcessState | null, void, WithSender<InMessage | StopMessage>>;\n\ntype NotifyFn = () => void;\n\n// ---- runDispatchAsync -------------------------------------------------------\n\ntype AsyncReducer<M> = (msg: M) => Promise<void>;\ntype ReadyFn = () => boolean;\n\n/**\n * Async equivalent of `runDispatch`. Loops, yielding `null` and feeding\n * each incoming message to an `async` reducer. Exits when `readyFn()`\n * returns true.\n */\nexport async function* runDispatchAsync<M>(\n name: string,\n fn: AsyncReducer<M>,\n readyFn: ReadyFn = () => false,\n debugLevel = false,\n): AsyncGenerator<null, void, M> {\n let msg: M;\n while (!readyFn()) {\n msg = yield null;\n debugLog(debugLevel, \"msg\", name, \" <- \", msg);\n await fn(msg);\n }\n}\n\n// ---- AsyncProcess -----------------------------------------------------------\n\ntype ProcessMessageCb<M> = (msg: M) => void;\n\nconst noop = () => null;\n\n/**\n * A process driven by an async generator. Functionally identical to\n * {@link Process} but supports `await` inside reducers.\n *\n * Messages are processed **one at a time** — if a tick is already\n * in-flight, new messages are buffered and processed when the current\n * tick completes.\n */\nexport class AsyncProcess<\n Args,\n State,\n InMessage extends Message,\n OutMessage extends Message,\n ReflectionMethods = {},\n> {\n /** Reflection methods. Empty by default — defineActor fills in configured methods. */\n $reflection: ReflectionMethods = {} as ReflectionMethods;\n pgenerator: AsyncProcessFn<Args, State, InMessage, OutMessage>;\n pname: string;\n /** Called for every message sent via `ctx.toParent`. Receives `WithSender<OutMessage>`. */\n toParent: ProcessMessageCb<WithSender<OutMessage>>;\n id: symbol;\n state: State | null;\n\n private current: AsyncProcessGenerator<State, InMessage> | null = null;\n /** Every buffered message carries sender provenance. */\n private buffer: Array<WithSender<InMessage | StopMessage>> = [];\n private nextTick: DeferredCall | null = null;\n private children: Array<AsyncProcess<unknown, unknown, Message, Message>> =\n [];\n private subscribers: Array<NotifyFn> = [];\n private exitWaiter: Waiter;\n private pvtIsPaused: boolean = false;\n private pvtTickInProgress: boolean = false;\n private pvtExitReject: ((e: unknown) => void) | null = null;\n private pvtReady!: Waiter;\n private pvtResolveReady!: () => void;\n\n constructor(\n fn: AsyncProcessFn<Args, State, InMessage, OutMessage>,\n pname: string,\n toParent: ProcessMessageCb<WithSender<OutMessage>> | undefined,\n ) {\n this.pgenerator = fn;\n this.pname = pname;\n this.toParent = toParent || (noop as ProcessMessageCb<WithSender<OutMessage>>);\n this.id = Symbol(pname);\n this.state = null;\n this.exitWaiter = makeWaiter();\n this.pvtReady = makeWaiter();\n this.pvtResolveReady = this.pvtReady.resolve;\n }\n\n /** Promise that resolves once the initial state is available. */\n ready(): Promise<void> {\n return this.pvtReady.promise;\n }\n\n // ---- lifecycle ------------------------------------------------------------\n\n /**\n * Kick off the async generator. The first `yield` sets the initial\n * state; for async generators this happens in a microtask.\n */\n start(arg0: Args, parentName?: string | null, parentId?: symbol | null) {\n const selfCtx: SenderInfo = { fromName: this.pname, fromId: this.id };\n\n const ctx: ProcessCtx<Args, State, InMessage, OutMessage> = {\n pname: this.pname,\n id: this.id,\n parentName: parentName ?? null,\n parentId: parentId ?? null,\n fork: this.fork.bind(this),\n forkSync: this.forkSync.bind(this),\n sendSelf: (msg) => {\n this.send([msg, selfCtx]);\n },\n toParent: (msg) => {\n this.toParent([msg, selfCtx] as WithSender<OutMessage>);\n },\n };\n\n this.current = this.pvtWatchExit(ctx, arg0);\n void this.current.next().then((ret: IteratorResult<State | null, void>) => {\n this.state = ret.value ?? null;\n this.pvtResolveReady();\n if (ret.done) {\n this.exitWaiter.resolve();\n return;\n }\n // Advance past the initial yield so the pvtWatchExit generator\n // runs its finally block (EXIT/STOP) and the inner generator\n // enters its dispatch loop.\n const advance: WithSender<InMessage | StopMessage> = [\n { type: \"__ADVANCE__\" } as InMessage,\n { fromName: \"__internal__\", fromId: Symbol(\"__internal__\") } as SenderInfo,\n ];\n this.pvtEatResult(this.current!.next(advance));\n });\n return this;\n }\n\n /** Wrap the user's generator so EXIT/STOP logic fires on completion. */\n private async *pvtWatchExit(\n ctx: ProcessCtx<Args, State, InMessage, OutMessage>,\n arg0: Args,\n ): AsyncProcessGenerator<State, InMessage> {\n try {\n yield* this.pgenerator(ctx, arg0);\n } finally {\n this.toAllChildren({ type: \"STOP\" });\n // ctx.toParent stamps sender info into a WithSender tuple\n ctx.toParent({ type: \"EXIT\" } as unknown as OutMessage);\n }\n }\n\n // ---- fork -----------------------------------------------------------------\n\n fork<ChildArgs, ChildState, ChildIM extends Message, ChildOM extends Message>(\n fn: AsyncProcessFn<ChildArgs, ChildState, ChildIM, ChildOM>,\n pname: string,\n ): (\n args: ChildArgs,\n ) => AsyncProcess<ChildArgs, ChildState, ChildIM, ChildOM> {\n return (args: ChildArgs) => {\n const child = new AsyncProcess<ChildArgs, ChildState, ChildIM, ChildOM>(\n fn,\n pname,\n this.fromChild.bind(this) as unknown as ProcessMessageCb<\n WithSender<ChildOM>\n >,\n );\n this.children.push(\n child as unknown as AsyncProcess<unknown, unknown, Message, Message>,\n );\n child.start(args, this.pname, this.id);\n return child;\n };\n }\n\n forkSync<\n ChildArgs,\n ChildState,\n ChildIM extends Message,\n ChildOM extends Message,\n >(\n fn: ProcessFn<ChildArgs, ChildState, ChildIM, ChildOM>,\n pname: string,\n ): (\n args: ChildArgs,\n ) => AsyncProcess<ChildArgs, ChildState, ChildIM, ChildOM> {\n return this.fork(asyncify(fn), pname);\n }\n\n // ---- message processing ---------------------------------------------------\n\n protected async pvtTick(): Promise<void> {\n if (!this.current || this.pvtTickInProgress) return;\n\n this.pvtTickInProgress = true;\n try {\n let msgAndSender: WithSender<InMessage | StopMessage> | undefined;\n let ret: IteratorResult<State | null, void> | null = null;\n while ((msgAndSender = this.buffer.shift()) !== undefined) {\n ret = await this.pvtSafeNext(msgAndSender);\n if (!ret || ret.done) break;\n }\n this.notify();\n this.pvtEatResult(ret);\n } catch (e) {\n this.pvtExitReject?.(e);\n this.pvtExitReject = null;\n } finally {\n this.pvtTickInProgress = false;\n }\n }\n\n /** Call `.next()` and redirect unhandled rejections. */\n private async pvtSafeNext(\n msgAndSender: WithSender<InMessage | StopMessage>,\n ): Promise<IteratorResult<State | null, void> | null> {\n try {\n return await this.current!.next(msgAndSender);\n } catch (e) {\n this.pvtExitReject?.(e);\n this.pvtExitReject = null;\n return { done: true, value: undefined };\n }\n }\n\n private pvtEatResult(\n ret:\n | IteratorResult<State | null, void>\n | Promise<IteratorResult<State | null, void>>\n | null,\n ): void {\n if (!ret) return;\n Promise.resolve(ret).then((r) => {\n if (r.done) {\n this.exitWaiter.resolve();\n }\n });\n }\n\n /** Broadcast a message to all children. */\n toAllChildren(msg: Message): void {\n const stamp: SenderInfo = { fromName: this.pname, fromId: this.id };\n this.children.forEach((p) => p.send([msg, stamp] as WithSender<Message>));\n }\n\n /** Stamp and enqueue a message from a named sender (external API). */\n send(msg: InMessage | StopMessage, from?: SenderInfo): void;\n /** Enqueue a pre-stamped message (internal: fromChild, toAllChildren). */\n send(msgAndSender: WithSender<InMessage | StopMessage>): void;\n send(msgOrTuple: InMessage | StopMessage | WithSender<InMessage | StopMessage>, from?: SenderInfo): void {\n if ('type' in msgOrTuple) {\n this.buffer.push([msgOrTuple as InMessage | StopMessage, from as SenderInfo]);\n } else {\n this.buffer.push(msgOrTuple as WithSender<InMessage | StopMessage>);\n }\n this.pvtScheduleTick();\n }\n\n /**\n * Synchronously flush the buffer. For sync processes use {@link Process.tick};\n * for async processes this is **not guaranteed** to process everything\n * immediately if reducers contain `await`. Prefer `send()` + `await proc.wait()`.\n */\n tick(): void {\n this.nextTick?.flush();\n this.nextTick = null;\n }\n\n private pvtScheduleTick(): void {\n if (this.pvtIsPaused) return;\n\n this.nextTick?.cancel();\n this.nextTick = defer(() => {\n this.nextTick = null;\n void this.pvtTick();\n });\n }\n\n // ---- subscribers ----------------------------------------------------------\n\n notify(): void {\n this.subscribers.forEach((f) => f());\n }\n\n get isListenedTo(): boolean {\n return this.subscribers.length > 0;\n }\n\n subscribe(f: NotifyFn): () => void {\n this.subscribers.push(f);\n return () => {\n const idx = this.subscribers.indexOf(f);\n if (idx < 0) return;\n this.subscribers.splice(idx, 1);\n };\n }\n\n // ---- pause / resume -------------------------------------------------------\n\n pause(): void {\n this.nextTick?.cancel();\n this.nextTick = null;\n this.pvtIsPaused = true;\n }\n\n resume(): void {\n this.pvtIsPaused = false;\n this.pvtScheduleTick();\n }\n\n // ---- waiting --------------------------------------------------------------\n\n /**\n * Returns a promise that resolves when the generator completes, or\n * rejects if an unhandled error occurs during message processing.\n */\n wait(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.pvtExitReject = reject;\n\n this.exitWaiter.promise.then(\n () => {\n this.pvtExitReject = null;\n resolve();\n },\n (e) => {\n this.pvtExitReject = null;\n reject(e);\n },\n );\n });\n }\n\n // ---- child messages -------------------------------------------------------\n\n /** Relays a child's message to this process. The message already carries\n * sender provenance (stamped by the child's `ctx.toParent` wrapper). */\n private fromChild(msgAndSender: WithSender<InMessage | StopMessage>): void {\n const [msg, sender] = msgAndSender;\n if (msg.type === \"EXIT\") {\n // sender.fromId === child's id (set by child's ctx.toParent wrapper)\n this.children = this.children.filter((p) => p.id !== sender.fromId);\n }\n this.send(msgAndSender);\n }\n}\n\n// ---- spawnAsync -------------------------------------------------------------\n\n/**\n * Spawn a new async process. Accepts both sync and async process\n * functions — sync ones are automatically wrapped with {@link asyncify}.\n */\nexport function spawnAsync<\n Args,\n State,\n InMessage extends Message = Message,\n OutMessage extends Message = ExitMessage,\n>(\n fn: AsyncProcessFn<Args, State, InMessage, OutMessage>,\n pname: string,\n toParent?: ProcessMessageCb<WithSender<OutMessage>>,\n): (args: Args) => AsyncProcess<Args, State, InMessage, OutMessage> {\n return (args: Args) => {\n const proc = new AsyncProcess<Args, State, InMessage, OutMessage>(\n fn,\n pname,\n toParent,\n );\n proc.start(args);\n return proc;\n };\n}\n","import { AsyncProcess } from \"./process.async.js\";\nimport { asyncify } from \"./adapters.js\";\nimport type { Message, WithSender, ExitMessage, ProcessFn } from \"./types.js\";\n\nexport type { Message, ProcessFn, ProcessCtx } from \"./types.js\";\nexport { runDispatch } from \"./util.js\";\n\n/** @deprecated Use {@link spawnAsync} instead. */\nexport function spawn<\n A,\n S,\n IM extends Message = Message,\n OM extends Message = ExitMessage,\n>(\n fn: ProcessFn<A, S, IM, OM>,\n pname: string,\n tp?: (m: WithSender<OM>) => void,\n): (a: A) => Process<A, S, IM, OM> {\n return (a: A) => new Process(fn, pname, tp).start(a) as Process<A, S, IM, OM>;\n}\n\n/** @deprecated Use {@link AsyncProcess} instead. Sync processes are\n * wrapped via asyncify internally; spawnAsync handles both. */\nclass Process<\n A,\n S,\n IM extends Message,\n OM extends Message,\n> extends AsyncProcess<A, S, IM, OM> {\n constructor(\n fn: ProcessFn<A, S, IM, OM>,\n pname: string,\n tp?: (m: WithSender<OM>) => void,\n ) {\n super(asyncify(fn), pname, tp);\n }\n\n start(a: A) {\n super.start(a);\n return this;\n }\n tick(): Promise<void> {\n return super.pvtTick();\n }\n}\n\nexport { Process };\n","// ── defineActor — high-level actor wrapper ───────────────────────────────────\n//\n// Compiles a declarative config into an AsyncProcessFn. Built on top of\n// the existing runDispatchAsync / spawnAsync primitives.\n//\n// See docs/proposals/define-actor-proposal.md for the full design.\n\nimport { runDispatchAsync, spawnAsync } from \"./process.async.js\";\nimport type {\n WithSender,\n AsyncProcessFn,\n Message,\n ExitMessage,\n ProcessCtx,\n} from \"./types.js\";\nimport type { AsyncProcess } from \"./process.async.js\";\nimport type {\n ActorDefinition,\n ActorConfig,\n ActorContext,\n MethodOptions,\n ActorMessages,\n HandlerOptions,\n HandlerFn,\n} from \"./actor-types.js\";\nimport { HookRegistry, STOP_SENTINEL } from \"./hooks.js\";\nimport type { ActorPlugin, PluginTransform } from \"./hooks.js\";\nimport type { HookResult, OnMessageHook, OnEmitHook, OnChildExitHook, OnStartHook, OnStopRequestedHook, OnEndHook, OnErrorHook } from \"./hooks.js\";\n\n// ═══════════════════════════════════════════════════════════════════════════════\n// Implementation\n// ═══════════════════════════════════════════════════════════════════════════════\n\nexport function defineMessages<\n OutMsg extends Message = Message,\n>(): ActorMessages<OutMsg> {\n return undefined as unknown as ActorMessages<OutMsg>;\n}\n\nexport function defineActor<\n Args,\n InternalState,\n ExposedState,\n InMsg extends Message,\n OutMsg extends Message,\n Methods extends MethodOptions,\n Handlers extends HandlerOptions<InMsg>,\n ReflectionMethods = {},\n>(\n config: ActorConfig<\n Args,\n InternalState,\n ExposedState,\n InMsg,\n OutMsg,\n Methods,\n Handlers,\n ReflectionMethods\n >,\n): ActorDefinition<Args, ExposedState, InMsg, OutMsg, Handlers, ReflectionMethods> {\n // ── internal helpers ──────────────────────────────────────────────\n\n /** Extract pvtResolvedPlugins from an async process function\n * (set by the parent's fork() for plugin inheritance). */\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const getResolvedPlugins = (f: unknown): ActorPlugin[] | undefined => {\n const withPlugins = f as { pvtResolvedPlugins?: ActorPlugin[] };\n return withPlugins.pvtResolvedPlugins;\n };\n\n /** Stash resolved plugins on a function for the child to read. */\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const stashPlugins = (f: unknown, plugs: ActorPlugin[]): void => {\n (f as { pvtResolvedPlugins?: ActorPlugin[] }).pvtResolvedPlugins = plugs;\n };\n\n // Internal generator receives WithSender<InMsg> so sender identity\n // is directly accessible in the dispatch loop with zero casts.\n // Promise that resolves with the ActorContext after yield.\n // Reflection methods await this so they get the real `this` context.\n const actorCtxMap = new Map<symbol, ActorContext<Args, InternalState, InMsg, OutMsg, Methods, Handlers>>();\n const pvtRegisteredReflection = new Map<symbol, Map<string, Function>>();\n\n const fn = async function* (\n ctx: ProcessCtx<Args, ExposedState, InMsg, OutMsg>,\n args: Args,\n ): AsyncGenerator<ExposedState | null, void, WithSender<InMsg>> {\n let done = false;\n let exitReason: unknown;\n let stopRequested = false;\n\n // State resolved below after self is built.\n let rawState: InternalState = undefined as unknown as InternalState;\n let exposedState: ExposedState = undefined as unknown as ExposedState;\n\n // ── hooks ──────────────────────────────────────────────────────────\n const pvtHooks = new HookRegistry<any, any, any>();\n\n const decorated = new Map<string, unknown>();\n\n // Build the actor context.\n const self: ActorContext<\n Args,\n InternalState,\n InMsg,\n OutMsg,\n Methods,\n Handlers\n > = {\n ctx: ctx as ProcessCtx<Args, InternalState, InMsg, OutMsg>,\n ...((config.methods || {}) as Methods),\n state: rawState,\n name: ctx.pname,\n id: ctx.id,\n emit(msg) {\n // Fire onEmit hooks before the actual emit.\n for (const hookFn of pvtHooks.onEmit) {\n try { hookFn(msg); } catch { /* ignore — errors bubble through onError */ }\n }\n ctx.toParent(msg);\n },\n agreeToStop() {\n exitReason = \"stopped\";\n done = true;\n },\n exit(reason) {\n exitReason = reason;\n done = true;\n },\n $child: {},\n // ── registration API ─────────────────────────────────────\n hooks: {\n onMessage: (h: OnMessageHook<any>) => { pvtHooks.onMessage.push(h); },\n onEmit: (h: OnEmitHook<any>) => { pvtHooks.onEmit.push(h); },\n onChildExit: (h: OnChildExitHook) => { pvtHooks.onChildExit.push(h); },\n onStart: (h: OnStartHook<unknown>) => { pvtHooks.onStart.push(h); },\n onStopRequested: (h: OnStopRequestedHook) => { pvtHooks.onStopRequested.push(h); },\n onError: (h: OnErrorHook) => { pvtHooks.onError.push(h); },\n onEnd: (h: OnEndHook) => { pvtHooks.onEnd.push(h); },\n },\n reflection: {\n register(name: string, method: (this: ActorContext<unknown, unknown, Message, Message, MethodOptions, HandlerOptions<Message>>) => unknown) {\n let methods = pvtRegisteredReflection.get(ctx.id);\n if (!methods) {\n methods = new Map();\n pvtRegisteredReflection.set(ctx.id, methods);\n }\n methods.set(`${currentPluginName}.${name}`, method as Function);\n },\n },\n decorate: (key: string, value: unknown) => {\n if (key in self) throw new Error(`decorate: key \"${key}\" conflicts with built-in`);\n if (decorated.has(key)) throw new Error(`decorate: key \"${key}\" already decorated`);\n decorated.set(key, value);\n },\n fork(childFn, name, childArgs) {\n // Unwrap ActorDefinition, derive name.\n const resolved = typeof childFn === \"function\" ? childFn : childFn.fn;\n const childDef =\n typeof childFn === \"object\" ? childFn : null;\n const childName = name\n ?? childDef?.name\n ?? `child-${Object.keys(self.$child).length}`;\n\n // ── plugin inheritance ───────────────────────────────────────\n // Resolve parent's installed plugins.\n const parentPlugs: ActorPlugin[] = config.plugins\n ? (typeof config.plugins === \"function\" ? config.plugins([]) : config.plugins)\n : [];\n\n // Merge with child's raw config.\n const childRaw: ActorPlugin[] | PluginTransform | undefined = (childDef as { pvtPluginsRaw?: ActorPlugin[] | PluginTransform })?.pvtPluginsRaw;\n let childPlugs: ActorPlugin[];\n if (!childRaw) {\n childPlugs = [...parentPlugs];\n } else if (Array.isArray(childRaw)) {\n childPlugs = [...childRaw];\n } else {\n childPlugs = childRaw(parentPlugs);\n }\n\n // Stash resolved list on the child's config before fork.\n stashPlugins(resolved, childPlugs);\n\n // Build tree-prefixed name: parent:child\n const treeName = `${ctx.pname}:${childName}`;\n const child = ctx.fork(resolved, treeName)(childArgs!);\n // Store under the resolved name for $child lookup and EXIT matching.\n self.$child[child.pname] = child as unknown as AsyncProcess<\n unknown,\n unknown,\n Message,\n Message\n >;\n return child;\n },\n \n };\n actorCtxMap.set(ctx.id, self);\n\n // ── install plugins ──────────────────────────────────────────────\n // On child actors, pvtResolvedPlugins is set by the parent's fork().\n // On root actors, use config.plugins directly.\n const resolvedPlugs = getResolvedPlugins(fn)\n ?? (config.plugins\n ? (typeof config.plugins === \"function\" ? config.plugins([]) : config.plugins)\n : []);\n\n let currentPluginName: string | null = null;\n for (const p of resolvedPlugs) {\n let pvtErr: unknown = null;\n currentPluginName = p.name;\n try {\n await p.install(self as unknown as ActorContext<unknown, unknown, Message, Message, MethodOptions, HandlerOptions<Message>>);\n } catch (e) {\n pvtErr = e;\n }\n // Also catch sync throws from non-async install functions.\n if (pvtErr) {\n console.error(`[${ctx.pname}] plugin \"${p.name}\" install failed:`, pvtErr);\n }\n }\n\n // ── register config.hooks (after plugins, so plugins fire first) ─\n if (config.hooks) {\n const h = config.hooks;\n if (h.onStart) pvtHooks.onStart.push((state) => h.onStart!.call(self, state));\n if (h.onMessage) pvtHooks.onMessage.push((msg, sender) => h.onMessage!.call(self, msg, sender));\n if (h.onEmit) pvtHooks.onEmit.push((msg) => h.onEmit!.call(self, msg));\n if (h.onChildExit) pvtHooks.onChildExit.push((name) => h.onChildExit!.call(self, name));\n if (h.onStopRequested) pvtHooks.onStopRequested.push(() => h.onStopRequested!.call(self));\n if (h.onEnd) pvtHooks.onEnd.push((reason) => h.onEnd!.call(self, reason));\n if (h.onError) pvtHooks.onError.push((err) => h.onError!.call(self, err));\n }\n\n // ── merge decorated properties onto self ───────────────────────\n for (const [key, value] of decorated) {\n (self as Record<string, unknown>)[key] = value;\n }\n\n // ── resolve state (setup or initialState) ────────────────────\n if (config.setup) {\n rawState = await config.setup.call(self, args);\n } else if (typeof config.initialState === \"function\") {\n rawState = (config.initialState as (a: Args, ictx: typeof ctx) => InternalState)(args, ctx);\n } else if (config.initialState !== undefined) {\n rawState = config.initialState;\n } else {\n throw new Error(\"ActorConfig: setup() or initialState is required\");\n }\n (self as { state: unknown }).state = rawState;\n exposedState = config.expose\n ? config.expose(rawState)\n : (rawState as unknown as ExposedState);\n\n // Call onStart with args (legacy — use setup() for new code).\n if (config.onStart) {\n await config.onStart.call(self, args);\n exposedState = config.expose\n ? config.expose(rawState)\n : (rawState as unknown as ExposedState);\n }\n\n // Fire hooks.onStart.\n for (const hookFn of pvtHooks.onStart) {\n try { await hookFn(exposedState); } catch {}\n }\n\n yield exposedState;\n\n\n // ── afterStart ──────────────────────────────────────────────────\n if (config.afterStart) { await config.afterStart.call(self); }\n\n // Dispatch loop..\n yield* runDispatchAsync<WithSender<InMsg | ExitMessage>>(\n ctx.pname,\n async (stamped) => {\n const [msg, sender] = stamped;\n\n // ── Built-in STOP handling ──────────────────────────────────\n if (msg.type === \"STOP\") {\n for (const hookFn of pvtHooks.onStopRequested) {\n try { await hookFn(); } catch {}\n }\n if (config.onStopRequested) {\n await config.onStopRequested.call(self);\n if (!done) {\n stopRequested = true;\n }\n } else {\n // Default: agree immediately.\n exitReason = \"stopped\";\n done = true;\n }\n return;\n }\n\n // ── Re-offer deferred STOP ──────────────────────────────────\n if (stopRequested && !done) {\n if (config.onStopRequested) {\n await config.onStopRequested.call(self);\n if (!done) {\n stopRequested = true;\n }\n }\n }\n\n // ── Built-in EXIT handling ──────────────────────────────────\n if (msg.type === \"EXIT\") {\n const childName = sender.fromName;\n\n if (childName && self.$child[childName]) {\n // Recognized child — consume EXIT here.\n delete self.$child[childName];\n }\n for (const hookFn of pvtHooks.onChildExit) {\n try { await hookFn(childName); } catch {}\n }\n if (config.onChildExit) {\n await config.onChildExit.call(self, childName, msg as ExitMessage);\n }\n // Unrecognized EXIT — fall through to handlers/onUnhandled.\n }\n\n // ── onMessage hooks ────────────────────────────────────────\n let hookStopped = false;\n if (msg.type !== \"STOP\" && msg.type !== \"EXIT\") {\n for (const hookFn of pvtHooks.onMessage) {\n try {\n const result: HookResult = await hookFn(msg, sender);\n if (result === STOP_SENTINEL) { hookStopped = true; break; }\n } catch (e) {\n // Error in hook: fire onError hooks, then continue.\n for (const errFn of pvtHooks.onError) {\n try { errFn(e); } catch {}\n }\n }\n }\n }\n\n // ── Named handlers ──────────────────────────────────────────\n if (msg.type !== \"STOP\" && !hookStopped) {\n const handler = config.handlers[\n msg.type as keyof Handlers\n ] as HandlerFn<InMsg>;\n if (handler) {\n try {\n await handler.call(self, msg as InMsg, sender);\n } catch (e) {\n for (const hookFn of pvtHooks.onError) {\n try { hookFn(e); } catch {}\n }\n throw e; // rethrow to trigger exit\n }\n } else if (config.onUnhandled) {\n try {\n await config.onUnhandled.call(self, msg as InMsg, sender);\n } catch (e) {\n for (const hookFn of pvtHooks.onError) {\n try { hookFn(e); } catch {}\n }\n throw e; // rethrow to trigger exit\n }\n }\n // No onUnhandled: silently drop.\n }\n\n if (done) return;\n },\n () => done,\n );\n\n // Fire hooks.onEnd before the actor's onEnd.\n for (const hookFn of pvtHooks.onEnd) {\n try { await hookFn(exitReason ?? \"done\"); } catch {}\n }\n\n // Call onEnd.\n if (config.onEnd) {\n await config.onEnd.call(self, exitReason ?? \"done\");\n }\n actorCtxMap.delete(ctx.id);\n pvtRegisteredReflection.delete(ctx.id);\n };\n\n type ReflectableProcess = { id: symbol; $reflection: Record<string, Function> };\n\n function attachReflection(proc: ReflectableProcess): void {\n const merged = new Map<string, Function>();\n if (config.$reflectionMethods) {\n for (const [key, method] of Object.entries(config.$reflectionMethods)) {\n merged.set(key, method as Function);\n }\n }\n const pluginMethods = pvtRegisteredReflection.get(proc.id);\n if (pluginMethods) {\n for (const [key, method] of pluginMethods) {\n merged.set(key, method);\n }\n }\n const refl = proc.$reflection as Record<string, Function>;\n for (const [key, method] of merged) {\n refl[key] = async (...methodArgs: unknown[]) => {\n return method.call(actorCtxMap.get(proc.id)!, ...methodArgs);\n };\n }\n }\n\n return {\n fn: fn as AsyncProcessFn<Args, ExposedState, InMsg, OutMsg>,\n name: config.name,\n pvtPluginsRaw: config.plugins,\n config: config as unknown as ActorConfig<\n Args,\n InternalState,\n ExposedState,\n InMsg,\n OutMsg,\n {},\n Handlers\n >,\n spawn(args: Args) {\n const proc = spawnAsync(\n fn as AsyncProcessFn<Args, ExposedState, InMsg, OutMsg>,\n config.name ?? \"actor\",\n )(args);\n attachReflection(proc);\n return proc as AsyncProcess<Args, ExposedState, InMsg, OutMsg, ReflectionMethods>;\n },\n spawnAsChild(\n ctx: ProcessCtx<any, any, any, any>,\n args: Args,\n name?: string,\n ) {\n const proc = ctx.fork(\n fn as AsyncProcessFn<Args, ExposedState, InMsg, OutMsg>,\n name ?? config.name ?? 'child',\n )(args);\n attachReflection(proc);\n return proc as AsyncProcess<Args, ExposedState, InMsg, OutMsg, ReflectionMethods>;\n },\n };\n}\n","/**\n * Posipaki — Erlang-inspired lightweight actor processes built on\n * generator functions. Processes communicate via message-passing,\n * can fork children, and expose their state reactively.\n *\n * @module\n */\n\nimport { Process, spawn } from \"./process.js\";\nimport { runDispatch } from \"./util.js\";\nimport { AsyncProcess, spawnAsync, runDispatchAsync } from \"./process.async.js\";\nimport { asyncify } from \"./adapters.js\";\n\nexport { Process, spawn, runDispatch };\nexport { AsyncProcess, spawnAsync, runDispatchAsync, asyncify };\n\nexport type {\n Message,\n WithSender,\n WithoutSender,\n ExitMessage,\n StopMessage,\n ProcessFn,\n ProcessCtx,\n AsyncProcessFn,\n PipeState,\n SupervisorState,\n SenderOrigin,\n SenderInfo,\n} from \"./types.js\";\n\nexport { defineActor, defineMessages } from \"./define-actor.js\";\nexport type {\n ActorDefinition,\n ActorConfig,\n ActorContext,\n MethodOptions,\n HandlerOptions,\n HandlerFn,\n} from \"./actor-types.js\";\n\n// ── hooks ─────────────────────────────────────────────────────────────────\n\nexport { stopPropagation, HookRegistry } from \"./hooks.js\";\nexport type {\n HookResult,\n OnStartHook,\n OnMessageHook,\n OnEmitHook,\n OnChildExitHook,\n OnStopRequestedHook,\n OnEndHook,\n OnErrorHook,\n ActorPlugin,\n ActorDecorated,\n PluginTransform,\n} from \"./hooks.js\";\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { a as ProcessCtx, d as WithSender, n as ExitMessage, o as ProcessFn } from "./types-C6plZEPj.js";
2
- import { t as Process } from "./process-oAztLPCm.js";
1
+ import { a as ProcessCtx, d as WithSender, n as ExitMessage, o as ProcessFn } from "./types-BLIFntvm.js";
2
+ import { t as Process } from "./process-Bf9HTr0m.js";
3
3
 
4
4
  //#region src/supervisor.d.ts
5
5
  type SupMsg = ExitMessage | RunMsg | StopMsg | ErrorMsg | OkMsg;
@@ -17,7 +17,9 @@ type ProcessMessageCb$1<M> = (msg: M) => void;
17
17
  * in-flight, new messages are buffered and processed when the current
18
18
  * tick completes.
19
19
  */
20
- declare class AsyncProcess<Args, State, InMessage extends Message, OutMessage extends Message> {
20
+ declare class AsyncProcess<Args, State, InMessage extends Message, OutMessage extends Message, ReflectionMethods = {}> {
21
+ /** Reflection methods. Empty by default — defineActor fills in configured methods. */
22
+ $reflection: ReflectionMethods;
21
23
  pgenerator: AsyncProcessFn<Args, State, InMessage, OutMessage>;
22
24
  pname: string;
23
25
  /** Called for every message sent via `ctx.toParent`. Receives `WithSender<OutMessage>`. */
@@ -125,15 +127,7 @@ type ProcessCtx<Args, State, IM extends Message, OM extends Message> = {
125
127
  parentName: string | null;
126
128
  parentId: symbol | null;
127
129
  sendSelf: (msg: IM | StopMessage) => void;
128
- toParent: ProcessMessageCb<OM>; /** Register an onMessage hook. Return stopPropagation() to short-circuit. */
129
- onMessage?: (fn: (msg: IM, sender: SenderInfo) => void | Promise<void> | symbol) => void; /** Register an onEmit hook. */
130
- onEmit?: (fn: (msg: OM) => void) => void; /** Register an onChildExit hook. */
131
- onChildExit?: (fn: (name: string) => void | Promise<void>) => void; /** Register an onStart hook. */
132
- onStart?: (fn: (state: State) => void | Promise<void>) => void; /** Register an onStopRequested hook. */
133
- onStopRequested?: (fn: () => void | Promise<void>) => void; /** Register an onError hook. */
134
- onError?: (fn: (err: unknown) => void) => void; /** Register an onEnd hook. Fires before the process exits. */
135
- onEnd?: (fn: (reason: unknown) => void | Promise<void>) => void; /** Register a decorated property. Throws if key conflicts. */
136
- decorate?: (key: string, value: unknown) => void;
130
+ toParent: ProcessMessageCb<OM>;
137
131
  } & Pick<AsyncProcess<Args, State, IM, OM>, "fork" | "forkSync">;
138
132
  /** State yielded by the pipe process. */
139
133
  interface PipeState<Params, Result> {
@@ -148,4 +142,4 @@ interface SupervisorState {
148
142
  }
149
143
  //#endregion
150
144
  export { ProcessCtx as a, SenderOrigin as c, WithSender as d, WithoutSender as f, spawnAsync as h, PipeState as i, StopMessage as l, runDispatchAsync as m, ExitMessage as n, ProcessFn as o, AsyncProcess as p, Message as r, SenderInfo as s, AsyncProcessFn as t, SupervisorState as u };
151
- //# sourceMappingURL=types-C6plZEPj.d.ts.map
145
+ //# sourceMappingURL=types-BLIFntvm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-BLIFntvm.d.ts","names":[],"sources":["../src/process.async.ts","../src/types.ts"],"mappings":"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"}
package/dist/xfetch.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as ProcessCtx, d as WithSender, n as ExitMessage } from "./types-C6plZEPj.js";
2
- import { t as Process } from "./process-oAztLPCm.js";
1
+ import { a as ProcessCtx, d as WithSender, n as ExitMessage } from "./types-BLIFntvm.js";
2
+ import { t as Process } from "./process-Bf9HTr0m.js";
3
3
 
4
4
  //#region src/xfetch.d.ts
5
5
  /** State of an in-flight or completed fetch. */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "posipaki",
4
- "version": "0.14.0",
4
+ "version": "0.16.0",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "files": [
@@ -1 +0,0 @@
1
- {"version":3,"file":"actor-types-B4Yn1k1C.d.ts","names":[],"sources":["../src/actor-types.ts"],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import { a as ProcessCtx, r as Message, s as SenderInfo } from "./types-C6plZEPj.js";
2
-
3
- //#region src/hooks.d.ts
4
- /** Returned by onMessage hooks to prevent further dispatch. */
5
- declare const STOP_SENTINEL: unique symbol;
6
- /** Type-safe sentinel for short-circuiting onMessage hooks. */
7
- declare const stopPropagation: () => typeof STOP_SENTINEL;
8
- /** Return type of onMessage hooks: void (continue) or sentinel (stop). */
9
- type HookResult = void | typeof STOP_SENTINEL;
10
- type OnStartHook<State> = (state: State) => void | Promise<void>;
11
- type OnMessageHook<InMsg extends Message> = (msg: InMsg, sender: SenderInfo) => HookResult | Promise<HookResult>;
12
- type OnEmitHook<OutMsg extends Message> = (msg: OutMsg) => void;
13
- type OnChildExitHook = (name: string) => void | Promise<void>;
14
- type OnStopRequestedHook = () => void | Promise<void>;
15
- type OnEndHook = (reason: unknown) => void | Promise<void>;
16
- type OnErrorHook = (err: unknown) => void;
17
- declare class HookRegistry<State, InMsg extends Message, OutMsg extends Message> {
18
- onStart: Array<OnStartHook<State>>;
19
- onMessage: Array<OnMessageHook<InMsg>>;
20
- onEmit: Array<OnEmitHook<OutMsg>>;
21
- onChildExit: Array<OnChildExitHook>;
22
- onStopRequested: Array<OnStopRequestedHook>;
23
- onEnd: Array<OnEndHook>;
24
- onError: Array<OnErrorHook>;
25
- }
26
- /** A reusable unit of actor behaviour, installed at fork time. */
27
- interface ActorPlugin<InMsg extends Message = Message, OutMsg extends Message = Message, State = unknown> {
28
- name: string;
29
- install(ctx: ProcessCtx<unknown, State, InMsg, OutMsg>): void | Promise<void>;
30
- }
31
- /** Transform parent plugins into child plugins. */
32
- type PluginTransform = (parentPlugins: ActorPlugin[]) => ActorPlugin[];
33
- /**
34
- * Interface that plugins can augment via declaration merging.
35
- * Plugins ship a .d.ts that adds properties to this interface,
36
- * making them available on `this` in handlers and methods.
37
- *
38
- * Example (in a plugin's .d.ts):
39
- * declare module 'posipaki' {
40
- * interface ActorDecorated {
41
- * log: Logger;
42
- * }
43
- * }
44
- */
45
- interface ActorDecorated {}
46
- //#endregion
47
- export { OnChildExitHook as a, OnErrorHook as c, OnStopRequestedHook as d, PluginTransform as f, HookResult as i, OnMessageHook as l, stopPropagation as m, ActorPlugin as n, OnEmitHook as o, STOP_SENTINEL as p, HookRegistry as r, OnEndHook as s, ActorDecorated as t, OnStartHook as u };
48
- //# sourceMappingURL=hooks-BdNEs0DD.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks-BdNEs0DD.d.ts","names":[],"sources":["../src/hooks.ts"],"mappings":";;;;cAWa,aAAA;AAAb;AAAA,cAGa,eAAA,eAA6B,aAA8B;;KAG5D,UAAA,iBAA2B,aAAa;AAAA,KAIxC,WAAA,WAAsB,KAAA,EAAO,KAAA,YAAiB,OAAO;AAAA,KACrD,aAAA,eAA4B,OAAA,KAAY,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,UAAA,KAAe,UAAA,GAAa,OAAA,CAAQ,UAAA;AAAA,KAChG,UAAA,gBAA0B,OAAA,KAAY,GAAA,EAAK,MAAM;AAAA,KACjD,eAAA,IAAmB,IAAA,oBAAwB,OAAO;AAAA,KAClD,mBAAA,gBAAmC,OAAO;AAAA,KAC1C,SAAA,IAAa,MAAA,qBAA2B,OAAO;AAAA,KAC/C,WAAA,IAAe,GAAY;AAAA,cAI1B,YAAA,sBAAkC,OAAA,iBAAwB,OAAA;EACrE,OAAA,EAAS,KAAA,CAAM,WAAA,CAAY,KAAA;EAC3B,SAAA,EAAW,KAAA,CAAM,aAAA,CAAc,KAAA;EAC/B,MAAA,EAAQ,KAAA,CAAM,UAAA,CAAW,MAAA;EACzB,WAAA,EAAa,KAAA,CAAM,eAAA;EACnB,eAAA,EAAiB,KAAA,CAAM,mBAAA;EACvB,KAAA,EAAO,KAAA,CAAM,SAAA;EACb,OAAA,EAAS,KAAA,CAAM,WAAA;AAAA;;UAOA,WAAA,eACD,OAAA,GAAU,OAAA,iBACT,OAAA,GAAU,OAAA;EAGzB,IAAA;EACA,OAAA,CAAQ,GAAA,EAAK,UAAA,UAAoB,KAAA,EAAO,KAAA,EAAO,MAAA,WAAiB,OAAA;AAAA;AA7BlE;AAAA,KAiCY,eAAA,IAAmB,aAAA,EAAe,WAAA,OAAkB,WAAW;;;;;;;;;;;;;UAgB1D,cAAA"}
package/dist/hooks.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.js","names":[],"sources":["../src/hooks.ts"],"sourcesContent":["// ── Lifecycle Hooks ──────────────────────────────────────────────────────\n//\n// Extends ProcessCtx and defineActor with observable lifecycle hooks.\n// Hooks are additive — multiple callbacks can register for the same hook\n// point, and they fire in registration order.\n\nimport type { Message, SenderInfo, ProcessCtx } from './types.js';\n\n// ── stop propagation sentinel ────────────────────────────────────────────\n\n/** Returned by onMessage hooks to prevent further dispatch. */\nexport const STOP_SENTINEL = Symbol('posipaki.stopPropagation');\n\n/** Type-safe sentinel for short-circuiting onMessage hooks. */\nexport const stopPropagation = (): typeof STOP_SENTINEL => STOP_SENTINEL;\n\n/** Return type of onMessage hooks: void (continue) or sentinel (stop). */\nexport type HookResult = void | typeof STOP_SENTINEL;\n\n// ── hook function types ──────────────────────────────────────────────────\n\nexport type OnStartHook<State> = (state: State) => void | Promise<void>;\nexport type OnMessageHook<InMsg extends Message> = (msg: InMsg, sender: SenderInfo) => HookResult | Promise<HookResult>;\nexport type OnEmitHook<OutMsg extends Message> = (msg: OutMsg) => void;\nexport type OnChildExitHook = (name: string) => void | Promise<void>;\nexport type OnStopRequestedHook = () => void | Promise<void>;\nexport type OnEndHook = (reason: unknown) => void | Promise<void>;\nexport type OnErrorHook = (err: unknown) => void;\n\n// ── hook registry ────────────────────────────────────────────────────────\n\nexport class HookRegistry<State, InMsg extends Message, OutMsg extends Message> {\n onStart: Array<OnStartHook<State>> = [];\n onMessage: Array<OnMessageHook<InMsg>> = [];\n onEmit: Array<OnEmitHook<OutMsg>> = [];\n onChildExit: Array<OnChildExitHook> = [];\n onStopRequested: Array<OnStopRequestedHook> = [];\n onEnd: Array<OnEndHook> = [];\n onError: Array<OnErrorHook> = [];\n}\n\n// ── plugin types ─────────────────────────────────────────────────────────\n\n\n/** A reusable unit of actor behaviour, installed at fork time. */\nexport interface ActorPlugin<\n InMsg extends Message = Message,\n OutMsg extends Message = Message,\n State = unknown,\n> {\n name: string;\n install(ctx: ProcessCtx<unknown, State, InMsg, OutMsg>): void | Promise<void>;\n}\n\n/** Transform parent plugins into child plugins. */\nexport type PluginTransform = (parentPlugins: ActorPlugin[]) => ActorPlugin[];\n\n// ── type augmentation (Fastify-style) ────────────────────────────────────\n\n/**\n * Interface that plugins can augment via declaration merging.\n * Plugins ship a .d.ts that adds properties to this interface,\n * making them available on `this` in handlers and methods.\n *\n * Example (in a plugin's .d.ts):\n * declare module 'posipaki' {\n * interface ActorDecorated {\n * log: Logger;\n * }\n * }\n */\nexport interface ActorDecorated {}\n"],"mappings":";;AAWA,MAAa,gBAAgB,OAAO,0BAA0B;;AAG9D,MAAa,wBAA8C;AAiB3D,IAAa,eAAb,MAAgF;;iBACzC,CAAC;mBACG,CAAC;gBACN,CAAC;qBACC,CAAC;yBACO,CAAC;eACrB,CAAC;iBACG,CAAC;;AACjC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"src-CqzaKQBZ.js","names":["withPlugins"],"sources":["../src/adapters.ts","../src/process.async.ts","../src/process.ts","../src/define-actor.ts","../src/index.ts"],"sourcesContent":["import type { ProcessFn, AsyncProcessFn, Message } from \"./types.js\"\n\nexport function asyncify<A, S, IM extends Message, OM extends Message>(\n fn: ProcessFn<A, S, IM, OM>,\n): AsyncProcessFn<A, S, IM, OM> {\n return async function* (ctx, args) {\n yield* fn(ctx, args) as any\n }\n}\n","import { defer, makeWaiter, debugLog } from \"./util.js\";\nimport type { DeferredCall, Waiter } from \"./util.js\";\nimport type {\n Message,\n WithSender,\n SenderInfo,\n ExitMessage,\n StopMessage,\n ProcessCtx,\n AsyncProcessFn,\n ProcessFn,\n} from \"./types.js\";\nimport { asyncify } from \"./adapters.js\";\n\n// ---- types ------------------------------------------------------------------\n\n/** An async iterator over process state. Receives `WithSender<InMessage | StopMessage>`. */\ntype AsyncProcessGenerator<ProcessState, InMessage extends Message> =\n AsyncGenerator<ProcessState | null, void, WithSender<InMessage | StopMessage>>;\n\ntype NotifyFn = () => void;\n\n// ---- runDispatchAsync -------------------------------------------------------\n\ntype AsyncReducer<M> = (msg: M) => Promise<void>;\ntype ReadyFn = () => boolean;\n\n/**\n * Async equivalent of `runDispatch`. Loops, yielding `null` and feeding\n * each incoming message to an `async` reducer. Exits when `readyFn()`\n * returns true.\n */\nexport async function* runDispatchAsync<M>(\n name: string,\n fn: AsyncReducer<M>,\n readyFn: ReadyFn = () => false,\n debugLevel = false,\n): AsyncGenerator<null, void, M> {\n let msg: M;\n while (!readyFn()) {\n msg = yield null;\n debugLog(debugLevel, \"msg\", name, \" <- \", msg);\n await fn(msg);\n }\n}\n\n// ---- AsyncProcess -----------------------------------------------------------\n\ntype ProcessMessageCb<M> = (msg: M) => void;\n\nconst noop = () => null;\n\n/**\n * A process driven by an async generator. Functionally identical to\n * {@link Process} but supports `await` inside reducers.\n *\n * Messages are processed **one at a time** — if a tick is already\n * in-flight, new messages are buffered and processed when the current\n * tick completes.\n */\nexport class AsyncProcess<\n Args,\n State,\n InMessage extends Message,\n OutMessage extends Message,\n> {\n pgenerator: AsyncProcessFn<Args, State, InMessage, OutMessage>;\n pname: string;\n /** Called for every message sent via `ctx.toParent`. Receives `WithSender<OutMessage>`. */\n toParent: ProcessMessageCb<WithSender<OutMessage>>;\n id: symbol;\n state: State | null;\n\n private current: AsyncProcessGenerator<State, InMessage> | null = null;\n /** Every buffered message carries sender provenance. */\n private buffer: Array<WithSender<InMessage | StopMessage>> = [];\n private nextTick: DeferredCall | null = null;\n private children: Array<AsyncProcess<unknown, unknown, Message, Message>> =\n [];\n private subscribers: Array<NotifyFn> = [];\n private exitWaiter: Waiter;\n private pvtIsPaused: boolean = false;\n private pvtTickInProgress: boolean = false;\n private pvtExitReject: ((e: unknown) => void) | null = null;\n private pvtReady!: Waiter;\n private pvtResolveReady!: () => void;\n\n constructor(\n fn: AsyncProcessFn<Args, State, InMessage, OutMessage>,\n pname: string,\n toParent: ProcessMessageCb<WithSender<OutMessage>> | undefined,\n ) {\n this.pgenerator = fn;\n this.pname = pname;\n this.toParent = toParent || (noop as ProcessMessageCb<WithSender<OutMessage>>);\n this.id = Symbol(pname);\n this.state = null;\n this.exitWaiter = makeWaiter();\n this.pvtReady = makeWaiter();\n this.pvtResolveReady = this.pvtReady.resolve;\n }\n\n /** Promise that resolves once the initial state is available. */\n ready(): Promise<void> {\n return this.pvtReady.promise;\n }\n\n // ---- lifecycle ------------------------------------------------------------\n\n /**\n * Kick off the async generator. The first `yield` sets the initial\n * state; for async generators this happens in a microtask.\n */\n start(arg0: Args, parentName?: string | null, parentId?: symbol | null) {\n const selfCtx: SenderInfo = { fromName: this.pname, fromId: this.id };\n\n const ctx: ProcessCtx<Args, State, InMessage, OutMessage> = {\n pname: this.pname,\n id: this.id,\n parentName: parentName ?? null,\n parentId: parentId ?? null,\n fork: this.fork.bind(this),\n forkSync: this.forkSync.bind(this),\n sendSelf: (msg) => {\n this.send([msg, selfCtx]);\n },\n toParent: (msg) => {\n this.toParent([msg, selfCtx] as WithSender<OutMessage>);\n },\n };\n\n this.current = this.pvtWatchExit(ctx, arg0);\n void this.current.next().then((ret: IteratorResult<State | null, void>) => {\n this.state = ret.value ?? null;\n this.pvtResolveReady();\n if (ret.done) {\n this.exitWaiter.resolve();\n return;\n }\n // Advance past the initial yield so the pvtWatchExit generator\n // runs its finally block (EXIT/STOP) and the inner generator\n // enters its dispatch loop.\n const advance: WithSender<InMessage | StopMessage> = [\n { type: \"__ADVANCE__\" } as InMessage,\n { fromName: \"__internal__\", fromId: Symbol(\"__internal__\") } as SenderInfo,\n ];\n this.pvtEatResult(this.current!.next(advance));\n });\n return this;\n }\n\n /** Wrap the user's generator so EXIT/STOP logic fires on completion. */\n private async *pvtWatchExit(\n ctx: ProcessCtx<Args, State, InMessage, OutMessage>,\n arg0: Args,\n ): AsyncProcessGenerator<State, InMessage> {\n try {\n yield* this.pgenerator(ctx, arg0);\n } finally {\n this.toAllChildren({ type: \"STOP\" });\n // ctx.toParent stamps sender info into a WithSender tuple\n ctx.toParent({ type: \"EXIT\" } as unknown as OutMessage);\n }\n }\n\n // ---- fork -----------------------------------------------------------------\n\n fork<ChildArgs, ChildState, ChildIM extends Message, ChildOM extends Message>(\n fn: AsyncProcessFn<ChildArgs, ChildState, ChildIM, ChildOM>,\n pname: string,\n ): (\n args: ChildArgs,\n ) => AsyncProcess<ChildArgs, ChildState, ChildIM, ChildOM> {\n return (args: ChildArgs) => {\n const child = new AsyncProcess<ChildArgs, ChildState, ChildIM, ChildOM>(\n fn,\n pname,\n this.fromChild.bind(this) as unknown as ProcessMessageCb<\n WithSender<ChildOM>\n >,\n );\n this.children.push(\n child as unknown as AsyncProcess<unknown, unknown, Message, Message>,\n );\n child.start(args, this.pname, this.id);\n return child;\n };\n }\n\n forkSync<\n ChildArgs,\n ChildState,\n ChildIM extends Message,\n ChildOM extends Message,\n >(\n fn: ProcessFn<ChildArgs, ChildState, ChildIM, ChildOM>,\n pname: string,\n ): (\n args: ChildArgs,\n ) => AsyncProcess<ChildArgs, ChildState, ChildIM, ChildOM> {\n return this.fork(asyncify(fn), pname);\n }\n\n // ---- message processing ---------------------------------------------------\n\n protected async pvtTick(): Promise<void> {\n if (!this.current || this.pvtTickInProgress) return;\n\n this.pvtTickInProgress = true;\n try {\n let msgAndSender: WithSender<InMessage | StopMessage> | undefined;\n let ret: IteratorResult<State | null, void> | null = null;\n while ((msgAndSender = this.buffer.shift()) !== undefined) {\n ret = await this.pvtSafeNext(msgAndSender);\n if (!ret || ret.done) break;\n }\n this.notify();\n this.pvtEatResult(ret);\n } catch (e) {\n this.pvtExitReject?.(e);\n this.pvtExitReject = null;\n } finally {\n this.pvtTickInProgress = false;\n }\n }\n\n /** Call `.next()` and redirect unhandled rejections. */\n private async pvtSafeNext(\n msgAndSender: WithSender<InMessage | StopMessage>,\n ): Promise<IteratorResult<State | null, void> | null> {\n try {\n return await this.current!.next(msgAndSender);\n } catch (e) {\n this.pvtExitReject?.(e);\n this.pvtExitReject = null;\n return { done: true, value: undefined };\n }\n }\n\n private pvtEatResult(\n ret:\n | IteratorResult<State | null, void>\n | Promise<IteratorResult<State | null, void>>\n | null,\n ): void {\n if (!ret) return;\n Promise.resolve(ret).then((r) => {\n if (r.done) {\n this.exitWaiter.resolve();\n }\n });\n }\n\n /** Broadcast a message to all children. */\n toAllChildren(msg: Message): void {\n const stamp: SenderInfo = { fromName: this.pname, fromId: this.id };\n this.children.forEach((p) => p.send([msg, stamp] as WithSender<Message>));\n }\n\n /** Stamp and enqueue a message from a named sender (external API). */\n send(msg: InMessage | StopMessage, from?: SenderInfo): void;\n /** Enqueue a pre-stamped message (internal: fromChild, toAllChildren). */\n send(msgAndSender: WithSender<InMessage | StopMessage>): void;\n send(msgOrTuple: InMessage | StopMessage | WithSender<InMessage | StopMessage>, from?: SenderInfo): void {\n if ('type' in msgOrTuple) {\n this.buffer.push([msgOrTuple as InMessage | StopMessage, from as SenderInfo]);\n } else {\n this.buffer.push(msgOrTuple as WithSender<InMessage | StopMessage>);\n }\n this.pvtScheduleTick();\n }\n\n /**\n * Synchronously flush the buffer. For sync processes use {@link Process.tick};\n * for async processes this is **not guaranteed** to process everything\n * immediately if reducers contain `await`. Prefer `send()` + `await proc.wait()`.\n */\n tick(): void {\n this.nextTick?.flush();\n this.nextTick = null;\n }\n\n private pvtScheduleTick(): void {\n if (this.pvtIsPaused) return;\n\n this.nextTick?.cancel();\n this.nextTick = defer(() => {\n this.nextTick = null;\n void this.pvtTick();\n });\n }\n\n // ---- subscribers ----------------------------------------------------------\n\n notify(): void {\n this.subscribers.forEach((f) => f());\n }\n\n get isListenedTo(): boolean {\n return this.subscribers.length > 0;\n }\n\n subscribe(f: NotifyFn): () => void {\n this.subscribers.push(f);\n return () => {\n const idx = this.subscribers.indexOf(f);\n if (idx < 0) return;\n this.subscribers.splice(idx, 1);\n };\n }\n\n // ---- pause / resume -------------------------------------------------------\n\n pause(): void {\n this.nextTick?.cancel();\n this.nextTick = null;\n this.pvtIsPaused = true;\n }\n\n resume(): void {\n this.pvtIsPaused = false;\n this.pvtScheduleTick();\n }\n\n // ---- waiting --------------------------------------------------------------\n\n /**\n * Returns a promise that resolves when the generator completes, or\n * rejects if an unhandled error occurs during message processing.\n */\n wait(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.pvtExitReject = reject;\n\n this.exitWaiter.promise.then(\n () => {\n this.pvtExitReject = null;\n resolve();\n },\n (e) => {\n this.pvtExitReject = null;\n reject(e);\n },\n );\n });\n }\n\n // ---- child messages -------------------------------------------------------\n\n /** Relays a child's message to this process. The message already carries\n * sender provenance (stamped by the child's `ctx.toParent` wrapper). */\n private fromChild(msgAndSender: WithSender<InMessage | StopMessage>): void {\n const [msg, sender] = msgAndSender;\n if (msg.type === \"EXIT\") {\n // sender.fromId === child's id (set by child's ctx.toParent wrapper)\n this.children = this.children.filter((p) => p.id !== sender.fromId);\n }\n this.send(msgAndSender);\n }\n}\n\n// ---- spawnAsync -------------------------------------------------------------\n\n/**\n * Spawn a new async process. Accepts both sync and async process\n * functions — sync ones are automatically wrapped with {@link asyncify}.\n */\nexport function spawnAsync<\n Args,\n State,\n InMessage extends Message = Message,\n OutMessage extends Message = ExitMessage,\n>(\n fn: AsyncProcessFn<Args, State, InMessage, OutMessage>,\n pname: string,\n toParent?: ProcessMessageCb<WithSender<OutMessage>>,\n): (args: Args) => AsyncProcess<Args, State, InMessage, OutMessage> {\n return (args: Args) => {\n const proc = new AsyncProcess<Args, State, InMessage, OutMessage>(\n fn,\n pname,\n toParent,\n );\n proc.start(args);\n return proc;\n };\n}\n","import { AsyncProcess } from \"./process.async.js\";\nimport { asyncify } from \"./adapters.js\";\nimport type { Message, WithSender, ExitMessage, ProcessFn } from \"./types.js\";\n\nexport type { Message, ProcessFn, ProcessCtx } from \"./types.js\";\nexport { runDispatch } from \"./util.js\";\n\n/** @deprecated Use {@link spawnAsync} instead. */\nexport function spawn<\n A,\n S,\n IM extends Message = Message,\n OM extends Message = ExitMessage,\n>(\n fn: ProcessFn<A, S, IM, OM>,\n pname: string,\n tp?: (m: WithSender<OM>) => void,\n): (a: A) => Process<A, S, IM, OM> {\n return (a: A) => new Process(fn, pname, tp).start(a) as Process<A, S, IM, OM>;\n}\n\n/** @deprecated Use {@link AsyncProcess} instead. Sync processes are\n * wrapped via asyncify internally; spawnAsync handles both. */\nclass Process<\n A,\n S,\n IM extends Message,\n OM extends Message,\n> extends AsyncProcess<A, S, IM, OM> {\n constructor(\n fn: ProcessFn<A, S, IM, OM>,\n pname: string,\n tp?: (m: WithSender<OM>) => void,\n ) {\n super(asyncify(fn), pname, tp);\n }\n\n start(a: A) {\n super.start(a);\n return this;\n }\n tick(): Promise<void> {\n return super.pvtTick();\n }\n}\n\nexport { Process };\n","// ── defineActor — high-level actor wrapper ───────────────────────────────────\n//\n// Compiles a declarative config into an AsyncProcessFn. Built on top of\n// the existing runDispatchAsync / spawnAsync primitives.\n//\n// See docs/proposals/define-actor-proposal.md for the full design.\n\nimport { runDispatchAsync, spawnAsync } from \"./process.async.js\";\nimport type {\n WithSender,\n AsyncProcessFn,\n Message,\n ExitMessage,\n ProcessCtx,\n} from \"./types.js\";\nimport type { AsyncProcess } from \"./process.async.js\";\nimport type {\n ActorDefinition,\n ActorConfig,\n ActorContext,\n MethodOptions,\n ActorMessages,\n HandlerOptions,\n HandlerFn,\n} from \"./actor-types.js\";\nimport { HookRegistry, STOP_SENTINEL } from \"./hooks.js\";\nimport type { ActorPlugin, PluginTransform } from \"./hooks.js\";\nimport type { HookResult, OnMessageHook, OnEmitHook, OnChildExitHook, OnStartHook, OnStopRequestedHook, OnEndHook, OnErrorHook } from \"./hooks.js\";\n\n// ═══════════════════════════════════════════════════════════════════════════════\n// Implementation\n// ═══════════════════════════════════════════════════════════════════════════════\n\nexport function defineMessages<\n OutMsg extends Message = Message,\n>(): ActorMessages<OutMsg> {\n return undefined as unknown as ActorMessages<OutMsg>;\n}\n\nexport function defineActor<\n Args,\n InternalState,\n ExposedState,\n InMsg extends Message,\n OutMsg extends Message,\n Methods extends MethodOptions,\n Handlers extends HandlerOptions<InMsg>,\n>(\n config: ActorConfig<\n Args,\n InternalState,\n ExposedState,\n InMsg,\n OutMsg,\n Methods,\n Handlers\n >,\n): ActorDefinition<Args, ExposedState, InMsg, OutMsg, Handlers> {\n // ── internal helpers ──────────────────────────────────────────────\n\n /** Extract pvtResolvedPlugins from an async process function\n * (set by the parent's fork() for plugin inheritance). */\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const getResolvedPlugins = (f: unknown): ActorPlugin[] | undefined => {\n const withPlugins = f as { pvtResolvedPlugins?: ActorPlugin[] };\n return withPlugins.pvtResolvedPlugins;\n };\n\n /** Stash resolved plugins on a function for the child to read. */\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const stashPlugins = (f: unknown, plugs: ActorPlugin[]): void => {\n (f as { pvtResolvedPlugins?: ActorPlugin[] }).pvtResolvedPlugins = plugs;\n };\n\n // Internal generator receives WithSender<InMsg> so sender identity\n // is directly accessible in the dispatch loop with zero casts.\n const fn = async function* (\n ctx: ProcessCtx<Args, ExposedState, InMsg, OutMsg>,\n args: Args,\n ): AsyncGenerator<ExposedState | null, void, WithSender<InMsg>> {\n let done = false;\n let exitReason: unknown;\n let stopRequested = false;\n\n // State resolved below after self is built.\n let rawState: InternalState = undefined as unknown as InternalState;\n let exposedState: ExposedState = undefined as unknown as ExposedState;\n\n // ── hooks ──────────────────────────────────────────────────────────\n const pvtHooks = new HookRegistry<any, any, any>();\n\n // Build the actor context.\n const self: ActorContext<\n Args,\n InternalState,\n InMsg,\n OutMsg,\n Methods,\n Handlers\n > = {\n ctx: ctx as ProcessCtx<Args, InternalState, InMsg, OutMsg>,\n ...((config.methods || {}) as Methods),\n state: rawState,\n name: ctx.pname,\n id: ctx.id,\n emit(msg) {\n // Fire onEmit hooks before the actual emit.\n for (const hookFn of pvtHooks.onEmit) {\n try { hookFn(msg); } catch { /* ignore — errors bubble through onError */ }\n }\n ctx.toParent(msg);\n },\n agreeToStop() {\n exitReason = \"stopped\";\n done = true;\n },\n exit(reason) {\n exitReason = reason;\n done = true;\n },\n $child: {},\n // ── hook registration ─────────────────────────────────────\n onMessage: (h: OnMessageHook<any>) => { pvtHooks.onMessage.push(h); },\n onEmit: (h: OnEmitHook<any>) => { pvtHooks.onEmit.push(h); },\n onChildExit: (h: OnChildExitHook) => { pvtHooks.onChildExit.push(h); },\n onStopRequested: (h: OnStopRequestedHook) => { pvtHooks.onStopRequested.push(h); },\n onError: (h: OnErrorHook) => { pvtHooks.onError.push(h); },\n fork(childFn, name, childArgs) {\n // Unwrap ActorDefinition, derive name.\n const resolved = typeof childFn === \"function\" ? childFn : childFn.fn;\n const childDef =\n typeof childFn === \"object\" ? childFn : null;\n const childName = name\n ?? childDef?.name\n ?? `child-${Object.keys(self.$child).length}`;\n\n // ── plugin inheritance ───────────────────────────────────────\n // Resolve parent's installed plugins.\n const parentPlugs: ActorPlugin[] = config.plugins\n ? (typeof config.plugins === \"function\" ? config.plugins([]) : config.plugins)\n : [];\n\n // Merge with child's raw config.\n const childRaw: ActorPlugin[] | PluginTransform | undefined = (childDef as { pvtPluginsRaw?: ActorPlugin[] | PluginTransform })?.pvtPluginsRaw;\n let childPlugs: ActorPlugin[];\n if (!childRaw) {\n childPlugs = [...parentPlugs];\n } else if (Array.isArray(childRaw)) {\n childPlugs = [...childRaw];\n } else {\n childPlugs = childRaw(parentPlugs);\n }\n\n // Stash resolved list on the child's config before fork.\n stashPlugins(resolved, childPlugs);\n\n // Build tree-prefixed name: parent:child\n const treeName = `${ctx.pname}:${childName}`;\n const child = ctx.fork(resolved, treeName)(childArgs!);\n // Store under the resolved name for $child lookup and EXIT matching.\n self.$child[child.pname] = child as unknown as AsyncProcess<\n unknown,\n unknown,\n Message,\n Message\n >;\n return child;\n },\n \n };\n\n\n // ── wire hook registration + decorate onto ctx (for plugin install) ─\n const decorated = new Map<string, unknown>();\n const ctxAny = ctx as Record<string, unknown>;\n ctxAny.onMessage = (h: OnMessageHook<InMsg>) => { pvtHooks.onMessage.push(h); };\n ctxAny.onEmit = (h: OnEmitHook<OutMsg>) => { pvtHooks.onEmit.push(h); };\n ctxAny.onChildExit = (h: OnChildExitHook) => { pvtHooks.onChildExit.push(h); };\n ctxAny.onStart = (h: OnStartHook<ExposedState>) => { pvtHooks.onStart.push(h); };\n ctxAny.onStopRequested = (h: OnStopRequestedHook) => { pvtHooks.onStopRequested.push(h); };\n ctxAny.onError = (h: OnErrorHook) => { pvtHooks.onError.push(h); };\n ctxAny.onEnd = (h: OnEndHook) => { pvtHooks.onEnd.push(h); };\n ctxAny.decorate = (key: string, value: unknown) => {\n if (key in self) throw new Error(`decorate: key \"${key}\" conflicts with built-in`);\n if (decorated.has(key)) throw new Error(`decorate: key \"${key}\" already decorated`);\n decorated.set(key, value);\n };\n\n // ── install plugins ──────────────────────────────────────────────\n // On child actors, pvtResolvedPlugins is set by the parent's fork().\n // On root actors, use config.plugins directly.\n const resolvedPlugs = getResolvedPlugins(fn)\n ?? (config.plugins\n ? (typeof config.plugins === \"function\" ? config.plugins([]) : config.plugins)\n : []);\n\n for (const p of resolvedPlugs) {\n let pvtErr: unknown = null;\n try {\n await p.install(ctx as ProcessCtx<unknown, unknown, Message, Message>);\n } catch (e) {\n pvtErr = e;\n }\n // Also catch sync throws from non-async install functions.\n if (pvtErr) {\n console.error(`[${ctx.pname}] plugin \"${p.name}\" install failed:`, pvtErr);\n }\n }\n\n // ── register config.hooks (after plugins, so plugins fire first) ─\n if (config.hooks) {\n const h = config.hooks;\n if (h.onStart) pvtHooks.onStart.push((state) => h.onStart!.call(self, state));\n if (h.onMessage) pvtHooks.onMessage.push((msg, sender) => h.onMessage!.call(self, msg, sender));\n if (h.onEmit) pvtHooks.onEmit.push((msg) => h.onEmit!.call(self, msg));\n if (h.onChildExit) pvtHooks.onChildExit.push((name) => h.onChildExit!.call(self, name));\n if (h.onStopRequested) pvtHooks.onStopRequested.push(() => h.onStopRequested!.call(self));\n if (h.onEnd) pvtHooks.onEnd.push((reason) => h.onEnd!.call(self, reason));\n if (h.onError) pvtHooks.onError.push((err) => h.onError!.call(self, err));\n }\n\n // ── merge decorated properties onto self ───────────────────────\n for (const [key, value] of decorated) {\n (self as Record<string, unknown>)[key] = value;\n }\n\n // ── resolve state (setup or initialState) ────────────────────\n if (config.setup) {\n rawState = await config.setup.call(self, args);\n } else if (typeof config.initialState === \"function\") {\n rawState = (config.initialState as (a: Args, ictx: typeof ctx) => InternalState)(args, ctx);\n } else if (config.initialState !== undefined) {\n rawState = config.initialState;\n } else {\n throw new Error(\"ActorConfig: setup() or initialState is required\");\n }\n (self as { state: unknown }).state = rawState;\n exposedState = config.expose\n ? config.expose(rawState)\n : (rawState as unknown as ExposedState);\n\n // Call onStart with args (legacy — use setup() for new code).\n if (config.onStart) {\n await config.onStart.call(self, args);\n exposedState = config.expose\n ? config.expose(rawState)\n : (rawState as unknown as ExposedState);\n }\n\n // Fire hooks.onStart.\n for (const hookFn of pvtHooks.onStart) {\n try { await hookFn(exposedState); } catch {}\n }\n\n yield exposedState;\n\n // ── afterStart ──────────────────────────────────────────────────\n if (config.afterStart) { await config.afterStart.call(self); }\n\n // Dispatch loop..\n yield* runDispatchAsync<WithSender<InMsg | ExitMessage>>(\n ctx.pname,\n async (stamped) => {\n const [msg, sender] = stamped;\n\n // ── Built-in STOP handling ──────────────────────────────────\n if (msg.type === \"STOP\") {\n for (const hookFn of pvtHooks.onStopRequested) {\n try { await hookFn(); } catch {}\n }\n if (config.onStopRequested) {\n await config.onStopRequested.call(self);\n if (!done) {\n stopRequested = true;\n }\n } else {\n // Default: agree immediately.\n exitReason = \"stopped\";\n done = true;\n }\n return;\n }\n\n // ── Re-offer deferred STOP ──────────────────────────────────\n if (stopRequested && !done) {\n if (config.onStopRequested) {\n await config.onStopRequested.call(self);\n if (!done) {\n stopRequested = true;\n }\n }\n }\n\n // ── Built-in EXIT handling ──────────────────────────────────\n if (msg.type === \"EXIT\") {\n const childName = sender.fromName;\n\n if (childName && self.$child[childName]) {\n // Recognized child — consume EXIT here.\n delete self.$child[childName];\n }\n for (const hookFn of pvtHooks.onChildExit) {\n try { await hookFn(childName); } catch {}\n }\n if (config.onChildExit) {\n await config.onChildExit.call(self, childName, msg as ExitMessage);\n }\n // Unrecognized EXIT — fall through to handlers/onUnhandled.\n }\n\n // ── onMessage hooks ────────────────────────────────────────\n let hookStopped = false;\n if (msg.type !== \"STOP\" && msg.type !== \"EXIT\") {\n for (const hookFn of pvtHooks.onMessage) {\n try {\n const result: HookResult = await hookFn(msg, sender);\n if (result === STOP_SENTINEL) { hookStopped = true; break; }\n } catch (e) {\n // Error in hook: fire onError hooks, then continue.\n for (const errFn of pvtHooks.onError) {\n try { errFn(e); } catch {}\n }\n }\n }\n }\n\n // ── Named handlers ──────────────────────────────────────────\n if (msg.type !== \"STOP\" && !hookStopped) {\n const handler = config.handlers[\n msg.type as keyof Handlers\n ] as HandlerFn<InMsg>;\n if (handler) {\n try {\n await handler.call(self, msg as InMsg, sender);\n } catch (e) {\n for (const hookFn of pvtHooks.onError) {\n try { hookFn(e); } catch {}\n }\n throw e; // rethrow to trigger exit\n }\n } else if (config.onUnhandled) {\n try {\n await config.onUnhandled.call(self, msg as InMsg, sender);\n } catch (e) {\n for (const hookFn of pvtHooks.onError) {\n try { hookFn(e); } catch {}\n }\n throw e; // rethrow to trigger exit\n }\n }\n // No onUnhandled: silently drop.\n }\n\n if (done) return;\n },\n () => done,\n );\n\n // Fire hooks.onEnd before the actor's onEnd.\n for (const hookFn of pvtHooks.onEnd) {\n try { await hookFn(exitReason ?? \"done\"); } catch {}\n }\n\n // Call onEnd.\n if (config.onEnd) {\n await config.onEnd.call(self, exitReason ?? \"done\");\n }\n };\n\n return {\n fn: fn as AsyncProcessFn<Args, ExposedState, InMsg, OutMsg>,\n name: config.name,\n pvtPluginsRaw: config.plugins,\n config: config as unknown as ActorConfig<\n Args,\n InternalState,\n ExposedState,\n InMsg,\n OutMsg,\n {},\n Handlers\n >,\n spawn(args: Args) {\n return spawnAsync(\n fn as AsyncProcessFn<Args, ExposedState, InMsg, OutMsg>,\n config.name ?? \"actor\",\n )(args);\n },\n spawnAsChild(\n ctx: ProcessCtx<any, any, any, any>,\n args: Args,\n name?: string,\n ) {\n return ctx.fork(\n fn as AsyncProcessFn<Args, ExposedState, InMsg, OutMsg>,\n name ?? config.name ?? 'child',\n )(args);\n },\n };\n}\n","/**\n * Posipaki — Erlang-inspired lightweight actor processes built on\n * generator functions. Processes communicate via message-passing,\n * can fork children, and expose their state reactively.\n *\n * @module\n */\n\nimport { Process, spawn } from \"./process.js\";\nimport { runDispatch } from \"./util.js\";\nimport { AsyncProcess, spawnAsync, runDispatchAsync } from \"./process.async.js\";\nimport { asyncify } from \"./adapters.js\";\n\nexport { Process, spawn, runDispatch };\nexport { AsyncProcess, spawnAsync, runDispatchAsync, asyncify };\n\nexport type {\n Message,\n WithSender,\n WithoutSender,\n ExitMessage,\n StopMessage,\n ProcessFn,\n ProcessCtx,\n AsyncProcessFn,\n PipeState,\n SupervisorState,\n SenderOrigin,\n SenderInfo,\n} from \"./types.js\";\n\nexport { defineActor, defineMessages } from \"./define-actor.js\";\nexport type {\n ActorDefinition,\n ActorConfig,\n ActorContext,\n MethodOptions,\n HandlerOptions,\n HandlerFn,\n} from \"./actor-types.js\";\n\n// ── hooks ─────────────────────────────────────────────────────────────────\n\nexport { stopPropagation, HookRegistry } from \"./hooks.js\";\nexport type {\n HookResult,\n OnStartHook,\n OnMessageHook,\n OnEmitHook,\n OnChildExitHook,\n OnStopRequestedHook,\n OnEndHook,\n OnErrorHook,\n ActorPlugin,\n ActorDecorated,\n PluginTransform,\n} from \"./hooks.js\";\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types-C6plZEPj.d.ts","names":[],"sources":["../src/process.async.ts","../src/types.ts"],"mappings":"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"}