@agentxjs/core 1.9.1-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 (77) hide show
  1. package/package.json +31 -0
  2. package/src/agent/AgentStateMachine.ts +151 -0
  3. package/src/agent/README.md +296 -0
  4. package/src/agent/__tests__/AgentStateMachine.test.ts +346 -0
  5. package/src/agent/__tests__/createAgent.test.ts +728 -0
  6. package/src/agent/__tests__/engine/internal/messageAssemblerProcessor.test.ts +567 -0
  7. package/src/agent/__tests__/engine/internal/stateEventProcessor.test.ts +315 -0
  8. package/src/agent/__tests__/engine/internal/turnTrackerProcessor.test.ts +340 -0
  9. package/src/agent/__tests__/engine/mealy/Mealy.test.ts +370 -0
  10. package/src/agent/__tests__/engine/mealy/Store.test.ts +123 -0
  11. package/src/agent/__tests__/engine/mealy/combinators.test.ts +322 -0
  12. package/src/agent/createAgent.ts +467 -0
  13. package/src/agent/engine/AgentProcessor.ts +106 -0
  14. package/src/agent/engine/MealyMachine.ts +184 -0
  15. package/src/agent/engine/internal/index.ts +35 -0
  16. package/src/agent/engine/internal/messageAssemblerProcessor.ts +550 -0
  17. package/src/agent/engine/internal/stateEventProcessor.ts +313 -0
  18. package/src/agent/engine/internal/turnTrackerProcessor.ts +239 -0
  19. package/src/agent/engine/mealy/Mealy.ts +308 -0
  20. package/src/agent/engine/mealy/Processor.ts +70 -0
  21. package/src/agent/engine/mealy/Sink.ts +56 -0
  22. package/src/agent/engine/mealy/Source.ts +51 -0
  23. package/src/agent/engine/mealy/Store.ts +98 -0
  24. package/src/agent/engine/mealy/combinators.ts +176 -0
  25. package/src/agent/engine/mealy/index.ts +45 -0
  26. package/src/agent/index.ts +106 -0
  27. package/src/agent/types/engine.ts +395 -0
  28. package/src/agent/types/event.ts +478 -0
  29. package/src/agent/types/index.ts +197 -0
  30. package/src/agent/types/message.ts +387 -0
  31. package/src/common/index.ts +8 -0
  32. package/src/common/logger/ConsoleLogger.ts +137 -0
  33. package/src/common/logger/LoggerFactoryImpl.ts +123 -0
  34. package/src/common/logger/index.ts +26 -0
  35. package/src/common/logger/types.ts +98 -0
  36. package/src/container/Container.ts +185 -0
  37. package/src/container/index.ts +44 -0
  38. package/src/container/types.ts +71 -0
  39. package/src/driver/index.ts +42 -0
  40. package/src/driver/types.ts +363 -0
  41. package/src/event/EventBus.ts +260 -0
  42. package/src/event/README.md +237 -0
  43. package/src/event/__tests__/EventBus.test.ts +251 -0
  44. package/src/event/index.ts +46 -0
  45. package/src/event/types/agent.ts +512 -0
  46. package/src/event/types/base.ts +241 -0
  47. package/src/event/types/bus.ts +429 -0
  48. package/src/event/types/command.ts +749 -0
  49. package/src/event/types/container.ts +471 -0
  50. package/src/event/types/driver.ts +452 -0
  51. package/src/event/types/index.ts +26 -0
  52. package/src/event/types/session.ts +314 -0
  53. package/src/image/Image.ts +203 -0
  54. package/src/image/index.ts +36 -0
  55. package/src/image/types.ts +77 -0
  56. package/src/index.ts +20 -0
  57. package/src/mq/OffsetGenerator.ts +48 -0
  58. package/src/mq/README.md +166 -0
  59. package/src/mq/__tests__/OffsetGenerator.test.ts +121 -0
  60. package/src/mq/index.ts +18 -0
  61. package/src/mq/types.ts +172 -0
  62. package/src/network/RpcClient.ts +455 -0
  63. package/src/network/index.ts +76 -0
  64. package/src/network/jsonrpc.ts +336 -0
  65. package/src/network/protocol.ts +90 -0
  66. package/src/network/types.ts +284 -0
  67. package/src/persistence/index.ts +27 -0
  68. package/src/persistence/types.ts +226 -0
  69. package/src/runtime/AgentXRuntime.ts +501 -0
  70. package/src/runtime/index.ts +56 -0
  71. package/src/runtime/types.ts +236 -0
  72. package/src/session/Session.ts +71 -0
  73. package/src/session/index.ts +25 -0
  74. package/src/session/types.ts +77 -0
  75. package/src/workspace/index.ts +27 -0
  76. package/src/workspace/types.ts +131 -0
  77. package/tsconfig.json +10 -0
@@ -0,0 +1,512 @@
1
+ /**
2
+ * Agent Events - Events from Agent domain (stream/state/message/turn)
3
+ *
4
+ * Agent events for the EventBus system.
5
+ */
6
+
7
+ import type {
8
+ UserMessage,
9
+ AssistantMessage,
10
+ ToolCallMessage,
11
+ ToolResultMessage,
12
+ ErrorMessage,
13
+ } from "../../agent/types";
14
+ import type { SystemEvent, EventContext } from "./base";
15
+ import type { StopReason } from "./driver";
16
+
17
+ // ============================================================================
18
+ // Agent Event Categories and Base Types
19
+ // ============================================================================
20
+
21
+ /**
22
+ * Agent event categories
23
+ */
24
+ export type AgentEventCategory = "stream" | "state" | "message" | "turn";
25
+
26
+ /**
27
+ * BaseAgentEvent - Base interface for all Agent events
28
+ *
29
+ * Extends SystemEvent with fixed source and intent.
30
+ */
31
+ export interface BaseAgentEvent<
32
+ T extends string,
33
+ D,
34
+ C extends AgentEventCategory,
35
+ > extends SystemEvent<T, D, "agent", C, "notification"> {
36
+ /**
37
+ * Runtime context (optional, added by Presenter)
38
+ */
39
+ readonly context?: EventContext;
40
+ }
41
+
42
+ // ============================================================================
43
+ // Agent Stream Events
44
+ // ============================================================================
45
+
46
+ /**
47
+ * Base type for agent stream events
48
+ */
49
+ export interface AgentStreamEventBase<T extends string, D> extends BaseAgentEvent<T, D, "stream"> {}
50
+
51
+ // Re-export StopReason for convenience (as AgentStopReason to avoid conflict)
52
+ export type AgentStopReason = StopReason;
53
+
54
+ /**
55
+ * AgentMessageStartEvent - Streaming message begins
56
+ */
57
+ export interface AgentMessageStartEvent extends AgentStreamEventBase<
58
+ "message_start",
59
+ {
60
+ messageId: string;
61
+ model: string;
62
+ }
63
+ > {}
64
+
65
+ /**
66
+ * AgentMessageDeltaEvent - Message-level updates (usage info)
67
+ */
68
+ export interface AgentMessageDeltaEvent extends AgentStreamEventBase<
69
+ "message_delta",
70
+ {
71
+ usage?: {
72
+ inputTokens: number;
73
+ outputTokens: number;
74
+ };
75
+ }
76
+ > {}
77
+
78
+ /**
79
+ * AgentMessageStopEvent - Streaming message completes
80
+ */
81
+ export interface AgentMessageStopEvent extends AgentStreamEventBase<
82
+ "message_stop",
83
+ {
84
+ stopReason?: StopReason;
85
+ }
86
+ > {}
87
+
88
+ /**
89
+ * AgentTextDeltaEvent - Incremental text output
90
+ */
91
+ export interface AgentTextDeltaEvent extends AgentStreamEventBase<
92
+ "text_delta",
93
+ {
94
+ text: string;
95
+ }
96
+ > {}
97
+
98
+ /**
99
+ * AgentToolUseStartEvent - Tool use block started
100
+ */
101
+ export interface AgentToolUseStartEvent extends AgentStreamEventBase<
102
+ "tool_use_start",
103
+ {
104
+ toolCallId: string;
105
+ toolName: string;
106
+ }
107
+ > {}
108
+
109
+ /**
110
+ * AgentInputJsonDeltaEvent - Incremental tool input JSON
111
+ */
112
+ export interface AgentInputJsonDeltaEvent extends AgentStreamEventBase<
113
+ "input_json_delta",
114
+ {
115
+ partialJson: string;
116
+ }
117
+ > {}
118
+
119
+ /**
120
+ * AgentToolUseStopEvent - Tool use block completed
121
+ */
122
+ export interface AgentToolUseStopEvent extends AgentStreamEventBase<
123
+ "tool_use_stop",
124
+ {
125
+ toolCallId: string;
126
+ toolName: string;
127
+ input: Record<string, unknown>;
128
+ }
129
+ > {}
130
+
131
+ /**
132
+ * AgentToolResultEvent - Tool execution result
133
+ */
134
+ export interface AgentToolResultEvent extends AgentStreamEventBase<
135
+ "tool_result",
136
+ {
137
+ toolCallId: string;
138
+ result: unknown;
139
+ isError?: boolean;
140
+ }
141
+ > {}
142
+
143
+ /**
144
+ * AgentErrorReceivedEvent - Error received from environment
145
+ *
146
+ * Processed by MealyMachine to produce:
147
+ * - error_occurred (StateEvent)
148
+ * - error_message (MessageEvent)
149
+ */
150
+ export interface AgentErrorReceivedEvent extends AgentStreamEventBase<
151
+ "error_received",
152
+ {
153
+ /** Error message (human-readable) */
154
+ message: string;
155
+ /** Error code (e.g., "rate_limit_error", "api_error") */
156
+ errorCode?: string;
157
+ }
158
+ > {}
159
+
160
+ /**
161
+ * AgentStreamEvent - All stream events
162
+ */
163
+ export type AgentStreamEvent =
164
+ | AgentMessageStartEvent
165
+ | AgentMessageDeltaEvent
166
+ | AgentMessageStopEvent
167
+ | AgentTextDeltaEvent
168
+ | AgentToolUseStartEvent
169
+ | AgentInputJsonDeltaEvent
170
+ | AgentToolUseStopEvent
171
+ | AgentToolResultEvent
172
+ | AgentErrorReceivedEvent;
173
+
174
+ /**
175
+ * AgentStreamEventType - String literal union
176
+ */
177
+ export type AgentStreamEventType = AgentStreamEvent["type"];
178
+
179
+ /**
180
+ * Type guard: is this a stream event?
181
+ */
182
+ export function isAgentStreamEvent(event: {
183
+ source?: string;
184
+ category?: string;
185
+ }): event is AgentStreamEvent {
186
+ return event.source === "agent" && event.category === "stream";
187
+ }
188
+
189
+ // ============================================================================
190
+ // Agent State Events
191
+ // ============================================================================
192
+
193
+ /**
194
+ * Base type for state events
195
+ */
196
+ export interface AgentStateEventBase<T extends string, D> extends BaseAgentEvent<T, D, "state"> {}
197
+
198
+ // Conversation Events
199
+ /**
200
+ * ConversationQueuedEvent - Message queued for processing
201
+ */
202
+ export interface ConversationQueuedEvent extends AgentStateEventBase<
203
+ "conversation_queued",
204
+ {
205
+ messageId: string;
206
+ }
207
+ > {}
208
+
209
+ /**
210
+ * ConversationStartEvent - Conversation started
211
+ */
212
+ export interface ConversationStartEvent extends AgentStateEventBase<
213
+ "conversation_start",
214
+ {
215
+ messageId: string;
216
+ }
217
+ > {}
218
+
219
+ /**
220
+ * ConversationThinkingEvent - Agent is thinking
221
+ */
222
+ export interface ConversationThinkingEvent extends AgentStateEventBase<
223
+ "conversation_thinking",
224
+ Record<string, never>
225
+ > {}
226
+
227
+ /**
228
+ * ConversationRespondingEvent - Agent is responding
229
+ */
230
+ export interface ConversationRespondingEvent extends AgentStateEventBase<
231
+ "conversation_responding",
232
+ Record<string, never>
233
+ > {}
234
+
235
+ /**
236
+ * ConversationEndEvent - Conversation ended
237
+ */
238
+ export interface ConversationEndEvent extends AgentStateEventBase<
239
+ "conversation_end",
240
+ {
241
+ reason: "completed" | "interrupted" | "error";
242
+ }
243
+ > {}
244
+
245
+ /**
246
+ * ConversationInterruptedEvent - Conversation interrupted
247
+ */
248
+ export interface ConversationInterruptedEvent extends AgentStateEventBase<
249
+ "conversation_interrupted",
250
+ {
251
+ reason: string;
252
+ }
253
+ > {}
254
+
255
+ // Tool Events
256
+ /**
257
+ * ToolPlannedEvent - Tool use planned
258
+ */
259
+ export interface ToolPlannedEvent extends AgentStateEventBase<
260
+ "tool_planned",
261
+ {
262
+ toolId: string;
263
+ toolName: string;
264
+ }
265
+ > {}
266
+
267
+ /**
268
+ * ToolExecutingEvent - Tool is executing
269
+ */
270
+ export interface ToolExecutingEvent extends AgentStateEventBase<
271
+ "tool_executing",
272
+ {
273
+ toolId: string;
274
+ toolName: string;
275
+ input: Record<string, unknown>;
276
+ }
277
+ > {}
278
+
279
+ /**
280
+ * ToolCompletedEvent - Tool execution completed
281
+ */
282
+ export interface ToolCompletedEvent extends AgentStateEventBase<
283
+ "tool_completed",
284
+ {
285
+ toolId: string;
286
+ toolName: string;
287
+ result: unknown;
288
+ }
289
+ > {}
290
+
291
+ /**
292
+ * ToolFailedEvent - Tool execution failed
293
+ */
294
+ export interface ToolFailedEvent extends AgentStateEventBase<
295
+ "tool_failed",
296
+ {
297
+ toolId: string;
298
+ toolName: string;
299
+ error: string;
300
+ }
301
+ > {}
302
+
303
+ // Error Events (State)
304
+ /**
305
+ * ErrorOccurredEvent - Error occurred during processing
306
+ */
307
+ export interface ErrorOccurredEvent extends AgentStateEventBase<
308
+ "error_occurred",
309
+ {
310
+ code: string;
311
+ message: string;
312
+ recoverable: boolean;
313
+ category?: string;
314
+ }
315
+ > {}
316
+
317
+ /**
318
+ * AgentStateEvent - All state events
319
+ */
320
+ export type AgentStateEvent =
321
+ // Conversation
322
+ | ConversationQueuedEvent
323
+ | ConversationStartEvent
324
+ | ConversationThinkingEvent
325
+ | ConversationRespondingEvent
326
+ | ConversationEndEvent
327
+ | ConversationInterruptedEvent
328
+ // Tool
329
+ | ToolPlannedEvent
330
+ | ToolExecutingEvent
331
+ | ToolCompletedEvent
332
+ | ToolFailedEvent
333
+ // Error
334
+ | ErrorOccurredEvent;
335
+
336
+ /**
337
+ * AgentStateEventType - String literal union
338
+ */
339
+ export type AgentStateEventType = AgentStateEvent["type"];
340
+
341
+ /**
342
+ * Type guard: is this a state event?
343
+ */
344
+ export function isAgentStateEvent(event: {
345
+ source?: string;
346
+ category?: string;
347
+ }): event is AgentStateEvent {
348
+ return event.source === "agent" && event.category === "state";
349
+ }
350
+
351
+ // ============================================================================
352
+ // Agent Message Events
353
+ // ============================================================================
354
+
355
+ /**
356
+ * Base type for message events
357
+ */
358
+ export interface AgentMessageEventBase<T extends string, D> extends BaseAgentEvent<
359
+ T,
360
+ D,
361
+ "message"
362
+ > {}
363
+
364
+ /**
365
+ * UserMessageEvent - User sent a message
366
+ * Data: Complete UserMessage object
367
+ */
368
+ export interface UserMessageEvent extends AgentMessageEventBase<"user_message", UserMessage> {}
369
+
370
+ /**
371
+ * AssistantMessageEvent - Assistant response message
372
+ * Data: Complete AssistantMessage object
373
+ */
374
+ export interface AssistantMessageEvent extends AgentMessageEventBase<
375
+ "assistant_message",
376
+ AssistantMessage
377
+ > {}
378
+
379
+ /**
380
+ * ToolCallMessageEvent - Tool call message (part of assistant turn)
381
+ * Data: Complete ToolCallMessage object
382
+ */
383
+ export interface ToolCallMessageEvent extends AgentMessageEventBase<
384
+ "tool_call_message",
385
+ ToolCallMessage
386
+ > {}
387
+
388
+ /**
389
+ * ToolResultMessageEvent - Tool result message
390
+ * Data: Complete ToolResultMessage object
391
+ */
392
+ export interface ToolResultMessageEvent extends AgentMessageEventBase<
393
+ "tool_result_message",
394
+ ToolResultMessage
395
+ > {}
396
+
397
+ /**
398
+ * ErrorMessageEvent - Error message displayed in chat
399
+ * Data: Complete ErrorMessage object
400
+ *
401
+ * Generated when error_received StreamEvent is processed by MealyMachine.
402
+ * Displayed in the chat history so users can see what went wrong.
403
+ */
404
+ export interface ErrorMessageEvent extends AgentMessageEventBase<"error_message", ErrorMessage> {}
405
+
406
+ /**
407
+ * AgentMessageEvent - All message events
408
+ */
409
+ export type AgentMessageEvent =
410
+ | UserMessageEvent
411
+ | AssistantMessageEvent
412
+ | ToolCallMessageEvent
413
+ | ToolResultMessageEvent
414
+ | ErrorMessageEvent;
415
+
416
+ /**
417
+ * AgentMessageEventType - String literal union
418
+ */
419
+ export type AgentMessageEventType = AgentMessageEvent["type"];
420
+
421
+ /**
422
+ * Type guard: is this a message event?
423
+ */
424
+ export function isAgentMessageEvent(event: {
425
+ source?: string;
426
+ category?: string;
427
+ }): event is AgentMessageEvent {
428
+ return event.source === "agent" && event.category === "message";
429
+ }
430
+
431
+ // ============================================================================
432
+ // Agent Turn Events
433
+ // ============================================================================
434
+
435
+ /**
436
+ * Base type for turn events
437
+ */
438
+ export interface AgentTurnEventBase<T extends string, D> extends BaseAgentEvent<T, D, "turn"> {}
439
+
440
+ /**
441
+ * Token usage information
442
+ */
443
+ export interface TokenUsage {
444
+ inputTokens: number;
445
+ outputTokens: number;
446
+ totalTokens?: number;
447
+ }
448
+
449
+ /**
450
+ * TurnRequestEvent - Turn started (user message received)
451
+ */
452
+ export interface TurnRequestEvent extends AgentTurnEventBase<
453
+ "turn_request",
454
+ {
455
+ turnId: string;
456
+ messageId: string;
457
+ content: string;
458
+ timestamp: number;
459
+ }
460
+ > {}
461
+
462
+ /**
463
+ * TurnResponseEvent - Turn completed (assistant response finished)
464
+ */
465
+ export interface TurnResponseEvent extends AgentTurnEventBase<
466
+ "turn_response",
467
+ {
468
+ turnId: string;
469
+ messageId: string;
470
+ duration: number;
471
+ usage?: TokenUsage;
472
+ model?: string;
473
+ stopReason?: string;
474
+ timestamp: number;
475
+ }
476
+ > {}
477
+
478
+ /**
479
+ * AgentTurnEvent - All turn events
480
+ */
481
+ export type AgentTurnEvent = TurnRequestEvent | TurnResponseEvent;
482
+
483
+ /**
484
+ * AgentTurnEventType - String literal union
485
+ */
486
+ export type AgentTurnEventType = AgentTurnEvent["type"];
487
+
488
+ /**
489
+ * Type guard: is this a turn event?
490
+ */
491
+ export function isAgentTurnEvent(event: {
492
+ source?: string;
493
+ category?: string;
494
+ }): event is AgentTurnEvent {
495
+ return event.source === "agent" && event.category === "turn";
496
+ }
497
+
498
+ // ============================================================================
499
+ // Agent Event Union
500
+ // ============================================================================
501
+
502
+ /**
503
+ * AgentEvent - All events from Agent domain
504
+ */
505
+ export type AgentEvent = AgentStreamEvent | AgentStateEvent | AgentMessageEvent | AgentTurnEvent;
506
+
507
+ /**
508
+ * Type guard: is this an agent event?
509
+ */
510
+ export function isAgentEvent(event: { source?: string }): event is AgentEvent {
511
+ return event.source === "agent";
512
+ }