@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,452 @@
1
+ /**
2
+ * Environment Events - External world events (LLM API, Network)
3
+ *
4
+ * DriveableEvent, ConnectionEvent, StopReason, ErrorEvent
5
+ */
6
+
7
+ import type { SystemEvent } from "./base";
8
+
9
+ // ============================================================================
10
+ // Stop Reason
11
+ // ============================================================================
12
+
13
+ /**
14
+ * Reason why the LLM stopped generating
15
+ *
16
+ * Based on common stop reasons across multiple LLM providers:
17
+ * - Anthropic Claude: end_turn, max_tokens, tool_use, stop_sequence
18
+ * - OpenAI: stop, length, tool_calls, content_filter
19
+ * - Vercel AI SDK: stop, length, tool-calls, content-filter, error, other
20
+ */
21
+ export type StopReason =
22
+ /**
23
+ * Natural completion - model decided to stop
24
+ */
25
+ | "end_turn"
26
+
27
+ /**
28
+ * Reached maximum token limit
29
+ */
30
+ | "max_tokens"
31
+
32
+ /**
33
+ * Model requested tool usage
34
+ */
35
+ | "tool_use"
36
+
37
+ /**
38
+ * Encountered a custom stop sequence
39
+ */
40
+ | "stop_sequence"
41
+
42
+ /**
43
+ * Content filter triggered
44
+ */
45
+ | "content_filter"
46
+
47
+ /**
48
+ * Error occurred during generation
49
+ */
50
+ | "error"
51
+
52
+ /**
53
+ * Other/unknown reason
54
+ */
55
+ | "other";
56
+
57
+ /**
58
+ * Type guard to check if a string is a valid StopReason
59
+ */
60
+ export function isStopReason(value: string): value is StopReason {
61
+ return [
62
+ "end_turn",
63
+ "max_tokens",
64
+ "tool_use",
65
+ "stop_sequence",
66
+ "content_filter",
67
+ "error",
68
+ "other",
69
+ ].includes(value);
70
+ }
71
+
72
+ // ============================================================================
73
+ // Driveable Events (LLM Stream Events)
74
+ // ============================================================================
75
+
76
+ /**
77
+ * Base interface for all LLM stream events (DriveableEvent)
78
+ *
79
+ * All DriveableEvents have:
80
+ * - source: "driver" (from LLM Driver)
81
+ * - category: "stream" (streaming output)
82
+ * - intent: "notification" (informational, no action needed)
83
+ * - requestId: correlation with the original request
84
+ * - context: agent/image/session scope (inherited from SystemEvent)
85
+ */
86
+ interface BaseStreamEvent<T extends string, D = unknown> extends SystemEvent<
87
+ T,
88
+ D,
89
+ "driver",
90
+ "stream",
91
+ "notification"
92
+ > {
93
+ /**
94
+ * Content block index (for multi-block responses)
95
+ */
96
+ index?: number;
97
+
98
+ /**
99
+ * Request ID for correlating events with the original message_send_request
100
+ */
101
+ requestId?: string;
102
+ }
103
+
104
+ // Message Lifecycle Events
105
+ /**
106
+ * MessageStartEvent - Emitted when streaming message begins
107
+ */
108
+ export interface MessageStartEvent extends BaseStreamEvent<
109
+ "message_start",
110
+ {
111
+ message: {
112
+ id: string;
113
+ model: string;
114
+ };
115
+ }
116
+ > {}
117
+
118
+ /**
119
+ * MessageDeltaEvent - Emitted with message-level updates
120
+ */
121
+ export interface MessageDeltaEvent extends BaseStreamEvent<
122
+ "message_delta",
123
+ {
124
+ usage?: {
125
+ inputTokens: number;
126
+ outputTokens: number;
127
+ };
128
+ }
129
+ > {}
130
+
131
+ /**
132
+ * MessageStopEvent - Emitted when streaming message completes
133
+ */
134
+ export interface MessageStopEvent extends BaseStreamEvent<
135
+ "message_stop",
136
+ {
137
+ stopReason?: StopReason;
138
+ stopSequence?: string;
139
+ }
140
+ > {}
141
+
142
+ // Text Content Block Events
143
+ /**
144
+ * TextContentBlockStartEvent - Text block started
145
+ */
146
+ export interface TextContentBlockStartEvent extends BaseStreamEvent<
147
+ "text_content_block_start",
148
+ Record<string, never>
149
+ > {
150
+ index: number;
151
+ }
152
+
153
+ /**
154
+ * TextDeltaEvent - Incremental text output
155
+ */
156
+ export interface TextDeltaEvent extends BaseStreamEvent<
157
+ "text_delta",
158
+ {
159
+ text: string;
160
+ }
161
+ > {}
162
+
163
+ /**
164
+ * TextContentBlockStopEvent - Text block completed
165
+ */
166
+ export interface TextContentBlockStopEvent extends BaseStreamEvent<
167
+ "text_content_block_stop",
168
+ Record<string, never>
169
+ > {
170
+ index: number;
171
+ }
172
+
173
+ // Tool Use Content Block Events
174
+ /**
175
+ * ToolUseContentBlockStartEvent - Tool use block started
176
+ */
177
+ export interface ToolUseContentBlockStartEvent extends BaseStreamEvent<
178
+ "tool_use_content_block_start",
179
+ {
180
+ id: string;
181
+ name: string;
182
+ }
183
+ > {
184
+ index: number;
185
+ }
186
+
187
+ /**
188
+ * InputJsonDeltaEvent - Incremental tool input JSON
189
+ */
190
+ export interface InputJsonDeltaEvent extends BaseStreamEvent<
191
+ "input_json_delta",
192
+ {
193
+ partialJson: string;
194
+ }
195
+ > {
196
+ index: number;
197
+ }
198
+
199
+ /**
200
+ * ToolUseContentBlockStopEvent - Tool use block completed
201
+ */
202
+ export interface ToolUseContentBlockStopEvent extends BaseStreamEvent<
203
+ "tool_use_content_block_stop",
204
+ Record<string, never>
205
+ > {
206
+ index: number;
207
+ }
208
+
209
+ // Tool Execution Events
210
+ /**
211
+ * ToolCallEvent - Tool call ready for execution
212
+ */
213
+ export interface ToolCallEvent extends BaseStreamEvent<
214
+ "tool_call",
215
+ {
216
+ id: string;
217
+ name: string;
218
+ input: Record<string, unknown>;
219
+ }
220
+ > {}
221
+
222
+ /**
223
+ * ToolResultEvent - Tool execution result
224
+ */
225
+ export interface ToolResultEvent extends BaseStreamEvent<
226
+ "tool_result",
227
+ {
228
+ toolUseId: string;
229
+ result: unknown;
230
+ isError?: boolean;
231
+ }
232
+ > {}
233
+
234
+ // Interrupt Event
235
+ /**
236
+ * InterruptedEvent - Stream interrupted
237
+ */
238
+ export interface InterruptedEvent extends BaseStreamEvent<
239
+ "interrupted",
240
+ {
241
+ reason: "user_interrupt" | "timeout" | "error" | "system";
242
+ }
243
+ > {}
244
+
245
+ // Error Event (Environment)
246
+ /**
247
+ * ErrorReceivedEvent - Error received from environment (e.g., Claude API error)
248
+ *
249
+ * This event drives the MealyMachine to produce:
250
+ * - error_occurred (StateEvent) -> state transitions to "error"
251
+ * - error_message (MessageEvent) -> displayed in chat
252
+ */
253
+ export interface ErrorReceivedEvent extends BaseStreamEvent<
254
+ "error_received",
255
+ {
256
+ /** Error message (human-readable) */
257
+ message: string;
258
+ /** Error code (e.g., "rate_limit_error", "api_error", "overloaded_error") */
259
+ errorCode?: string;
260
+ }
261
+ > {}
262
+
263
+ /**
264
+ * DriveableEvent - All events that can drive Agent
265
+ */
266
+ export type DriveableEvent =
267
+ // Message lifecycle
268
+ | MessageStartEvent
269
+ | MessageDeltaEvent
270
+ | MessageStopEvent
271
+ // Text content block
272
+ | TextContentBlockStartEvent
273
+ | TextDeltaEvent
274
+ | TextContentBlockStopEvent
275
+ // Tool use content block
276
+ | ToolUseContentBlockStartEvent
277
+ | InputJsonDeltaEvent
278
+ | ToolUseContentBlockStopEvent
279
+ // Tool execution
280
+ | ToolCallEvent
281
+ | ToolResultEvent
282
+ // Interrupt
283
+ | InterruptedEvent
284
+ // Error
285
+ | ErrorReceivedEvent;
286
+
287
+ /**
288
+ * DriveableEventType - String literal union of all driveable event types
289
+ */
290
+ export type DriveableEventType = DriveableEvent["type"];
291
+
292
+ /**
293
+ * Type guard: is this a DriveableEvent?
294
+ */
295
+ export function isDriveableEvent(event: {
296
+ source?: string;
297
+ category?: string;
298
+ }): event is DriveableEvent {
299
+ return event.source === "driver" && event.category === "stream";
300
+ }
301
+
302
+ // ============================================================================
303
+ // Connection Events (Network Status)
304
+ // ============================================================================
305
+
306
+ /**
307
+ * Base interface for all connection events
308
+ */
309
+ interface BaseConnectionEvent<T extends string, D = unknown> extends SystemEvent<
310
+ T,
311
+ D,
312
+ "driver",
313
+ "connection",
314
+ "notification"
315
+ > {}
316
+
317
+ /**
318
+ * ConnectedEvent - Connection established
319
+ */
320
+ export interface ConnectedEvent extends BaseConnectionEvent<
321
+ "connected",
322
+ {
323
+ url?: string;
324
+ reconnectAttempt?: number;
325
+ }
326
+ > {}
327
+
328
+ /**
329
+ * DisconnectedEvent - Connection lost
330
+ */
331
+ export interface DisconnectedEvent extends BaseConnectionEvent<
332
+ "disconnected",
333
+ {
334
+ reason?: string;
335
+ code?: number;
336
+ willReconnect?: boolean;
337
+ }
338
+ > {}
339
+
340
+ /**
341
+ * ReconnectingEvent - Attempting to reconnect
342
+ */
343
+ export interface ReconnectingEvent extends BaseConnectionEvent<
344
+ "reconnecting",
345
+ {
346
+ attempt: number;
347
+ maxAttempts?: number;
348
+ delayMs: number;
349
+ }
350
+ > {}
351
+
352
+ /**
353
+ * ConnectionEvent - All network status events
354
+ */
355
+ export type ConnectionEvent = ConnectedEvent | DisconnectedEvent | ReconnectingEvent;
356
+
357
+ /**
358
+ * ConnectionEventType - String literal union
359
+ */
360
+ export type ConnectionEventType = ConnectionEvent["type"];
361
+
362
+ /**
363
+ * Type guard: is this a ConnectionEvent?
364
+ */
365
+ export function isConnectionEvent(event: {
366
+ source?: string;
367
+ category?: string;
368
+ }): event is ConnectionEvent {
369
+ return event.source === "driver" && event.category === "connection";
370
+ }
371
+
372
+ /**
373
+ * EnvironmentEvent - Union of all environment events
374
+ */
375
+ export type EnvironmentEvent = DriveableEvent | ConnectionEvent;
376
+
377
+ // ============================================================================
378
+ // Error Events (System-wide error notifications)
379
+ // ============================================================================
380
+
381
+ /**
382
+ * SystemError - Generic error event
383
+ *
384
+ * Used for all errors until we create specific error types.
385
+ * Can originate from any source (runtime, agent, container, etc.)
386
+ *
387
+ * @example
388
+ * ```typescript
389
+ * const error: SystemError = {
390
+ * type: "system_error",
391
+ * timestamp: Date.now(),
392
+ * source: "container",
393
+ * category: "error",
394
+ * intent: "notification",
395
+ * data: {
396
+ * message: "Container not found: default",
397
+ * requestId: "req_123",
398
+ * severity: "error",
399
+ * },
400
+ * context: { containerId: "default" }
401
+ * };
402
+ * ```
403
+ */
404
+ export interface SystemError extends SystemEvent<
405
+ "system_error",
406
+ {
407
+ /**
408
+ * Error message (human-readable)
409
+ */
410
+ message: string;
411
+
412
+ /**
413
+ * Associated request ID (if error is related to a request)
414
+ */
415
+ requestId?: string;
416
+
417
+ /**
418
+ * Error severity
419
+ * - info: Informational, no action needed
420
+ * - warn: Warning, operation succeeded but with issues
421
+ * - error: Error, operation failed
422
+ * - fatal: Fatal error, system unstable
423
+ */
424
+ severity?: "info" | "warn" | "error" | "fatal";
425
+
426
+ /**
427
+ * Additional error details (stack trace, error code, etc.)
428
+ */
429
+ details?: unknown;
430
+ },
431
+ "agent" | "container" | "driver" | "session" | "sandbox" | "command",
432
+ "error",
433
+ "notification"
434
+ > {}
435
+
436
+ /**
437
+ * Error event map - will grow as we add specific error types
438
+ */
439
+ export interface ErrorEventMap {
440
+ system_error: SystemError;
441
+ // Future: container_not_found_error, agent_creation_error, llm_api_error, etc.
442
+ }
443
+
444
+ /**
445
+ * Error event types
446
+ */
447
+ export type ErrorEventType = keyof ErrorEventMap;
448
+
449
+ /**
450
+ * Union of all error events
451
+ */
452
+ export type ErrorEvent = ErrorEventMap[ErrorEventType];
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Event Types - Re-export all event type definitions
3
+ *
4
+ * This module re-exports all event types from the split files for convenience.
5
+ */
6
+
7
+ // Base types
8
+ export * from "./base";
9
+
10
+ // Bus interfaces (EventBus, EventProducer, EventConsumer)
11
+ export * from "./bus";
12
+
13
+ // Driver events (DriveableEvent, ConnectionEvent, StopReason, ErrorEvent)
14
+ export * from "./driver";
15
+
16
+ // Agent events (stream, state, message, turn)
17
+ export * from "./agent";
18
+
19
+ // Session events (lifecycle, persist, action)
20
+ export * from "./session";
21
+
22
+ // Container events (lifecycle, sandbox)
23
+ export * from "./container";
24
+
25
+ // Command events (request/response)
26
+ export * from "./command";