@agentxjs/core 1.9.10-dev → 2.0.1

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 (142) hide show
  1. package/README.md +342 -0
  2. package/dist/{Processor-DT0N1qI6.d.ts → Processor-CeMyXtsX.d.ts} +1 -1
  3. package/dist/RpcClient-CMdhJxjS.d.ts +304 -0
  4. package/dist/agent/engine/internal/index.d.ts +22 -18
  5. package/dist/agent/engine/internal/index.js +1 -2
  6. package/dist/agent/engine/mealy/index.d.ts +4 -4
  7. package/dist/agent/engine/mealy/index.js +1 -2
  8. package/dist/agent/index.d.ts +92 -92
  9. package/dist/agent/index.js +16 -16
  10. package/dist/agent/types/index.d.ts +4 -4
  11. package/dist/agent/types/index.js +1 -2
  12. package/dist/bash/index.d.ts +29 -0
  13. package/dist/bash/index.js +7 -0
  14. package/dist/{bus-uF1DM2ox.d.ts → bus-C9FLWIu8.d.ts} +3 -1
  15. package/dist/{chunk-E5FPOAPO.js → chunk-22NTRYNO.js} +60 -60
  16. package/dist/chunk-22NTRYNO.js.map +1 -0
  17. package/dist/{chunk-7ZDX3O6I.js → chunk-AAFPAF67.js} +2 -2
  18. package/dist/{chunk-7ZDX3O6I.js.map → chunk-AAFPAF67.js.map} +1 -1
  19. package/dist/{chunk-EKHT54KN.js → chunk-APCBNCOW.js} +1 -1
  20. package/dist/{chunk-EKHT54KN.js.map → chunk-APCBNCOW.js.map} +1 -1
  21. package/dist/chunk-BHOD5PKR.js +55 -0
  22. package/dist/chunk-BHOD5PKR.js.map +1 -0
  23. package/dist/chunk-FI7WQFGV.js +37 -0
  24. package/dist/chunk-FI7WQFGV.js.map +1 -0
  25. package/dist/{chunk-AT5P47YA.js → chunk-RWIYC65R.js} +115 -115
  26. package/dist/chunk-RWIYC65R.js.map +1 -0
  27. package/dist/chunk-SKS7S2RY.js +1 -0
  28. package/dist/{chunk-I7GYR3MN.js → chunk-TUFZ2YH6.js} +77 -91
  29. package/dist/chunk-TUFZ2YH6.js.map +1 -0
  30. package/dist/{chunk-K6WXQ2RW.js → chunk-YSZG6XIM.js} +1 -2
  31. package/dist/chunk-YSZG6XIM.js.map +1 -0
  32. package/dist/{combinators-nEa5dD0T.d.ts → combinators-Dy-7lxKV.d.ts} +50 -50
  33. package/dist/common/logger/index.js +14 -16
  34. package/dist/common/logger/index.js.map +1 -1
  35. package/dist/container/index.d.ts +3 -4
  36. package/dist/container/index.js +0 -2
  37. package/dist/container/index.js.map +1 -1
  38. package/dist/driver/index.d.ts +2 -310
  39. package/dist/event/index.d.ts +4 -4
  40. package/dist/event/index.js +2 -3
  41. package/dist/event/types/index.d.ts +202 -208
  42. package/dist/event/types/index.js +1 -2
  43. package/dist/{event-CDuTzs__.d.ts → event-DNsF9EkO.d.ts} +5 -8
  44. package/dist/image/index.d.ts +9 -5
  45. package/dist/image/index.js +5 -2
  46. package/dist/image/index.js.map +1 -1
  47. package/dist/index--gxNpY5W.d.ts +609 -0
  48. package/dist/index.d.ts +4 -4
  49. package/dist/index.js +17 -17
  50. package/dist/{message-BMrMm1pq.d.ts → message-Dn-I2vr0.d.ts} +10 -33
  51. package/dist/mq/index.d.ts +25 -25
  52. package/dist/mq/index.js +1 -3
  53. package/dist/mq/index.js.map +1 -1
  54. package/dist/network/index.d.ts +59 -347
  55. package/dist/network/index.js +30 -41
  56. package/dist/network/index.js.map +1 -1
  57. package/dist/persistence/index.d.ts +2 -155
  58. package/dist/platform/index.d.ts +76 -0
  59. package/dist/platform/index.js.map +1 -0
  60. package/dist/runtime/index.d.ts +26 -59
  61. package/dist/runtime/index.js +117 -33
  62. package/dist/runtime/index.js.map +1 -1
  63. package/dist/session/index.d.ts +4 -52
  64. package/dist/session/index.js +4 -51
  65. package/dist/session/index.js.map +1 -1
  66. package/dist/types-Cb8tKM6Y.d.ts +90 -0
  67. package/package.json +10 -5
  68. package/src/agent/AgentStateMachine.ts +2 -2
  69. package/src/agent/__tests__/AgentStateMachine.test.ts +2 -2
  70. package/src/agent/__tests__/createAgent.test.ts +4 -4
  71. package/src/agent/__tests__/engine/internal/messageAssemblerProcessor.test.ts +301 -97
  72. package/src/agent/__tests__/engine/internal/stateEventProcessor.test.ts +6 -6
  73. package/src/agent/__tests__/engine/internal/turnTrackerProcessor.test.ts +59 -78
  74. package/src/agent/__tests__/engine/mealy/Mealy.test.ts +3 -3
  75. package/src/agent/__tests__/engine/mealy/Store.test.ts +1 -1
  76. package/src/agent/__tests__/engine/mealy/combinators.test.ts +4 -4
  77. package/src/agent/createAgent.ts +15 -15
  78. package/src/agent/engine/AgentProcessor.ts +7 -7
  79. package/src/agent/engine/MealyMachine.ts +4 -4
  80. package/src/agent/engine/internal/index.ts +11 -11
  81. package/src/agent/engine/internal/messageAssemblerProcessor.ts +113 -128
  82. package/src/agent/engine/internal/stateEventProcessor.ts +13 -15
  83. package/src/agent/engine/internal/turnTrackerProcessor.ts +27 -31
  84. package/src/agent/engine/mealy/Mealy.ts +2 -2
  85. package/src/agent/engine/mealy/combinators.ts +10 -10
  86. package/src/agent/engine/mealy/index.ts +9 -11
  87. package/src/agent/index.ts +30 -32
  88. package/src/agent/types/engine.ts +3 -3
  89. package/src/agent/types/event.ts +4 -12
  90. package/src/agent/types/index.ts +86 -88
  91. package/src/agent/types/message.ts +9 -43
  92. package/src/bash/index.ts +21 -0
  93. package/src/bash/tool.ts +57 -0
  94. package/src/bash/types.ts +108 -0
  95. package/src/common/logger/ConsoleLogger.ts +1 -1
  96. package/src/common/logger/LoggerFactoryImpl.ts +14 -14
  97. package/src/common/logger/index.ts +3 -3
  98. package/src/container/index.ts +4 -5
  99. package/src/container/types.ts +1 -1
  100. package/src/driver/index.ts +15 -16
  101. package/src/driver/types.ts +201 -73
  102. package/src/event/EventBus.ts +10 -10
  103. package/src/event/__tests__/EventBus.test.ts +2 -2
  104. package/src/event/index.ts +2 -3
  105. package/src/event/types/agent.ts +186 -191
  106. package/src/event/types/bus.ts +1 -1
  107. package/src/event/types/command.ts +293 -264
  108. package/src/event/types/container.ts +207 -222
  109. package/src/event/types/driver.ts +153 -155
  110. package/src/event/types/index.ts +6 -12
  111. package/src/event/types/session.ts +117 -130
  112. package/src/image/Image.ts +12 -2
  113. package/src/image/index.ts +4 -5
  114. package/src/image/types.ts +8 -2
  115. package/src/mq/OffsetGenerator.ts +1 -1
  116. package/src/mq/__tests__/OffsetGenerator.test.ts +1 -1
  117. package/src/mq/index.ts +4 -5
  118. package/src/network/RpcClient.ts +26 -25
  119. package/src/network/index.ts +41 -44
  120. package/src/network/jsonrpc.ts +5 -5
  121. package/src/persistence/index.ts +5 -5
  122. package/src/persistence/types.ts +5 -2
  123. package/src/platform/index.ts +21 -0
  124. package/src/platform/types.ts +84 -0
  125. package/src/runtime/AgentXRuntime.ts +188 -61
  126. package/src/runtime/__tests__/AgentXRuntime.test.ts +343 -0
  127. package/src/runtime/index.ts +12 -25
  128. package/src/runtime/types.ts +10 -62
  129. package/src/session/index.ts +2 -3
  130. package/dist/chunk-7D4SUZUM.js +0 -38
  131. package/dist/chunk-AT5P47YA.js.map +0 -1
  132. package/dist/chunk-E5FPOAPO.js.map +0 -1
  133. package/dist/chunk-I7GYR3MN.js.map +0 -1
  134. package/dist/chunk-K6WXQ2RW.js.map +0 -1
  135. package/dist/workspace/index.d.ts +0 -111
  136. package/dist/wrapper-Y3UTVU2E.js +0 -3635
  137. package/dist/wrapper-Y3UTVU2E.js.map +0 -1
  138. package/src/workspace/index.ts +0 -27
  139. package/src/workspace/types.ts +0 -131
  140. /package/dist/{workspace → bash}/index.js.map +0 -0
  141. /package/dist/{chunk-7D4SUZUM.js.map → chunk-SKS7S2RY.js.map} +0 -0
  142. /package/dist/{workspace → platform}/index.js +0 -0
@@ -4,13 +4,13 @@
4
4
  * Tests the stateless event transformer: Stream Events -> State Events
5
5
  */
6
6
 
7
- import { describe, it, expect, beforeEach } from "bun:test";
7
+ import { beforeEach, describe, expect, it } from "bun:test";
8
8
  import {
9
- stateEventProcessor,
10
9
  createInitialStateEventProcessorContext,
11
10
  type StateEventProcessorContext,
12
11
  type StateEventProcessorInput,
13
12
  type StateEventProcessorOutput,
13
+ stateEventProcessor,
14
14
  } from "../../../engine/internal/stateEventProcessor";
15
15
 
16
16
  // Helper to create test events
@@ -67,7 +67,7 @@ describe("stateEventProcessor", () => {
67
67
  it("should emit conversation_end for end_turn stop reason", () => {
68
68
  const event = createStreamEvent("message_stop", { stopReason: "end_turn" });
69
69
 
70
- const [newContext, outputs] = stateEventProcessor(context, event);
70
+ const [_newContext, outputs] = stateEventProcessor(context, event);
71
71
 
72
72
  expect(outputs).toHaveLength(1);
73
73
  expect(outputs[0].type).toBe("conversation_end");
@@ -106,7 +106,7 @@ describe("stateEventProcessor", () => {
106
106
  it("should emit conversation_responding event", () => {
107
107
  const event = createStreamEvent("text_delta", { text: "Hello" });
108
108
 
109
- const [newContext, outputs] = stateEventProcessor(context, event);
109
+ const [_newContext, outputs] = stateEventProcessor(context, event);
110
110
 
111
111
  expect(outputs).toHaveLength(1);
112
112
  expect(outputs[0].type).toBe("conversation_responding");
@@ -122,7 +122,7 @@ describe("stateEventProcessor", () => {
122
122
  toolName: "search",
123
123
  });
124
124
 
125
- const [newContext, outputs] = stateEventProcessor(context, event);
125
+ const [_newContext, outputs] = stateEventProcessor(context, event);
126
126
 
127
127
  expect(outputs).toHaveLength(2);
128
128
 
@@ -157,7 +157,7 @@ describe("stateEventProcessor", () => {
157
157
  errorCode: "rate_limit",
158
158
  });
159
159
 
160
- const [newContext, outputs] = stateEventProcessor(context, event);
160
+ const [_newContext, outputs] = stateEventProcessor(context, event);
161
161
 
162
162
  expect(outputs).toHaveLength(1);
163
163
  expect(outputs[0].type).toBe("error_occurred");
@@ -2,15 +2,18 @@
2
2
  * turnTrackerProcessor.test.ts - Unit tests for turn tracker processor
3
3
  *
4
4
  * Tests the pure Mealy transition function that tracks request-response turn pairs.
5
+ * Turn events are derived entirely from stream-layer events:
6
+ * - message_start → turn_request
7
+ * - message_stop → turn_response
5
8
  */
6
9
 
7
- import { describe, it, expect, beforeEach } from "bun:test";
10
+ import { beforeEach, describe, expect, it } from "bun:test";
8
11
  import {
9
- turnTrackerProcessor,
10
12
  createInitialTurnTrackerState,
11
- type TurnTrackerState,
12
13
  type TurnTrackerInput,
13
14
  type TurnTrackerOutput,
15
+ type TurnTrackerState,
16
+ turnTrackerProcessor,
14
17
  } from "../../../engine/internal/turnTrackerProcessor";
15
18
 
16
19
  // Helper to create test events
@@ -18,23 +21,12 @@ function createEvent(type: string, data: unknown, timestamp = Date.now()): TurnT
18
21
  return { type, data, timestamp } as TurnTrackerInput;
19
22
  }
20
23
 
21
- // Helper to create user message event
22
- function createUserMessageEvent(
23
- content: string,
24
+ // Helper to create message_start event (begins a turn)
25
+ function createMessageStartEvent(
24
26
  messageId: string = `msg_${Date.now()}`,
25
27
  timestamp = Date.now()
26
28
  ): TurnTrackerInput {
27
- return createEvent(
28
- "user_message",
29
- {
30
- id: messageId,
31
- role: "user",
32
- subtype: "user",
33
- content,
34
- timestamp,
35
- },
36
- timestamp
37
- );
29
+ return createEvent("message_start", { messageId, model: "test-model" }, timestamp);
38
30
  }
39
31
 
40
32
  // Helper to create message_stop event
@@ -59,16 +51,15 @@ describe("turnTrackerProcessor", () => {
59
51
  });
60
52
  });
61
53
 
62
- describe("user_message event", () => {
54
+ describe("message_start event", () => {
63
55
  it("should create pending turn and emit turn_request", () => {
64
- const event = createUserMessageEvent("Hello", "msg_123", 1000);
56
+ const event = createMessageStartEvent("msg_123", 1000);
65
57
 
66
58
  const [newState, outputs] = turnTrackerProcessor(state, event);
67
59
 
68
60
  // Should have pending turn
69
61
  expect(newState.pendingTurn).not.toBeNull();
70
62
  expect(newState.pendingTurn?.messageId).toBe("msg_123");
71
- expect(newState.pendingTurn?.content).toBe("Hello");
72
63
  expect(newState.pendingTurn?.requestedAt).toBe(1000);
73
64
  expect(newState.pendingTurn?.turnId).toBeDefined();
74
65
 
@@ -76,35 +67,39 @@ describe("turnTrackerProcessor", () => {
76
67
  expect(outputs).toHaveLength(1);
77
68
  expect(outputs[0].type).toBe("turn_request");
78
69
  expect(outputs[0].data.messageId).toBe("msg_123");
79
- expect(outputs[0].data.content).toBe("Hello");
80
70
  expect(outputs[0].data.timestamp).toBe(1000);
81
71
  });
82
72
 
83
73
  it("should generate unique turn IDs", () => {
84
- const [state1, outputs1] = turnTrackerProcessor(
85
- state,
86
- createUserMessageEvent("First", "msg_1")
87
- );
74
+ const [state1, outputs1] = turnTrackerProcessor(state, createMessageStartEvent("msg_1"));
88
75
 
89
76
  // Complete the turn
90
77
  const [state2] = turnTrackerProcessor(state1, createMessageStopEvent("end_turn"));
91
78
 
92
79
  // Start new turn
93
- const [state3, outputs3] = turnTrackerProcessor(
94
- state2,
95
- createUserMessageEvent("Second", "msg_2")
96
- );
80
+ const [_state3, outputs3] = turnTrackerProcessor(state2, createMessageStartEvent("msg_2"));
97
81
 
98
82
  expect(outputs1[0].data.turnId).not.toBe(outputs3[0].data.turnId);
99
83
  });
100
84
 
101
- it("should handle empty content", () => {
102
- const event = createUserMessageEvent("", "msg_empty");
85
+ it("should NOT start a new turn if one is already pending", () => {
86
+ // Start first turn
87
+ const [state1, outputs1] = turnTrackerProcessor(
88
+ state,
89
+ createMessageStartEvent("msg_1", 1000)
90
+ );
91
+ expect(outputs1).toHaveLength(1);
103
92
 
104
- const [newState, outputs] = turnTrackerProcessor(state, event);
93
+ // Second message_start while turn is pending (e.g. after tool_use)
94
+ const [state2, outputs2] = turnTrackerProcessor(
95
+ state1,
96
+ createMessageStartEvent("msg_2", 1500)
97
+ );
105
98
 
106
- expect(newState.pendingTurn?.content).toBe("");
107
- expect(outputs[0].data.content).toBe("");
99
+ // Should NOT emit another turn_request
100
+ expect(outputs2).toHaveLength(0);
101
+ // Pending turn should still be the original
102
+ expect(state2.pendingTurn?.messageId).toBe("msg_1");
108
103
  });
109
104
  });
110
105
 
@@ -117,7 +112,7 @@ describe("turnTrackerProcessor", () => {
117
112
  pendingTurn: {
118
113
  turnId: "turn_123",
119
114
  messageId: "msg_123",
120
- content: "Test message",
115
+ content: "",
121
116
  requestedAt: 1000,
122
117
  },
123
118
  };
@@ -196,14 +191,23 @@ describe("turnTrackerProcessor", () => {
196
191
  });
197
192
  });
198
193
 
199
- describe("assistant_message event", () => {
200
- it("should not emit output (handled in message_stop)", () => {
194
+ describe("unhandled events", () => {
195
+ it("should pass through unhandled events", () => {
196
+ const event = createEvent("text_delta", { text: "Hello" });
197
+
198
+ const [newState, outputs] = turnTrackerProcessor(state, event);
199
+
200
+ expect(newState).toEqual(state);
201
+ expect(outputs).toHaveLength(0);
202
+ });
203
+
204
+ it("should ignore assistant_message (not a stream event)", () => {
201
205
  state = {
202
206
  ...state,
203
207
  pendingTurn: {
204
208
  turnId: "turn_123",
205
209
  messageId: "msg_123",
206
- content: "Test",
210
+ content: "",
207
211
  requestedAt: 1000,
208
212
  },
209
213
  };
@@ -216,39 +220,22 @@ describe("turnTrackerProcessor", () => {
216
220
 
217
221
  const [newState, outputs] = turnTrackerProcessor(state, event);
218
222
 
219
- // State should be unchanged
220
223
  expect(newState.pendingTurn).not.toBeNull();
221
-
222
- // No output
223
- expect(outputs).toHaveLength(0);
224
- });
225
- });
226
-
227
- describe("unhandled events", () => {
228
- it("should pass through unhandled events", () => {
229
- const event = createEvent("text_delta", { text: "Hello" });
230
-
231
- const [newState, outputs] = turnTrackerProcessor(state, event);
232
-
233
- expect(newState).toEqual(state);
234
224
  expect(outputs).toHaveLength(0);
235
225
  });
236
226
  });
237
227
 
238
228
  describe("complete turn flow", () => {
239
- it("should track complete turn from request to response", () => {
229
+ it("should track complete turn from message_start to message_stop", () => {
240
230
  const allOutputs: TurnTrackerOutput[] = [];
241
231
  let currentState = createInitialTurnTrackerState();
242
232
 
243
- // User sends message at time 1000
244
- const [s1, o1] = turnTrackerProcessor(
245
- currentState,
246
- createUserMessageEvent("What is 2+2?", "msg_1", 1000)
247
- );
233
+ // message_start at time 1000
234
+ const [s1, o1] = turnTrackerProcessor(currentState, createMessageStartEvent("msg_1", 1000));
248
235
  currentState = s1;
249
236
  allOutputs.push(...o1);
250
237
 
251
- // Assistant responds, message_stop at time 2500
238
+ // message_stop at time 2500
252
239
  const [s2, o2] = turnTrackerProcessor(currentState, createMessageStopEvent("end_turn", 2500));
253
240
  currentState = s2;
254
241
  allOutputs.push(...o2);
@@ -257,7 +244,7 @@ describe("turnTrackerProcessor", () => {
257
244
 
258
245
  // turn_request
259
246
  expect(allOutputs[0].type).toBe("turn_request");
260
- expect(allOutputs[0].data.content).toBe("What is 2+2?");
247
+ expect(allOutputs[0].data.messageId).toBe("msg_1");
261
248
 
262
249
  // turn_response
263
250
  expect(allOutputs[1].type).toBe("turn_response");
@@ -271,11 +258,8 @@ describe("turnTrackerProcessor", () => {
271
258
  const allOutputs: TurnTrackerOutput[] = [];
272
259
  let currentState = createInitialTurnTrackerState();
273
260
 
274
- // User sends message
275
- const [s1, o1] = turnTrackerProcessor(
276
- currentState,
277
- createUserMessageEvent("Search for X", "msg_1", 1000)
278
- );
261
+ // message_start begins the turn
262
+ const [s1, o1] = turnTrackerProcessor(currentState, createMessageStartEvent("msg_1", 1000));
279
263
  currentState = s1;
280
264
  allOutputs.push(...o1);
281
265
 
@@ -287,7 +271,13 @@ describe("turnTrackerProcessor", () => {
287
271
  expect(currentState.pendingTurn).not.toBeNull();
288
272
  expect(allOutputs).toHaveLength(1); // Only turn_request
289
273
 
290
- // Second message_stop with end_turn - turn completes
274
+ // Second message_start after tool_use should NOT start new turn (pending exists)
275
+ const [s2b, o2b] = turnTrackerProcessor(currentState, createMessageStartEvent("msg_2", 2000));
276
+ currentState = s2b;
277
+ allOutputs.push(...o2b);
278
+ expect(allOutputs).toHaveLength(1); // Still only turn_request
279
+
280
+ // Final message_stop with end_turn - turn completes
291
281
  const [s3, o3] = turnTrackerProcessor(currentState, createMessageStopEvent("end_turn", 3000));
292
282
  currentState = s3;
293
283
  allOutputs.push(...o3);
@@ -303,10 +293,7 @@ describe("turnTrackerProcessor", () => {
303
293
  const allTurnIds: string[] = [];
304
294
 
305
295
  // First turn
306
- const [s1, o1] = turnTrackerProcessor(
307
- currentState,
308
- createUserMessageEvent("First", "msg_1", 1000)
309
- );
296
+ const [s1, o1] = turnTrackerProcessor(currentState, createMessageStartEvent("msg_1", 1000));
310
297
  currentState = s1;
311
298
  allTurnIds.push(o1[0].data.turnId);
312
299
 
@@ -314,10 +301,7 @@ describe("turnTrackerProcessor", () => {
314
301
  currentState = s2;
315
302
 
316
303
  // Second turn
317
- const [s3, o3] = turnTrackerProcessor(
318
- currentState,
319
- createUserMessageEvent("Second", "msg_2", 2000)
320
- );
304
+ const [s3, o3] = turnTrackerProcessor(currentState, createMessageStartEvent("msg_2", 2000));
321
305
  currentState = s3;
322
306
  allTurnIds.push(o3[0].data.turnId);
323
307
 
@@ -325,10 +309,7 @@ describe("turnTrackerProcessor", () => {
325
309
  currentState = s4;
326
310
 
327
311
  // Third turn
328
- const [s5, o5] = turnTrackerProcessor(
329
- currentState,
330
- createUserMessageEvent("Third", "msg_3", 3000)
331
- );
312
+ const [s5, o5] = turnTrackerProcessor(currentState, createMessageStartEvent("msg_3", 3000));
332
313
  currentState = s5;
333
314
  allTurnIds.push(o5[0].data.turnId);
334
315
 
@@ -2,11 +2,11 @@
2
2
  * Mealy.test.ts - Unit tests for Mealy Machine runtime
3
3
  */
4
4
 
5
- import { describe, it, expect, beforeEach, mock } from "bun:test";
6
- import { Mealy, createMealy, type MealyConfig } from "../../../engine/mealy/Mealy";
7
- import { MemoryStore } from "../../../engine/mealy/Store";
5
+ import { beforeEach, describe, expect, it } from "bun:test";
6
+ import { createMealy, Mealy, type MealyConfig } from "../../../engine/mealy/Mealy";
8
7
  import type { Processor } from "../../../engine/mealy/Processor";
9
8
  import type { Sink, SinkDefinition } from "../../../engine/mealy/Sink";
9
+ import { MemoryStore } from "../../../engine/mealy/Store";
10
10
 
11
11
  // Test types
12
12
  interface TestState {
@@ -2,7 +2,7 @@
2
2
  * Store.test.ts - Unit tests for MemoryStore
3
3
  */
4
4
 
5
- import { describe, it, expect, beforeEach } from "bun:test";
5
+ import { beforeEach, describe, expect, it } from "bun:test";
6
6
  import { MemoryStore, type Store } from "../../../engine/mealy/Store";
7
7
 
8
8
  describe("MemoryStore", () => {
@@ -2,15 +2,15 @@
2
2
  * combinators.test.ts - Unit tests for Mealy processor combinators
3
3
  */
4
4
 
5
- import { describe, it, expect } from "bun:test";
5
+ import { describe, expect, it } from "bun:test";
6
6
  import {
7
- combineProcessors,
8
- combineInitialStates,
9
7
  chainProcessors,
8
+ combineInitialStates,
9
+ combineProcessors,
10
10
  filterProcessor,
11
+ identityProcessor,
11
12
  mapOutput,
12
13
  withLogging,
13
- identityProcessor,
14
14
  } from "../../../engine/mealy/combinators";
15
15
  import type { Processor } from "../../../engine/mealy/Processor";
16
16
 
@@ -21,29 +21,29 @@
21
21
  * ```
22
22
  */
23
23
 
24
+ import { createLogger } from "commonxjs/logger";
25
+ import { isDriveableEvent } from "../event";
26
+ import { AgentStateMachine } from "./AgentStateMachine";
27
+ import { MealyMachine } from "./engine/MealyMachine";
24
28
  import type {
25
29
  AgentEngine,
26
- AgentState,
30
+ AgentEventBus,
31
+ AgentInterceptor,
32
+ AgentMiddleware,
33
+ AgentOutput,
27
34
  AgentOutputCallback,
28
- UserMessage,
29
- MessageQueue,
30
- StateChangeHandler,
35
+ AgentPresenter,
36
+ AgentSource,
37
+ AgentState,
38
+ CreateAgentOptions,
31
39
  EventHandlerMap,
40
+ MessageQueue,
32
41
  ReactHandlerMap,
33
- AgentOutput,
34
- CreateAgentOptions,
35
- AgentSource,
36
- AgentPresenter,
37
- AgentEventBus,
42
+ StateChangeHandler,
38
43
  StreamEvent,
39
44
  Unsubscribe,
40
- AgentMiddleware,
41
- AgentInterceptor,
45
+ UserMessage,
42
46
  } from "./types";
43
- import { MealyMachine } from "./engine/MealyMachine";
44
- import { AgentStateMachine } from "./AgentStateMachine";
45
- import { createLogger } from "commonxjs/logger";
46
- import { isDriveableEvent } from "../event";
47
47
 
48
48
  const logger = createLogger("agent/AgentEngine");
49
49
 
@@ -5,24 +5,24 @@
5
5
  * Composes MessageAssembler, StateMachine, and TurnTracker processors.
6
6
  */
7
7
 
8
- import { combineProcessors, combineInitialStates, type Processor } from "./mealy";
8
+ import type { AgentOutput } from "../types";
9
9
  // Note: StreamEventType and MessageEventType are part of AgentOutput (from Presenter)
10
10
  // They flow through the system but AgentProcessor doesn't need to import them directly
11
11
  import {
12
- messageAssemblerProcessor,
13
- stateEventProcessor,
14
- turnTrackerProcessor,
15
12
  createInitialMessageAssemblerState,
16
13
  createInitialStateEventProcessorContext,
17
14
  createInitialTurnTrackerState,
15
+ type MessageAssemblerOutput,
18
16
  type MessageAssemblerState,
17
+ messageAssemblerProcessor,
19
18
  type StateEventProcessorContext,
20
- type TurnTrackerState,
21
- type MessageAssemblerOutput,
22
19
  type StateEventProcessorOutput,
20
+ stateEventProcessor,
23
21
  type TurnTrackerOutput,
22
+ type TurnTrackerState,
23
+ turnTrackerProcessor,
24
24
  } from "./internal";
25
- import type { AgentOutput } from "../types";
25
+ import { combineInitialStates, combineProcessors, type Processor } from "./mealy";
26
26
 
27
27
  /**
28
28
  * Combined state type for the full agent engine
@@ -19,7 +19,7 @@
19
19
  * AgentOutput (to AgentEngine/Presenter)
20
20
  * │
21
21
  * ├── StateEvent (conversation_start, conversation_end...)
22
- * ├── MessageEvent (assistant_message, tool_call_message...)
22
+ * ├── MessageEvent (assistant_message, tool_result_message...)
23
23
  * └── TurnEvent (turn_request, turn_response)
24
24
  * ```
25
25
  *
@@ -45,14 +45,14 @@
45
45
  * ```
46
46
  */
47
47
 
48
+ import { createLogger } from "commonxjs/logger";
49
+ import type { AgentOutput, StreamEvent } from "../types";
48
50
  import {
51
+ type AgentEngineState,
49
52
  agentProcessor,
50
53
  createInitialAgentEngineState,
51
- type AgentEngineState,
52
54
  } from "./AgentProcessor";
53
55
  import { MemoryStore } from "./mealy";
54
- import type { AgentOutput, StreamEvent } from "../types";
55
- import { createLogger } from "commonxjs/logger";
56
56
 
57
57
  const logger = createLogger("engine/MealyMachine");
58
58
 
@@ -6,30 +6,30 @@
6
6
  */
7
7
 
8
8
  export {
9
- messageAssemblerProcessor,
10
- messageAssemblerProcessorDef,
9
+ createInitialMessageAssemblerState,
11
10
  type MessageAssemblerInput,
12
11
  type MessageAssemblerOutput,
13
12
  type MessageAssemblerState,
13
+ messageAssemblerProcessor,
14
+ messageAssemblerProcessorDef,
14
15
  type PendingContent,
15
- createInitialMessageAssemblerState,
16
16
  } from "./messageAssemblerProcessor";
17
17
 
18
18
  export {
19
- stateEventProcessor,
20
- stateEventProcessorDef,
19
+ createInitialStateEventProcessorContext,
20
+ type StateEventProcessorContext,
21
21
  type StateEventProcessorInput,
22
22
  type StateEventProcessorOutput,
23
- type StateEventProcessorContext,
24
- createInitialStateEventProcessorContext,
23
+ stateEventProcessor,
24
+ stateEventProcessorDef,
25
25
  } from "./stateEventProcessor";
26
26
 
27
27
  export {
28
- turnTrackerProcessor,
29
- turnTrackerProcessorDef,
28
+ createInitialTurnTrackerState,
29
+ type PendingTurn,
30
30
  type TurnTrackerInput,
31
31
  type TurnTrackerOutput,
32
32
  type TurnTrackerState,
33
- type PendingTurn,
34
- createInitialTurnTrackerState,
33
+ turnTrackerProcessor,
34
+ turnTrackerProcessorDef,
35
35
  } from "./turnTrackerProcessor";