@agentxjs/core 1.9.3-dev → 1.9.6-dev

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 (80) hide show
  1. package/dist/Processor-DT0N1qI6.d.ts +64 -0
  2. package/dist/agent/engine/internal/index.d.ts +223 -0
  3. package/dist/agent/engine/internal/index.js +24 -0
  4. package/dist/agent/engine/internal/index.js.map +1 -0
  5. package/dist/agent/engine/mealy/index.d.ts +157 -0
  6. package/dist/agent/engine/mealy/index.js +26 -0
  7. package/dist/agent/engine/mealy/index.js.map +1 -0
  8. package/dist/agent/index.d.ts +244 -0
  9. package/dist/agent/index.js +66 -0
  10. package/dist/agent/index.js.map +1 -0
  11. package/dist/agent/types/index.d.ts +322 -0
  12. package/dist/agent/types/index.js +12 -0
  13. package/dist/agent/types/index.js.map +1 -0
  14. package/dist/base-m40r3Qgu.d.ts +157 -0
  15. package/dist/bus-uF1DM2ox.d.ts +906 -0
  16. package/dist/chunk-7D4SUZUM.js +38 -0
  17. package/dist/chunk-7D4SUZUM.js.map +1 -0
  18. package/dist/chunk-7ZDX3O6I.js +173 -0
  19. package/dist/chunk-7ZDX3O6I.js.map +1 -0
  20. package/dist/chunk-AT5P47YA.js +543 -0
  21. package/dist/chunk-AT5P47YA.js.map +1 -0
  22. package/dist/chunk-E5FPOAPO.js +123 -0
  23. package/dist/chunk-E5FPOAPO.js.map +1 -0
  24. package/dist/chunk-EKHT54KN.js +272 -0
  25. package/dist/chunk-EKHT54KN.js.map +1 -0
  26. package/dist/chunk-I7GYR3MN.js +502 -0
  27. package/dist/chunk-I7GYR3MN.js.map +1 -0
  28. package/dist/chunk-K6WXQ2RW.js +38 -0
  29. package/dist/chunk-K6WXQ2RW.js.map +1 -0
  30. package/dist/chunk-RL3JRNXM.js +3 -0
  31. package/dist/chunk-RL3JRNXM.js.map +1 -0
  32. package/dist/combinators-nEa5dD0T.d.ts +271 -0
  33. package/dist/common/index.d.ts +1 -0
  34. package/dist/common/index.js +2 -0
  35. package/dist/common/index.js.map +1 -0
  36. package/dist/common/logger/index.d.ts +163 -0
  37. package/dist/common/logger/index.js +184 -0
  38. package/dist/common/logger/index.js.map +1 -0
  39. package/dist/container/index.d.ts +110 -0
  40. package/dist/container/index.js +127 -0
  41. package/dist/container/index.js.map +1 -0
  42. package/dist/driver/index.d.ts +266 -0
  43. package/dist/driver/index.js +1 -0
  44. package/dist/driver/index.js.map +1 -0
  45. package/dist/event/index.d.ts +55 -0
  46. package/dist/event/index.js +60 -0
  47. package/dist/event/index.js.map +1 -0
  48. package/dist/event/types/index.d.ts +1149 -0
  49. package/dist/event/types/index.js +56 -0
  50. package/dist/event/types/index.js.map +1 -0
  51. package/dist/event-CDuTzs__.d.ts +296 -0
  52. package/dist/image/index.d.ts +112 -0
  53. package/dist/image/index.js +151 -0
  54. package/dist/image/index.js.map +1 -0
  55. package/dist/index.d.ts +8 -0
  56. package/dist/index.js +67 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/message-BMrMm1pq.d.ts +305 -0
  59. package/dist/mq/index.d.ts +165 -0
  60. package/dist/mq/index.js +37 -0
  61. package/dist/mq/index.js.map +1 -0
  62. package/dist/network/index.d.ts +567 -0
  63. package/dist/network/index.js +435 -0
  64. package/dist/network/index.js.map +1 -0
  65. package/dist/persistence/index.d.ts +155 -0
  66. package/dist/persistence/index.js +1 -0
  67. package/dist/persistence/index.js.map +1 -0
  68. package/dist/runtime/index.d.ts +240 -0
  69. package/dist/runtime/index.js +347 -0
  70. package/dist/runtime/index.js.map +1 -0
  71. package/dist/session/index.d.ts +92 -0
  72. package/dist/session/index.js +56 -0
  73. package/dist/session/index.js.map +1 -0
  74. package/dist/workspace/index.d.ts +111 -0
  75. package/dist/workspace/index.js +1 -0
  76. package/dist/workspace/index.js.map +1 -0
  77. package/dist/wrapper-Y3UTVU2E.js +3635 -0
  78. package/dist/wrapper-Y3UTVU2E.js.map +1 -0
  79. package/package.json +74 -14
  80. package/tsconfig.json +0 -10
@@ -0,0 +1,543 @@
1
+ import {
2
+ MemoryStore,
3
+ combineInitialStates,
4
+ combineProcessors
5
+ } from "./chunk-EKHT54KN.js";
6
+ import {
7
+ createInitialMessageAssemblerState,
8
+ createInitialStateEventProcessorContext,
9
+ createInitialTurnTrackerState,
10
+ messageAssemblerProcessor,
11
+ stateEventProcessor,
12
+ turnTrackerProcessor
13
+ } from "./chunk-I7GYR3MN.js";
14
+ import {
15
+ isStateEvent
16
+ } from "./chunk-K6WXQ2RW.js";
17
+ import {
18
+ isDriveableEvent
19
+ } from "./chunk-E5FPOAPO.js";
20
+
21
+ // src/agent/engine/AgentProcessor.ts
22
+ var agentProcessor = combineProcessors({
23
+ messageAssembler: messageAssemblerProcessor,
24
+ stateEventProcessor,
25
+ turnTracker: turnTrackerProcessor
26
+ });
27
+ var createInitialAgentEngineState = combineInitialStates({
28
+ messageAssembler: createInitialMessageAssemblerState,
29
+ stateEventProcessor: createInitialStateEventProcessorContext,
30
+ turnTracker: createInitialTurnTrackerState
31
+ });
32
+
33
+ // src/agent/engine/MealyMachine.ts
34
+ import { createLogger } from "commonxjs/logger";
35
+ var logger = createLogger("engine/MealyMachine");
36
+ var MealyMachine = class {
37
+ store;
38
+ constructor() {
39
+ this.store = new MemoryStore();
40
+ logger.debug("MealyMachine initialized");
41
+ }
42
+ /**
43
+ * Process a single driveable event and return output events
44
+ *
45
+ * This is the core Mealy Machine operation:
46
+ * process(agentId, event) → outputs[]
47
+ *
48
+ * @param agentId - The agent identifier (for state isolation)
49
+ * @param event - StreamEvent to process
50
+ * @returns Array of output events (state, message, turn events)
51
+ */
52
+ process(agentId, event) {
53
+ const eventType = event.type || "unknown";
54
+ logger.debug("Processing event", { agentId, eventType });
55
+ const isNewState = !this.store.has(agentId);
56
+ let state = this.store.get(agentId) ?? createInitialAgentEngineState();
57
+ if (isNewState) {
58
+ logger.debug("Created initial state for agent", { agentId });
59
+ }
60
+ const allOutputs = [];
61
+ allOutputs.push(event);
62
+ const [newState, outputs] = agentProcessor(state, event);
63
+ state = newState;
64
+ for (const output of outputs) {
65
+ allOutputs.push(output);
66
+ const [chainedState, chainedOutputs] = this.processChained(state, output);
67
+ state = chainedState;
68
+ allOutputs.push(...chainedOutputs);
69
+ }
70
+ this.store.set(agentId, state);
71
+ if (outputs.length > 0) {
72
+ logger.debug("Produced outputs", {
73
+ agentId,
74
+ inputEvent: eventType,
75
+ outputCount: allOutputs.length,
76
+ processorOutputs: outputs.length
77
+ });
78
+ }
79
+ return allOutputs;
80
+ }
81
+ /**
82
+ * Process chained events recursively
83
+ *
84
+ * Some processors produce events that trigger other processors:
85
+ * - MessageAssembler produces MessageEvents
86
+ * - TurnTracker consumes MessageEvents to produce TurnEvents
87
+ */
88
+ processChained(state, event) {
89
+ const [newState, outputs] = agentProcessor(state, event);
90
+ if (outputs.length === 0) {
91
+ return [newState, []];
92
+ }
93
+ const allOutputs = [...outputs];
94
+ let currentState = newState;
95
+ for (const output of outputs) {
96
+ const [chainedState, chainedOutputs] = this.processChained(currentState, output);
97
+ currentState = chainedState;
98
+ allOutputs.push(...chainedOutputs);
99
+ }
100
+ return [currentState, allOutputs];
101
+ }
102
+ /**
103
+ * Clear state for an agent
104
+ *
105
+ * Call this when an agent is destroyed to free memory.
106
+ */
107
+ clearState(agentId) {
108
+ logger.debug("Clearing state", { agentId });
109
+ this.store.delete(agentId);
110
+ }
111
+ /**
112
+ * Check if state exists for an agent
113
+ */
114
+ hasState(agentId) {
115
+ return this.store.has(agentId);
116
+ }
117
+ };
118
+ function createMealyMachine() {
119
+ return new MealyMachine();
120
+ }
121
+
122
+ // src/agent/AgentStateMachine.ts
123
+ import { createLogger as createLogger2 } from "commonxjs/logger";
124
+ var logger2 = createLogger2("agent/AgentStateMachine");
125
+ var AgentStateMachine = class {
126
+ _state = "idle";
127
+ handlers = /* @__PURE__ */ new Set();
128
+ /**
129
+ * Current agent state
130
+ */
131
+ get state() {
132
+ return this._state;
133
+ }
134
+ /**
135
+ * Process an event and update internal state if it's a StateEvent
136
+ *
137
+ * @param event - Event from MealyMachine (could be any AgentOutput)
138
+ */
139
+ process(event) {
140
+ if (!isStateEvent(event)) {
141
+ return;
142
+ }
143
+ const prev = this._state;
144
+ const next = this.mapEventToState(event);
145
+ if (next !== null && prev !== next) {
146
+ this._state = next;
147
+ logger2.debug("State transition", {
148
+ eventType: event.type,
149
+ from: prev,
150
+ to: next
151
+ });
152
+ this.notifyHandlers({ prev, current: next });
153
+ }
154
+ }
155
+ /**
156
+ * Subscribe to state changes
157
+ *
158
+ * @param handler - Callback receiving { prev, current } state change
159
+ * @returns Unsubscribe function
160
+ */
161
+ onStateChange(handler) {
162
+ this.handlers.add(handler);
163
+ return () => {
164
+ this.handlers.delete(handler);
165
+ };
166
+ }
167
+ /**
168
+ * Reset state machine (used on destroy)
169
+ */
170
+ reset() {
171
+ const prev = this._state;
172
+ this._state = "idle";
173
+ if (prev !== "idle") {
174
+ this.notifyHandlers({ prev, current: "idle" });
175
+ }
176
+ this.handlers.clear();
177
+ }
178
+ /**
179
+ * Map StateEvent type to AgentState
180
+ *
181
+ * @param event - StateEvent from MealyMachine
182
+ * @returns New AgentState or null if no transition needed
183
+ */
184
+ mapEventToState(event) {
185
+ switch (event.type) {
186
+ // Conversation lifecycle
187
+ case "conversation_start":
188
+ return "thinking";
189
+ case "conversation_thinking":
190
+ return "thinking";
191
+ case "conversation_responding":
192
+ return "responding";
193
+ case "conversation_end":
194
+ return "idle";
195
+ case "conversation_interrupted":
196
+ return "idle";
197
+ // Tool lifecycle
198
+ case "tool_planned":
199
+ return "planning_tool";
200
+ case "tool_executing":
201
+ return "awaiting_tool_result";
202
+ case "tool_completed":
203
+ return "responding";
204
+ case "tool_failed":
205
+ return "responding";
206
+ // Error
207
+ case "error_occurred":
208
+ return "error";
209
+ default:
210
+ return null;
211
+ }
212
+ }
213
+ /**
214
+ * Notify all registered handlers of state change
215
+ */
216
+ notifyHandlers(change) {
217
+ for (const handler of this.handlers) {
218
+ try {
219
+ handler(change);
220
+ } catch (error) {
221
+ logger2.error("State change handler error", {
222
+ from: change.prev,
223
+ to: change.current,
224
+ error
225
+ });
226
+ }
227
+ }
228
+ }
229
+ };
230
+
231
+ // src/agent/createAgent.ts
232
+ import { createLogger as createLogger3 } from "commonxjs/logger";
233
+ var logger3 = createLogger3("agent/AgentEngine");
234
+ function generateAgentId() {
235
+ return `agent_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
236
+ }
237
+ var STREAM_EVENT_TYPES = [
238
+ "message_start",
239
+ "message_delta",
240
+ "message_stop",
241
+ "text_delta",
242
+ "tool_use_start",
243
+ "input_json_delta",
244
+ "tool_use_stop",
245
+ "tool_result",
246
+ "error_received"
247
+ ];
248
+ var DefaultSource = class {
249
+ constructor(bus, agentId) {
250
+ this.bus = bus;
251
+ this.agentId = agentId;
252
+ }
253
+ name = "DefaultSource";
254
+ unsubscribes = [];
255
+ connect(onEvent) {
256
+ for (const type of STREAM_EVENT_TYPES) {
257
+ const unsub = this.bus.on(type, (event) => {
258
+ if (!isDriveableEvent(event)) {
259
+ return;
260
+ }
261
+ const e = event;
262
+ if (e.context?.agentId && e.context.agentId !== this.agentId) {
263
+ return;
264
+ }
265
+ onEvent(event);
266
+ });
267
+ this.unsubscribes.push(unsub);
268
+ }
269
+ logger3.debug("DefaultSource connected", { agentId: this.agentId });
270
+ }
271
+ disconnect() {
272
+ for (const unsub of this.unsubscribes) {
273
+ unsub();
274
+ }
275
+ this.unsubscribes = [];
276
+ logger3.debug("DefaultSource disconnected", { agentId: this.agentId });
277
+ }
278
+ };
279
+ var DefaultPresenter = class {
280
+ constructor(bus) {
281
+ this.bus = bus;
282
+ }
283
+ name = "DefaultPresenter";
284
+ present(agentId, output) {
285
+ this.bus.emit({
286
+ ...output,
287
+ source: "agent",
288
+ context: { agentId }
289
+ });
290
+ }
291
+ };
292
+ var SimpleMessageQueue = class {
293
+ queue = [];
294
+ get length() {
295
+ return this.queue.length;
296
+ }
297
+ get isEmpty() {
298
+ return this.queue.length === 0;
299
+ }
300
+ enqueue(message) {
301
+ this.queue.push(message);
302
+ }
303
+ dequeue() {
304
+ return this.queue.shift();
305
+ }
306
+ clear() {
307
+ this.queue = [];
308
+ }
309
+ };
310
+ var AgentEngineImpl = class {
311
+ agentId;
312
+ createdAt;
313
+ messageQueue;
314
+ _messageQueue = new SimpleMessageQueue();
315
+ bus;
316
+ source;
317
+ presenter;
318
+ machine;
319
+ stateMachine;
320
+ handlers = /* @__PURE__ */ new Set();
321
+ typeHandlers = /* @__PURE__ */ new Map();
322
+ readyHandlers = /* @__PURE__ */ new Set();
323
+ destroyHandlers = /* @__PURE__ */ new Set();
324
+ middlewares = [];
325
+ interceptors = [];
326
+ isDestroyed = false;
327
+ constructor(options) {
328
+ this.agentId = options.agentId ?? generateAgentId();
329
+ this.createdAt = Date.now();
330
+ this.messageQueue = this._messageQueue;
331
+ this.bus = options.bus;
332
+ this.machine = new MealyMachine();
333
+ this.stateMachine = new AgentStateMachine();
334
+ this.source = options.source ?? new DefaultSource(this.bus, this.agentId);
335
+ this.presenter = options.presenter ?? new DefaultPresenter(this.bus);
336
+ this.source.connect((event) => this.handleStreamEvent(event));
337
+ logger3.debug("AgentEngine created", { agentId: this.agentId });
338
+ }
339
+ get state() {
340
+ return this.stateMachine.state;
341
+ }
342
+ async receive(message) {
343
+ if (this.isDestroyed) {
344
+ throw new Error("Cannot receive message on destroyed agent");
345
+ }
346
+ const userMessage = typeof message === "string" ? {
347
+ id: `msg_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`,
348
+ role: "user",
349
+ subtype: "user",
350
+ content: message,
351
+ timestamp: Date.now()
352
+ } : message;
353
+ logger3.debug("Receiving message", { messageId: userMessage.id });
354
+ let processedMessage = userMessage;
355
+ for (const middleware of this.middlewares) {
356
+ let nextCalled = false;
357
+ await middleware(processedMessage, async (msg) => {
358
+ nextCalled = true;
359
+ processedMessage = msg;
360
+ });
361
+ if (!nextCalled) {
362
+ logger3.debug("Middleware blocked message", { messageId: userMessage.id });
363
+ return;
364
+ }
365
+ }
366
+ this.bus.emit({
367
+ type: "user_message",
368
+ timestamp: Date.now(),
369
+ source: "agent",
370
+ data: processedMessage,
371
+ context: { agentId: this.agentId }
372
+ });
373
+ logger3.debug("user_message emitted to EventBus", { messageId: userMessage.id });
374
+ }
375
+ /**
376
+ * Handle a stream event (called by Source)
377
+ */
378
+ handleStreamEvent(event) {
379
+ if (this.isDestroyed) return;
380
+ logger3.debug("handleStreamEvent", { type: event.type });
381
+ const outputs = this.machine.process(this.agentId, event);
382
+ logger3.debug("MealyMachine outputs", {
383
+ count: outputs.length,
384
+ types: outputs.map((o) => o.type)
385
+ });
386
+ for (const output of outputs) {
387
+ this.stateMachine.process(output);
388
+ this.emitOutput(output);
389
+ }
390
+ }
391
+ emitOutput(output) {
392
+ let currentOutput = output;
393
+ const runInterceptor = (index, out) => {
394
+ if (index >= this.interceptors.length) {
395
+ currentOutput = out;
396
+ return;
397
+ }
398
+ this.interceptors[index](out, (nextOut) => {
399
+ runInterceptor(index + 1, nextOut);
400
+ });
401
+ };
402
+ runInterceptor(0, output);
403
+ if (!currentOutput) return;
404
+ this.presenter.present(this.agentId, currentOutput);
405
+ for (const handler of this.handlers) {
406
+ try {
407
+ handler(currentOutput);
408
+ } catch (e) {
409
+ logger3.error("Event handler error", { error: e });
410
+ }
411
+ }
412
+ const typeSet = this.typeHandlers.get(currentOutput.type);
413
+ if (typeSet) {
414
+ for (const handler of typeSet) {
415
+ try {
416
+ handler(currentOutput);
417
+ } catch (e) {
418
+ logger3.error("Event handler error", { error: e });
419
+ }
420
+ }
421
+ }
422
+ }
423
+ on(typeOrHandler, handler) {
424
+ if (typeof typeOrHandler === "function") {
425
+ this.handlers.add(typeOrHandler);
426
+ return () => this.handlers.delete(typeOrHandler);
427
+ }
428
+ if (typeof typeOrHandler === "object" && !Array.isArray(typeOrHandler)) {
429
+ const unsubscribes = [];
430
+ for (const [type, h2] of Object.entries(typeOrHandler)) {
431
+ if (h2) {
432
+ unsubscribes.push(this.on(type, h2));
433
+ }
434
+ }
435
+ return () => unsubscribes.forEach((u) => u());
436
+ }
437
+ const types = Array.isArray(typeOrHandler) ? typeOrHandler : [typeOrHandler];
438
+ const h = handler;
439
+ for (const type of types) {
440
+ if (!this.typeHandlers.has(type)) {
441
+ this.typeHandlers.set(type, /* @__PURE__ */ new Set());
442
+ }
443
+ this.typeHandlers.get(type).add(h);
444
+ }
445
+ return () => {
446
+ for (const type of types) {
447
+ this.typeHandlers.get(type)?.delete(h);
448
+ }
449
+ };
450
+ }
451
+ onStateChange(handler) {
452
+ return this.stateMachine.onStateChange(handler);
453
+ }
454
+ react(handlers) {
455
+ const eventHandlerMap = {};
456
+ for (const [key, handler] of Object.entries(handlers)) {
457
+ if (handler && key.startsWith("on")) {
458
+ const eventType = key.slice(2).replace(/([A-Z])/g, "_$1").toLowerCase().slice(1);
459
+ eventHandlerMap[eventType] = handler;
460
+ }
461
+ }
462
+ return this.on(eventHandlerMap);
463
+ }
464
+ onReady(handler) {
465
+ try {
466
+ handler();
467
+ } catch (e) {
468
+ logger3.error("onReady handler error", { error: e });
469
+ }
470
+ this.readyHandlers.add(handler);
471
+ return () => this.readyHandlers.delete(handler);
472
+ }
473
+ onDestroy(handler) {
474
+ this.destroyHandlers.add(handler);
475
+ return () => this.destroyHandlers.delete(handler);
476
+ }
477
+ use(middleware) {
478
+ this.middlewares.push(middleware);
479
+ return () => {
480
+ const index = this.middlewares.indexOf(middleware);
481
+ if (index >= 0) {
482
+ this.middlewares.splice(index, 1);
483
+ }
484
+ };
485
+ }
486
+ intercept(interceptor) {
487
+ this.interceptors.push(interceptor);
488
+ return () => {
489
+ const index = this.interceptors.indexOf(interceptor);
490
+ if (index >= 0) {
491
+ this.interceptors.splice(index, 1);
492
+ }
493
+ };
494
+ }
495
+ interrupt() {
496
+ if (this.state === "idle" || this.isDestroyed) {
497
+ return;
498
+ }
499
+ this.bus.emit({
500
+ type: "interrupt_request",
501
+ timestamp: Date.now(),
502
+ source: "agent",
503
+ data: {},
504
+ context: { agentId: this.agentId }
505
+ });
506
+ logger3.debug("Interrupt requested", { agentId: this.agentId });
507
+ }
508
+ async destroy() {
509
+ if (this.isDestroyed) return;
510
+ this.isDestroyed = true;
511
+ this.source.disconnect();
512
+ for (const handler of this.destroyHandlers) {
513
+ try {
514
+ handler();
515
+ } catch (e) {
516
+ logger3.error("onDestroy handler error", { error: e });
517
+ }
518
+ }
519
+ this.machine.clearState(this.agentId);
520
+ this.stateMachine.reset();
521
+ this._messageQueue.clear();
522
+ this.handlers.clear();
523
+ this.typeHandlers.clear();
524
+ this.readyHandlers.clear();
525
+ this.destroyHandlers.clear();
526
+ this.middlewares.length = 0;
527
+ this.interceptors.length = 0;
528
+ logger3.debug("AgentEngine destroyed", { agentId: this.agentId });
529
+ }
530
+ };
531
+ function createAgent(options) {
532
+ return new AgentEngineImpl(options);
533
+ }
534
+
535
+ export {
536
+ agentProcessor,
537
+ createInitialAgentEngineState,
538
+ MealyMachine,
539
+ createMealyMachine,
540
+ AgentStateMachine,
541
+ createAgent
542
+ };
543
+ //# sourceMappingURL=chunk-AT5P47YA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agent/engine/AgentProcessor.ts","../src/agent/engine/MealyMachine.ts","../src/agent/AgentStateMachine.ts","../src/agent/createAgent.ts"],"sourcesContent":["/**\n * AgentProcessor\n *\n * Combined Mealy processor for the full AgentX engine.\n * Composes MessageAssembler, StateMachine, and TurnTracker processors.\n */\n\nimport { combineProcessors, combineInitialStates, type Processor } from \"./mealy\";\n// Note: StreamEventType and MessageEventType are part of AgentOutput (from Presenter)\n// They flow through the system but AgentProcessor doesn't need to import them directly\nimport {\n messageAssemblerProcessor,\n stateEventProcessor,\n turnTrackerProcessor,\n createInitialMessageAssemblerState,\n createInitialStateEventProcessorContext,\n createInitialTurnTrackerState,\n type MessageAssemblerState,\n type StateEventProcessorContext,\n type TurnTrackerState,\n type MessageAssemblerOutput,\n type StateEventProcessorOutput,\n type TurnTrackerOutput,\n} from \"./internal\";\nimport type { AgentOutput } from \"../types\";\n\n/**\n * Combined state type for the full agent engine\n */\nexport type AgentEngineState = {\n messageAssembler: MessageAssemblerState;\n stateEventProcessor: StateEventProcessorContext;\n turnTracker: TurnTrackerState;\n};\n\n/**\n * Input event type for AgentProcessor\n *\n * Accepts:\n * - StreamEventType: Raw stream events from Driver\n * - MessageEventType: Re-injected message events (for TurnTracker)\n *\n * Note: AgentOutput is used because re-injected events can be any output type\n */\nexport type AgentProcessorInput = AgentOutput;\n\n/**\n * Output event type from AgentProcessor\n *\n * Produces:\n * - MessageAssemblerOutput: Assembled message events\n * - StateEventProcessorOutput: State transition events\n * - TurnTrackerOutput: Turn analytics events\n *\n * Note: StreamEventType is NOT in output - it's passed through by AgentEngine\n */\nexport type AgentProcessorOutput =\n | MessageAssemblerOutput\n | StateEventProcessorOutput\n | TurnTrackerOutput;\n\n/**\n * Combined processor for the full agent engine\n *\n * This combines:\n * - MessageAssembler: Stream → Message events\n * - StateEventProcessor: Stream → State events\n * - TurnTracker: Message → Turn events\n *\n * Pattern: (state, input) => [newState, outputs]\n * Key insight: State is means, outputs are the goal (Mealy Machine)\n *\n * Note: Raw StreamEvents are NOT output by this processor.\n * The AgentEngine handles pass-through of original events.\n */\nexport const agentProcessor: Processor<\n AgentEngineState,\n AgentProcessorInput,\n AgentProcessorOutput\n> = combineProcessors<AgentEngineState, AgentProcessorInput, AgentProcessorOutput>({\n messageAssembler: messageAssemblerProcessor as unknown as Processor<\n AgentEngineState[\"messageAssembler\"],\n AgentProcessorInput,\n AgentProcessorOutput\n >,\n stateEventProcessor: stateEventProcessor as unknown as Processor<\n AgentEngineState[\"stateEventProcessor\"],\n AgentProcessorInput,\n AgentProcessorOutput\n >,\n turnTracker: turnTrackerProcessor as unknown as Processor<\n AgentEngineState[\"turnTracker\"],\n AgentProcessorInput,\n AgentProcessorOutput\n >,\n});\n\n/**\n * Initial state factory for the full agent engine\n */\nexport const createInitialAgentEngineState: () => AgentEngineState =\n combineInitialStates<AgentEngineState>({\n messageAssembler: createInitialMessageAssemblerState,\n stateEventProcessor: createInitialStateEventProcessorContext,\n turnTracker: createInitialTurnTrackerState,\n });\n","/**\n * MealyMachine - Pure Mealy Machine Event Processor\n *\n * MealyMachine is a stateless event processor that transforms StreamEvents\n * into higher-level events (state, message, turn events).\n *\n * Key Design:\n * - Engine is a pure Mealy Machine: process(agentId, event) → outputs\n * - Engine does NOT hold driver or presenters (those belong to AgentEngine layer)\n * - Engine manages intermediate processing state per agentId\n * - Multiple agents can share the same MealyMachine instance\n *\n * Type Relationship:\n * ```\n * StreamEvent (from Driver)\n * │\n * └── message_start, text_delta, tool_use_start, message_stop...\n * ↓ MealyMachine processes\n * AgentOutput (to AgentEngine/Presenter)\n * │\n * ├── StateEvent (conversation_start, conversation_end...)\n * ├── MessageEvent (assistant_message, tool_call_message...)\n * └── TurnEvent (turn_request, turn_response)\n * ```\n *\n * State Management:\n * - Processing state (pendingContents, etc.) is managed internally per agentId\n * - Business data persistence is NOT handled here - that's AgentEngine layer's job\n *\n * Usage:\n * ```typescript\n * const machine = new MealyMachine();\n *\n * // AgentEngine layer coordinates:\n * // 1. Driver produces StreamEvents\n * // 2. MealyMachine processes events\n * // 3. Presenters handle outputs\n *\n * for await (const streamEvent of driver.receive(message)) {\n * const outputs = machine.process(agentId, streamEvent);\n * for (const output of outputs) {\n * presenters.forEach(p => p.present(agentId, output));\n * }\n * }\n * ```\n */\n\nimport {\n agentProcessor,\n createInitialAgentEngineState,\n type AgentEngineState,\n} from \"./AgentProcessor\";\nimport { MemoryStore } from \"./mealy\";\nimport type { AgentOutput, StreamEvent } from \"../types\";\nimport { createLogger } from \"commonxjs/logger\";\n\nconst logger = createLogger(\"engine/MealyMachine\");\n\n/**\n * MealyMachine - Pure Mealy Machine for event processing\n *\n * - Input: StreamEvent (from Driver)\n * - Output: AgentOutput[] (state, message, turn events)\n * - State: Managed internally per agentId\n */\nexport class MealyMachine {\n private readonly store: MemoryStore<AgentEngineState>;\n\n constructor() {\n this.store = new MemoryStore<AgentEngineState>();\n logger.debug(\"MealyMachine initialized\");\n }\n\n /**\n * Process a single driveable event and return output events\n *\n * This is the core Mealy Machine operation:\n * process(agentId, event) → outputs[]\n *\n * @param agentId - The agent identifier (for state isolation)\n * @param event - StreamEvent to process\n * @returns Array of output events (state, message, turn events)\n */\n process(agentId: string, event: StreamEvent): AgentOutput[] {\n const eventType = (event as { type?: string }).type || \"unknown\";\n logger.debug(\"Processing event\", { agentId, eventType });\n\n // Get current state or create initial state\n const isNewState = !this.store.has(agentId);\n let state = this.store.get(agentId) ?? createInitialAgentEngineState();\n\n if (isNewState) {\n logger.debug(\"Created initial state for agent\", { agentId });\n }\n\n // Collect all outputs\n const allOutputs: AgentOutput[] = [];\n\n // Pass-through: original stream event is also an output\n allOutputs.push(event);\n\n // Process through Mealy Machine\n const [newState, outputs] = agentProcessor(state, event);\n state = newState;\n\n // Collect processor outputs\n for (const output of outputs) {\n allOutputs.push(output);\n\n // Re-inject for event chaining (e.g., TurnTracker needs MessageEvents)\n const [chainedState, chainedOutputs] = this.processChained(state, output);\n state = chainedState;\n allOutputs.push(...chainedOutputs);\n }\n\n // Store updated state\n this.store.set(agentId, state);\n\n if (outputs.length > 0) {\n logger.debug(\"Produced outputs\", {\n agentId,\n inputEvent: eventType,\n outputCount: allOutputs.length,\n processorOutputs: outputs.length,\n });\n }\n\n return allOutputs;\n }\n\n /**\n * Process chained events recursively\n *\n * Some processors produce events that trigger other processors:\n * - MessageAssembler produces MessageEvents\n * - TurnTracker consumes MessageEvents to produce TurnEvents\n */\n private processChained(\n state: AgentEngineState,\n event: AgentOutput\n ): [AgentEngineState, AgentOutput[]] {\n const [newState, outputs] = agentProcessor(state, event);\n\n if (outputs.length === 0) {\n return [newState, []];\n }\n\n // Process outputs recursively\n const allOutputs: AgentOutput[] = [...outputs];\n let currentState = newState;\n\n for (const output of outputs) {\n const [chainedState, chainedOutputs] = this.processChained(currentState, output);\n currentState = chainedState;\n allOutputs.push(...chainedOutputs);\n }\n\n return [currentState, allOutputs];\n }\n\n /**\n * Clear state for an agent\n *\n * Call this when an agent is destroyed to free memory.\n */\n clearState(agentId: string): void {\n logger.debug(\"Clearing state\", { agentId });\n this.store.delete(agentId);\n }\n\n /**\n * Check if state exists for an agent\n */\n hasState(agentId: string): boolean {\n return this.store.has(agentId);\n }\n}\n\n/**\n * Factory function to create MealyMachine\n */\nexport function createMealyMachine(): MealyMachine {\n return new MealyMachine();\n}\n","/**\n * AgentStateMachine - State management driven by StateEvents\n *\n * Manages agent state transitions driven by StateEvents.\n * Single source of truth for agent state in AgentEngine.\n *\n * Flow:\n * StreamEvent → MealyMachine → StateEvent → AgentStateMachine → state update\n *\n * Responsibilities:\n * - Process StateEvents\n * - Maintain current AgentState\n * - Notify state change subscribers\n */\n\nimport type {\n AgentState,\n StateChange,\n StateChangeHandler,\n AgentOutput,\n Unsubscribe,\n} from \"./types\";\nimport { isStateEvent } from \"./types\";\nimport { createLogger } from \"commonxjs/logger\";\n\nconst logger = createLogger(\"agent/AgentStateMachine\");\n\n/**\n * AgentStateMachine implementation\n */\nexport class AgentStateMachine {\n private _state: AgentState = \"idle\";\n private readonly handlers = new Set<StateChangeHandler>();\n\n /**\n * Current agent state\n */\n get state(): AgentState {\n return this._state;\n }\n\n /**\n * Process an event and update internal state if it's a StateEvent\n *\n * @param event - Event from MealyMachine (could be any AgentOutput)\n */\n process(event: AgentOutput): void {\n // Only process StateEvents\n if (!isStateEvent(event)) {\n return;\n }\n\n const prev = this._state;\n const next = this.mapEventToState(event);\n\n if (next !== null && prev !== next) {\n this._state = next;\n logger.debug(\"State transition\", {\n eventType: event.type,\n from: prev,\n to: next,\n });\n this.notifyHandlers({ prev, current: next });\n }\n }\n\n /**\n * Subscribe to state changes\n *\n * @param handler - Callback receiving { prev, current } state change\n * @returns Unsubscribe function\n */\n onStateChange(handler: StateChangeHandler): Unsubscribe {\n this.handlers.add(handler);\n return () => {\n this.handlers.delete(handler);\n };\n }\n\n /**\n * Reset state machine (used on destroy)\n */\n reset(): void {\n const prev = this._state;\n this._state = \"idle\";\n\n // Notify handlers of reset to idle\n if (prev !== \"idle\") {\n this.notifyHandlers({ prev, current: \"idle\" });\n }\n\n this.handlers.clear();\n }\n\n /**\n * Map StateEvent type to AgentState\n *\n * @param event - StateEvent from MealyMachine\n * @returns New AgentState or null if no transition needed\n */\n private mapEventToState(event: AgentOutput): AgentState | null {\n switch (event.type) {\n // Conversation lifecycle\n case \"conversation_start\":\n return \"thinking\";\n case \"conversation_thinking\":\n return \"thinking\";\n case \"conversation_responding\":\n return \"responding\";\n case \"conversation_end\":\n return \"idle\";\n case \"conversation_interrupted\":\n return \"idle\";\n\n // Tool lifecycle\n case \"tool_planned\":\n return \"planning_tool\";\n case \"tool_executing\":\n return \"awaiting_tool_result\";\n case \"tool_completed\":\n return \"responding\";\n case \"tool_failed\":\n return \"responding\";\n\n // Error\n case \"error_occurred\":\n return \"error\";\n\n default:\n // Unknown event type, no state change\n return null;\n }\n }\n\n /**\n * Notify all registered handlers of state change\n */\n private notifyHandlers(change: StateChange): void {\n for (const handler of this.handlers) {\n try {\n handler(change);\n } catch (error) {\n logger.error(\"State change handler error\", {\n from: change.prev,\n to: change.current,\n error,\n });\n }\n }\n }\n}\n","/**\n * createAgent - Factory function to create an AgentEngine\n *\n * Creates an AgentEngine connected to EventBus:\n * - receive() emits user_message to EventBus\n * - Source subscribes to StreamEvent from EventBus\n * - Presenter emits AgentOutput to EventBus\n *\n * ```\n * EventBus\n * ↗ ↘\n * emit │ │ emit\n * user_message │ │ AgentOutput\n * ↑ │ │ ↑\n * ┌─────────────────────────────────────────────────────────────┐\n * │ AgentEngine │\n * │ │\n * │ receive() ──► Source ──► MealyMachine ──► Presenter │\n * │ (sub) (pub) │\n * └─────────────────────────────────────────────────────────────┘\n * ```\n */\n\nimport type {\n AgentEngine,\n AgentState,\n AgentOutputCallback,\n UserMessage,\n MessageQueue,\n StateChangeHandler,\n EventHandlerMap,\n ReactHandlerMap,\n AgentOutput,\n CreateAgentOptions,\n AgentSource,\n AgentPresenter,\n AgentEventBus,\n StreamEvent,\n Unsubscribe,\n AgentMiddleware,\n AgentInterceptor,\n} from \"./types\";\nimport { MealyMachine } from \"./engine/MealyMachine\";\nimport { AgentStateMachine } from \"./AgentStateMachine\";\nimport { createLogger } from \"commonxjs/logger\";\nimport { isDriveableEvent } from \"../event\";\n\nconst logger = createLogger(\"agent/AgentEngine\");\n\n/**\n * Generate unique agent ID\n */\nfunction generateAgentId(): string {\n return `agent_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\n/**\n * StreamEvent types that Source should subscribe to\n */\nconst STREAM_EVENT_TYPES = [\n \"message_start\",\n \"message_delta\",\n \"message_stop\",\n \"text_delta\",\n \"tool_use_start\",\n \"input_json_delta\",\n \"tool_use_stop\",\n \"tool_result\",\n \"error_received\",\n];\n\n/**\n * Default Source implementation\n * Subscribes to StreamEvent from EventBus\n */\nclass DefaultSource implements AgentSource {\n readonly name = \"DefaultSource\";\n private unsubscribes: Unsubscribe[] = [];\n\n constructor(\n private readonly bus: AgentEventBus,\n private readonly agentId: string\n ) {}\n\n connect(onEvent: (event: StreamEvent) => void): void {\n // Subscribe to each StreamEvent type\n for (const type of STREAM_EVENT_TYPES) {\n const unsub = this.bus.on(type, (event: unknown) => {\n // Only process DriveableEvents (source: \"driver\", category: \"stream\")\n // This prevents circular processing of AgentOutput events\n if (!isDriveableEvent(event as { source?: string; category?: string })) {\n return;\n }\n\n // Filter by agentId if present in context\n const e = event as { context?: { agentId?: string } };\n if (e.context?.agentId && e.context.agentId !== this.agentId) {\n return;\n }\n onEvent(event as StreamEvent);\n });\n this.unsubscribes.push(unsub);\n }\n\n logger.debug(\"DefaultSource connected\", { agentId: this.agentId });\n }\n\n disconnect(): void {\n for (const unsub of this.unsubscribes) {\n unsub();\n }\n this.unsubscribes = [];\n logger.debug(\"DefaultSource disconnected\", { agentId: this.agentId });\n }\n}\n\n/**\n * Default Presenter implementation\n * Emits AgentOutput to EventBus\n */\nclass DefaultPresenter implements AgentPresenter {\n readonly name = \"DefaultPresenter\";\n\n constructor(private readonly bus: AgentEventBus) {}\n\n present(agentId: string, output: AgentOutput): void {\n // Emit to EventBus with agent context\n this.bus.emit({\n ...output,\n source: \"agent\",\n context: { agentId },\n });\n }\n}\n\n/**\n * Simple MessageQueue implementation\n */\nclass SimpleMessageQueue implements MessageQueue {\n private queue: UserMessage[] = [];\n\n get length(): number {\n return this.queue.length;\n }\n\n get isEmpty(): boolean {\n return this.queue.length === 0;\n }\n\n enqueue(message: UserMessage): void {\n this.queue.push(message);\n }\n\n dequeue(): UserMessage | undefined {\n return this.queue.shift();\n }\n\n clear(): void {\n this.queue = [];\n }\n}\n\n/**\n * AgentEngineImpl - EventBus-based AgentEngine implementation\n */\nclass AgentEngineImpl implements AgentEngine {\n readonly agentId: string;\n readonly createdAt: number;\n readonly messageQueue: MessageQueue;\n\n private readonly _messageQueue = new SimpleMessageQueue();\n private readonly bus: AgentEventBus;\n private readonly source: AgentSource;\n private readonly presenter: AgentPresenter;\n private readonly machine: MealyMachine;\n private readonly stateMachine: AgentStateMachine;\n\n private readonly handlers: Set<AgentOutputCallback> = new Set();\n private readonly typeHandlers: Map<string, Set<AgentOutputCallback>> = new Map();\n private readonly readyHandlers: Set<() => void> = new Set();\n private readonly destroyHandlers: Set<() => void> = new Set();\n private readonly middlewares: AgentMiddleware[] = [];\n private readonly interceptors: AgentInterceptor[] = [];\n\n private isDestroyed = false;\n\n constructor(options: CreateAgentOptions) {\n this.agentId = options.agentId ?? generateAgentId();\n this.createdAt = Date.now();\n this.messageQueue = this._messageQueue;\n this.bus = options.bus;\n this.machine = new MealyMachine();\n this.stateMachine = new AgentStateMachine();\n\n // Use provided Source/Presenter or create defaults\n this.source = options.source ?? new DefaultSource(this.bus, this.agentId);\n this.presenter = options.presenter ?? new DefaultPresenter(this.bus);\n\n // Connect Source to receive StreamEvents\n this.source.connect((event) => this.handleStreamEvent(event));\n\n logger.debug(\"AgentEngine created\", { agentId: this.agentId });\n }\n\n get state(): AgentState {\n return this.stateMachine.state;\n }\n\n async receive(message: string | UserMessage): Promise<void> {\n if (this.isDestroyed) {\n throw new Error(\"Cannot receive message on destroyed agent\");\n }\n\n const userMessage: UserMessage =\n typeof message === \"string\"\n ? {\n id: `msg_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`,\n role: \"user\",\n subtype: \"user\",\n content: message,\n timestamp: Date.now(),\n }\n : message;\n\n logger.debug(\"Receiving message\", { messageId: userMessage.id });\n\n // Run through middleware chain\n let processedMessage = userMessage;\n for (const middleware of this.middlewares) {\n let nextCalled = false;\n await middleware(processedMessage, async (msg) => {\n nextCalled = true;\n processedMessage = msg;\n });\n if (!nextCalled) {\n logger.debug(\"Middleware blocked message\", { messageId: userMessage.id });\n return;\n }\n }\n\n // Emit user_message to EventBus\n // This triggers Driver to send to LLM\n this.bus.emit({\n type: \"user_message\",\n timestamp: Date.now(),\n source: \"agent\",\n data: processedMessage,\n context: { agentId: this.agentId },\n });\n\n logger.debug(\"user_message emitted to EventBus\", { messageId: userMessage.id });\n }\n\n /**\n * Handle a stream event (called by Source)\n */\n handleStreamEvent(event: StreamEvent): void {\n if (this.isDestroyed) return;\n\n logger.debug(\"handleStreamEvent\", { type: event.type });\n\n // Process through MealyMachine\n const outputs = this.machine.process(this.agentId, event);\n\n logger.debug(\"MealyMachine outputs\", {\n count: outputs.length,\n types: outputs.map((o) => o.type),\n });\n\n // Emit all outputs\n for (const output of outputs) {\n this.stateMachine.process(output);\n this.emitOutput(output);\n }\n }\n\n private emitOutput(output: AgentOutput): void {\n // Run through interceptor chain\n let currentOutput: AgentOutput | null = output;\n\n const runInterceptor = (index: number, out: AgentOutput): void => {\n if (index >= this.interceptors.length) {\n currentOutput = out;\n return;\n }\n this.interceptors[index](out, (nextOut) => {\n runInterceptor(index + 1, nextOut);\n });\n };\n\n runInterceptor(0, output);\n if (!currentOutput) return;\n\n // Send to presenter (emits to EventBus)\n this.presenter.present(this.agentId, currentOutput);\n\n // Notify local handlers\n for (const handler of this.handlers) {\n try {\n handler(currentOutput);\n } catch (e) {\n logger.error(\"Event handler error\", { error: e });\n }\n }\n\n // Notify type-specific handlers\n const typeSet = this.typeHandlers.get(currentOutput.type);\n if (typeSet) {\n for (const handler of typeSet) {\n try {\n handler(currentOutput);\n } catch (e) {\n logger.error(\"Event handler error\", { error: e });\n }\n }\n }\n }\n\n on(handler: AgentOutputCallback): Unsubscribe;\n on(handlers: EventHandlerMap): Unsubscribe;\n on(type: string, handler: AgentOutputCallback): Unsubscribe;\n on(types: string[], handler: AgentOutputCallback): Unsubscribe;\n on(\n typeOrHandler: string | string[] | AgentOutputCallback | EventHandlerMap,\n handler?: AgentOutputCallback\n ): Unsubscribe {\n if (typeof typeOrHandler === \"function\") {\n this.handlers.add(typeOrHandler);\n return () => this.handlers.delete(typeOrHandler);\n }\n\n if (typeof typeOrHandler === \"object\" && !Array.isArray(typeOrHandler)) {\n const unsubscribes: Unsubscribe[] = [];\n for (const [type, h] of Object.entries(typeOrHandler)) {\n if (h) {\n unsubscribes.push(this.on(type, h));\n }\n }\n return () => unsubscribes.forEach((u) => u());\n }\n\n const types = Array.isArray(typeOrHandler) ? typeOrHandler : [typeOrHandler];\n const h = handler!;\n\n for (const type of types) {\n if (!this.typeHandlers.has(type)) {\n this.typeHandlers.set(type, new Set());\n }\n this.typeHandlers.get(type)!.add(h);\n }\n\n return () => {\n for (const type of types) {\n this.typeHandlers.get(type)?.delete(h);\n }\n };\n }\n\n onStateChange(handler: StateChangeHandler): Unsubscribe {\n return this.stateMachine.onStateChange(handler);\n }\n\n react(handlers: ReactHandlerMap): Unsubscribe {\n const eventHandlerMap: EventHandlerMap = {};\n for (const [key, handler] of Object.entries(handlers)) {\n if (handler && key.startsWith(\"on\")) {\n const eventType = key\n .slice(2)\n .replace(/([A-Z])/g, \"_$1\")\n .toLowerCase()\n .slice(1);\n eventHandlerMap[eventType] = handler;\n }\n }\n return this.on(eventHandlerMap);\n }\n\n onReady(handler: () => void): Unsubscribe {\n try {\n handler();\n } catch (e) {\n logger.error(\"onReady handler error\", { error: e });\n }\n this.readyHandlers.add(handler);\n return () => this.readyHandlers.delete(handler);\n }\n\n onDestroy(handler: () => void): Unsubscribe {\n this.destroyHandlers.add(handler);\n return () => this.destroyHandlers.delete(handler);\n }\n\n use(middleware: AgentMiddleware): Unsubscribe {\n this.middlewares.push(middleware);\n return () => {\n const index = this.middlewares.indexOf(middleware);\n if (index >= 0) {\n this.middlewares.splice(index, 1);\n }\n };\n }\n\n intercept(interceptor: AgentInterceptor): Unsubscribe {\n this.interceptors.push(interceptor);\n return () => {\n const index = this.interceptors.indexOf(interceptor);\n if (index >= 0) {\n this.interceptors.splice(index, 1);\n }\n };\n }\n\n interrupt(): void {\n if (this.state === \"idle\" || this.isDestroyed) {\n return;\n }\n\n // Emit interrupt event to EventBus\n this.bus.emit({\n type: \"interrupt_request\",\n timestamp: Date.now(),\n source: \"agent\",\n data: {},\n context: { agentId: this.agentId },\n });\n\n logger.debug(\"Interrupt requested\", { agentId: this.agentId });\n }\n\n async destroy(): Promise<void> {\n if (this.isDestroyed) return;\n this.isDestroyed = true;\n\n // Disconnect Source\n this.source.disconnect();\n\n // Notify destroy handlers\n for (const handler of this.destroyHandlers) {\n try {\n handler();\n } catch (e) {\n logger.error(\"onDestroy handler error\", { error: e });\n }\n }\n\n // Clear state\n this.machine.clearState(this.agentId);\n this.stateMachine.reset();\n\n this._messageQueue.clear();\n this.handlers.clear();\n this.typeHandlers.clear();\n this.readyHandlers.clear();\n this.destroyHandlers.clear();\n this.middlewares.length = 0;\n this.interceptors.length = 0;\n\n logger.debug(\"AgentEngine destroyed\", { agentId: this.agentId });\n }\n}\n\n/**\n * Create an AgentEngine instance connected to EventBus\n */\nexport function createAgent(options: CreateAgentOptions): AgentEngine {\n return new AgentEngineImpl(options);\n}\n"],"mappings":"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","names":["createLogger","logger","createLogger","logger","createLogger","h"]}