@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.
- package/package.json +31 -0
- package/src/agent/AgentStateMachine.ts +151 -0
- package/src/agent/README.md +296 -0
- package/src/agent/__tests__/AgentStateMachine.test.ts +346 -0
- package/src/agent/__tests__/createAgent.test.ts +728 -0
- package/src/agent/__tests__/engine/internal/messageAssemblerProcessor.test.ts +567 -0
- package/src/agent/__tests__/engine/internal/stateEventProcessor.test.ts +315 -0
- package/src/agent/__tests__/engine/internal/turnTrackerProcessor.test.ts +340 -0
- package/src/agent/__tests__/engine/mealy/Mealy.test.ts +370 -0
- package/src/agent/__tests__/engine/mealy/Store.test.ts +123 -0
- package/src/agent/__tests__/engine/mealy/combinators.test.ts +322 -0
- package/src/agent/createAgent.ts +467 -0
- package/src/agent/engine/AgentProcessor.ts +106 -0
- package/src/agent/engine/MealyMachine.ts +184 -0
- package/src/agent/engine/internal/index.ts +35 -0
- package/src/agent/engine/internal/messageAssemblerProcessor.ts +550 -0
- package/src/agent/engine/internal/stateEventProcessor.ts +313 -0
- package/src/agent/engine/internal/turnTrackerProcessor.ts +239 -0
- package/src/agent/engine/mealy/Mealy.ts +308 -0
- package/src/agent/engine/mealy/Processor.ts +70 -0
- package/src/agent/engine/mealy/Sink.ts +56 -0
- package/src/agent/engine/mealy/Source.ts +51 -0
- package/src/agent/engine/mealy/Store.ts +98 -0
- package/src/agent/engine/mealy/combinators.ts +176 -0
- package/src/agent/engine/mealy/index.ts +45 -0
- package/src/agent/index.ts +106 -0
- package/src/agent/types/engine.ts +395 -0
- package/src/agent/types/event.ts +478 -0
- package/src/agent/types/index.ts +197 -0
- package/src/agent/types/message.ts +387 -0
- package/src/common/index.ts +8 -0
- package/src/common/logger/ConsoleLogger.ts +137 -0
- package/src/common/logger/LoggerFactoryImpl.ts +123 -0
- package/src/common/logger/index.ts +26 -0
- package/src/common/logger/types.ts +98 -0
- package/src/container/Container.ts +185 -0
- package/src/container/index.ts +44 -0
- package/src/container/types.ts +71 -0
- package/src/driver/index.ts +42 -0
- package/src/driver/types.ts +363 -0
- package/src/event/EventBus.ts +260 -0
- package/src/event/README.md +237 -0
- package/src/event/__tests__/EventBus.test.ts +251 -0
- package/src/event/index.ts +46 -0
- package/src/event/types/agent.ts +512 -0
- package/src/event/types/base.ts +241 -0
- package/src/event/types/bus.ts +429 -0
- package/src/event/types/command.ts +749 -0
- package/src/event/types/container.ts +471 -0
- package/src/event/types/driver.ts +452 -0
- package/src/event/types/index.ts +26 -0
- package/src/event/types/session.ts +314 -0
- package/src/image/Image.ts +203 -0
- package/src/image/index.ts +36 -0
- package/src/image/types.ts +77 -0
- package/src/index.ts +20 -0
- package/src/mq/OffsetGenerator.ts +48 -0
- package/src/mq/README.md +166 -0
- package/src/mq/__tests__/OffsetGenerator.test.ts +121 -0
- package/src/mq/index.ts +18 -0
- package/src/mq/types.ts +172 -0
- package/src/network/RpcClient.ts +455 -0
- package/src/network/index.ts +76 -0
- package/src/network/jsonrpc.ts +336 -0
- package/src/network/protocol.ts +90 -0
- package/src/network/types.ts +284 -0
- package/src/persistence/index.ts +27 -0
- package/src/persistence/types.ts +226 -0
- package/src/runtime/AgentXRuntime.ts +501 -0
- package/src/runtime/index.ts +56 -0
- package/src/runtime/types.ts +236 -0
- package/src/session/Session.ts +71 -0
- package/src/session/index.ts +25 -0
- package/src/session/types.ts +77 -0
- package/src/workspace/index.ts +27 -0
- package/src/workspace/types.ts +131 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container Events - Container lifecycle and sandbox events
|
|
3
|
+
*
|
|
4
|
+
* Events for container operations in the event system.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { SystemEvent } from "./base";
|
|
8
|
+
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Container Lifecycle Events
|
|
11
|
+
// ============================================================================
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Base ContainerLifecycleEvent
|
|
15
|
+
*/
|
|
16
|
+
interface BaseContainerLifecycleEvent<T extends string, D = unknown> extends SystemEvent<
|
|
17
|
+
T,
|
|
18
|
+
D,
|
|
19
|
+
"container",
|
|
20
|
+
"lifecycle",
|
|
21
|
+
"notification"
|
|
22
|
+
> {}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* ContainerCreatedEvent - Container was created
|
|
26
|
+
*/
|
|
27
|
+
export interface ContainerCreatedEvent extends BaseContainerLifecycleEvent<
|
|
28
|
+
"container_created",
|
|
29
|
+
{
|
|
30
|
+
containerId: string;
|
|
31
|
+
name?: string;
|
|
32
|
+
createdAt: number;
|
|
33
|
+
}
|
|
34
|
+
> {}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* ContainerDestroyedEvent - Container was destroyed
|
|
38
|
+
*/
|
|
39
|
+
export interface ContainerDestroyedEvent extends BaseContainerLifecycleEvent<
|
|
40
|
+
"container_destroyed",
|
|
41
|
+
{
|
|
42
|
+
containerId: string;
|
|
43
|
+
reason?: string;
|
|
44
|
+
agentCount: number;
|
|
45
|
+
}
|
|
46
|
+
> {}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* AgentRegisteredEvent - Agent was registered to container
|
|
50
|
+
*/
|
|
51
|
+
export interface AgentRegisteredEvent extends BaseContainerLifecycleEvent<
|
|
52
|
+
"agent_registered",
|
|
53
|
+
{
|
|
54
|
+
containerId: string;
|
|
55
|
+
agentId: string;
|
|
56
|
+
definitionName: string;
|
|
57
|
+
registeredAt: number;
|
|
58
|
+
}
|
|
59
|
+
> {}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* AgentUnregisteredEvent - Agent was unregistered from container
|
|
63
|
+
*/
|
|
64
|
+
export interface AgentUnregisteredEvent extends BaseContainerLifecycleEvent<
|
|
65
|
+
"agent_unregistered",
|
|
66
|
+
{
|
|
67
|
+
containerId: string;
|
|
68
|
+
agentId: string;
|
|
69
|
+
reason?: string;
|
|
70
|
+
}
|
|
71
|
+
> {}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* ContainerLifecycleEvent - All container lifecycle events
|
|
75
|
+
*/
|
|
76
|
+
export type ContainerLifecycleEvent =
|
|
77
|
+
| ContainerCreatedEvent
|
|
78
|
+
| ContainerDestroyedEvent
|
|
79
|
+
| AgentRegisteredEvent
|
|
80
|
+
| AgentUnregisteredEvent;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Type guard: is this a ContainerLifecycleEvent?
|
|
84
|
+
*/
|
|
85
|
+
export function isContainerLifecycleEvent(event: {
|
|
86
|
+
source?: string;
|
|
87
|
+
category?: string;
|
|
88
|
+
}): event is ContainerLifecycleEvent {
|
|
89
|
+
return event.source === "container" && event.category === "lifecycle";
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// Sandbox Workdir Events
|
|
94
|
+
// ============================================================================
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Base WorkdirRequest
|
|
98
|
+
*/
|
|
99
|
+
interface BaseWorkdirRequest<T extends string, D = unknown> extends SystemEvent<
|
|
100
|
+
T,
|
|
101
|
+
D,
|
|
102
|
+
"sandbox",
|
|
103
|
+
"workdir",
|
|
104
|
+
"request"
|
|
105
|
+
> {}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Base WorkdirResult
|
|
109
|
+
*/
|
|
110
|
+
interface BaseWorkdirResult<T extends string, D = unknown> extends SystemEvent<
|
|
111
|
+
T,
|
|
112
|
+
D,
|
|
113
|
+
"sandbox",
|
|
114
|
+
"workdir",
|
|
115
|
+
"result"
|
|
116
|
+
> {}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Base WorkdirNotification
|
|
120
|
+
*/
|
|
121
|
+
interface BaseWorkdirNotification<T extends string, D = unknown> extends SystemEvent<
|
|
122
|
+
T,
|
|
123
|
+
D,
|
|
124
|
+
"sandbox",
|
|
125
|
+
"workdir",
|
|
126
|
+
"notification"
|
|
127
|
+
> {}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* FileReadRequest - Request to read a file
|
|
131
|
+
*/
|
|
132
|
+
export interface FileReadRequest extends BaseWorkdirRequest<
|
|
133
|
+
"file_read_request",
|
|
134
|
+
{
|
|
135
|
+
path: string;
|
|
136
|
+
encoding?: string;
|
|
137
|
+
}
|
|
138
|
+
> {}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* FileReadResult - File read result
|
|
142
|
+
*/
|
|
143
|
+
export interface FileReadResult extends BaseWorkdirResult<
|
|
144
|
+
"file_read_result",
|
|
145
|
+
{
|
|
146
|
+
path: string;
|
|
147
|
+
content: string;
|
|
148
|
+
size: number;
|
|
149
|
+
encoding: string;
|
|
150
|
+
}
|
|
151
|
+
> {}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* FileWriteRequest - Request to write a file
|
|
155
|
+
*/
|
|
156
|
+
export interface FileWriteRequest extends BaseWorkdirRequest<
|
|
157
|
+
"file_write_request",
|
|
158
|
+
{
|
|
159
|
+
path: string;
|
|
160
|
+
content: string;
|
|
161
|
+
encoding?: string;
|
|
162
|
+
createDirectories?: boolean;
|
|
163
|
+
}
|
|
164
|
+
> {}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* FileWrittenEvent - File was written
|
|
168
|
+
*/
|
|
169
|
+
export interface FileWrittenEvent extends BaseWorkdirResult<
|
|
170
|
+
"file_written",
|
|
171
|
+
{
|
|
172
|
+
path: string;
|
|
173
|
+
size: number;
|
|
174
|
+
timestamp: number;
|
|
175
|
+
}
|
|
176
|
+
> {}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* FileDeleteRequest - Request to delete a file
|
|
180
|
+
*/
|
|
181
|
+
export interface FileDeleteRequest extends BaseWorkdirRequest<
|
|
182
|
+
"file_delete_request",
|
|
183
|
+
{
|
|
184
|
+
path: string;
|
|
185
|
+
recursive?: boolean;
|
|
186
|
+
}
|
|
187
|
+
> {}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* FileDeletedEvent - File was deleted
|
|
191
|
+
*/
|
|
192
|
+
export interface FileDeletedEvent extends BaseWorkdirResult<
|
|
193
|
+
"file_deleted",
|
|
194
|
+
{
|
|
195
|
+
path: string;
|
|
196
|
+
timestamp: number;
|
|
197
|
+
}
|
|
198
|
+
> {}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* DirectoryListRequest - Request to list directory
|
|
202
|
+
*/
|
|
203
|
+
export interface DirectoryListRequest extends BaseWorkdirRequest<
|
|
204
|
+
"directory_list_request",
|
|
205
|
+
{
|
|
206
|
+
path: string;
|
|
207
|
+
recursive?: boolean;
|
|
208
|
+
pattern?: string;
|
|
209
|
+
}
|
|
210
|
+
> {}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* DirectoryListResult - Directory listing result
|
|
214
|
+
*/
|
|
215
|
+
export interface DirectoryListResult extends BaseWorkdirResult<
|
|
216
|
+
"directory_list_result",
|
|
217
|
+
{
|
|
218
|
+
path: string;
|
|
219
|
+
entries: Array<{
|
|
220
|
+
name: string;
|
|
221
|
+
type: "file" | "directory";
|
|
222
|
+
size?: number;
|
|
223
|
+
modifiedAt?: number;
|
|
224
|
+
}>;
|
|
225
|
+
}
|
|
226
|
+
> {}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* WorkdirErrorEvent - Workdir operation error
|
|
230
|
+
*/
|
|
231
|
+
export interface WorkdirErrorEvent extends BaseWorkdirNotification<
|
|
232
|
+
"workdir_error",
|
|
233
|
+
{
|
|
234
|
+
operation: string;
|
|
235
|
+
path: string;
|
|
236
|
+
code: string;
|
|
237
|
+
message: string;
|
|
238
|
+
}
|
|
239
|
+
> {}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* WorkdirEvent - All workdir events
|
|
243
|
+
*/
|
|
244
|
+
export type WorkdirEvent =
|
|
245
|
+
| FileReadRequest
|
|
246
|
+
| FileReadResult
|
|
247
|
+
| FileWriteRequest
|
|
248
|
+
| FileWrittenEvent
|
|
249
|
+
| FileDeleteRequest
|
|
250
|
+
| FileDeletedEvent
|
|
251
|
+
| DirectoryListRequest
|
|
252
|
+
| DirectoryListResult
|
|
253
|
+
| WorkdirErrorEvent;
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Workdir request events
|
|
257
|
+
*/
|
|
258
|
+
export type WorkdirRequestEvent =
|
|
259
|
+
| FileReadRequest
|
|
260
|
+
| FileWriteRequest
|
|
261
|
+
| FileDeleteRequest
|
|
262
|
+
| DirectoryListRequest;
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Workdir result events
|
|
266
|
+
*/
|
|
267
|
+
export type WorkdirResultEvent =
|
|
268
|
+
| FileReadResult
|
|
269
|
+
| FileWrittenEvent
|
|
270
|
+
| FileDeletedEvent
|
|
271
|
+
| DirectoryListResult;
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Type guard: is this a WorkdirEvent?
|
|
275
|
+
*/
|
|
276
|
+
export function isWorkdirEvent(event: {
|
|
277
|
+
source?: string;
|
|
278
|
+
category?: string;
|
|
279
|
+
}): event is WorkdirEvent {
|
|
280
|
+
return event.source === "sandbox" && event.category === "workdir";
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// ============================================================================
|
|
284
|
+
// Sandbox MCP Events
|
|
285
|
+
// ============================================================================
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Base MCPRequest
|
|
289
|
+
*/
|
|
290
|
+
interface BaseMCPRequest<T extends string, D = unknown> extends SystemEvent<
|
|
291
|
+
T,
|
|
292
|
+
D,
|
|
293
|
+
"sandbox",
|
|
294
|
+
"mcp",
|
|
295
|
+
"request"
|
|
296
|
+
> {}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Base MCPResult
|
|
300
|
+
*/
|
|
301
|
+
interface BaseMCPResult<T extends string, D = unknown> extends SystemEvent<
|
|
302
|
+
T,
|
|
303
|
+
D,
|
|
304
|
+
"sandbox",
|
|
305
|
+
"mcp",
|
|
306
|
+
"result"
|
|
307
|
+
> {}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Base MCPNotification
|
|
311
|
+
*/
|
|
312
|
+
interface BaseMCPNotification<T extends string, D = unknown> extends SystemEvent<
|
|
313
|
+
T,
|
|
314
|
+
D,
|
|
315
|
+
"sandbox",
|
|
316
|
+
"mcp",
|
|
317
|
+
"notification"
|
|
318
|
+
> {}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* ToolExecuteRequest - Request to execute a tool
|
|
322
|
+
*/
|
|
323
|
+
export interface ToolExecuteRequest extends BaseMCPRequest<
|
|
324
|
+
"tool_execute_request",
|
|
325
|
+
{
|
|
326
|
+
toolId: string;
|
|
327
|
+
toolName: string;
|
|
328
|
+
serverName: string;
|
|
329
|
+
input: Record<string, unknown>;
|
|
330
|
+
timestamp: number;
|
|
331
|
+
}
|
|
332
|
+
> {}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* ToolExecutedEvent - Tool execution completed
|
|
336
|
+
*/
|
|
337
|
+
export interface ToolExecutedEvent extends BaseMCPResult<
|
|
338
|
+
"tool_executed",
|
|
339
|
+
{
|
|
340
|
+
toolId: string;
|
|
341
|
+
toolName: string;
|
|
342
|
+
result: unknown;
|
|
343
|
+
duration: number;
|
|
344
|
+
timestamp: number;
|
|
345
|
+
}
|
|
346
|
+
> {}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* ToolExecutionErrorEvent - Tool execution failed
|
|
350
|
+
*/
|
|
351
|
+
export interface ToolExecutionErrorEvent extends BaseMCPNotification<
|
|
352
|
+
"tool_execution_error",
|
|
353
|
+
{
|
|
354
|
+
toolId: string;
|
|
355
|
+
toolName: string;
|
|
356
|
+
code: string;
|
|
357
|
+
message: string;
|
|
358
|
+
timestamp: number;
|
|
359
|
+
}
|
|
360
|
+
> {}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* MCPServerConnectedEvent - MCP server connected
|
|
364
|
+
*/
|
|
365
|
+
export interface MCPServerConnectedEvent extends BaseMCPNotification<
|
|
366
|
+
"mcp_server_connected",
|
|
367
|
+
{
|
|
368
|
+
serverName: string;
|
|
369
|
+
version?: string;
|
|
370
|
+
toolCount: number;
|
|
371
|
+
resourceCount: number;
|
|
372
|
+
timestamp: number;
|
|
373
|
+
}
|
|
374
|
+
> {}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* MCPServerDisconnectedEvent - MCP server disconnected
|
|
378
|
+
*/
|
|
379
|
+
export interface MCPServerDisconnectedEvent extends BaseMCPNotification<
|
|
380
|
+
"mcp_server_disconnected",
|
|
381
|
+
{
|
|
382
|
+
serverName: string;
|
|
383
|
+
reason?: string;
|
|
384
|
+
timestamp: number;
|
|
385
|
+
}
|
|
386
|
+
> {}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* ResourceReadRequest - Request to read an MCP resource
|
|
390
|
+
*/
|
|
391
|
+
export interface ResourceReadRequest extends BaseMCPRequest<
|
|
392
|
+
"resource_read_request",
|
|
393
|
+
{
|
|
394
|
+
serverName: string;
|
|
395
|
+
uri: string;
|
|
396
|
+
}
|
|
397
|
+
> {}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* ResourceReadResult - Resource read result
|
|
401
|
+
*/
|
|
402
|
+
export interface ResourceReadResult extends BaseMCPResult<
|
|
403
|
+
"resource_read_result",
|
|
404
|
+
{
|
|
405
|
+
serverName: string;
|
|
406
|
+
uri: string;
|
|
407
|
+
content: unknown;
|
|
408
|
+
mimeType?: string;
|
|
409
|
+
}
|
|
410
|
+
> {}
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* MCPEvent - All MCP events
|
|
414
|
+
*/
|
|
415
|
+
export type MCPEvent =
|
|
416
|
+
| ToolExecuteRequest
|
|
417
|
+
| ToolExecutedEvent
|
|
418
|
+
| ToolExecutionErrorEvent
|
|
419
|
+
| MCPServerConnectedEvent
|
|
420
|
+
| MCPServerDisconnectedEvent
|
|
421
|
+
| ResourceReadRequest
|
|
422
|
+
| ResourceReadResult;
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* MCP request events
|
|
426
|
+
*/
|
|
427
|
+
export type MCPRequestEvent = ToolExecuteRequest | ResourceReadRequest;
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* MCP result events
|
|
431
|
+
*/
|
|
432
|
+
export type MCPResultEvent = ToolExecutedEvent | ResourceReadResult;
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Type guard: is this a MCPEvent?
|
|
436
|
+
*/
|
|
437
|
+
export function isMCPEvent(event: { source?: string; category?: string }): event is MCPEvent {
|
|
438
|
+
return event.source === "sandbox" && event.category === "mcp";
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// ============================================================================
|
|
442
|
+
// Sandbox Event Union
|
|
443
|
+
// ============================================================================
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* SandboxEvent - All sandbox events
|
|
447
|
+
*/
|
|
448
|
+
export type SandboxEvent = WorkdirEvent | MCPEvent;
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Type guard: is this a sandbox event?
|
|
452
|
+
*/
|
|
453
|
+
export function isSandboxEvent(event: { source?: string }): event is SandboxEvent {
|
|
454
|
+
return event.source === "sandbox";
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// ============================================================================
|
|
458
|
+
// Container Event Union
|
|
459
|
+
// ============================================================================
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* ContainerEvent - All container events
|
|
463
|
+
*/
|
|
464
|
+
export type ContainerEvent = ContainerLifecycleEvent | SandboxEvent;
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Type guard: is this a container event?
|
|
468
|
+
*/
|
|
469
|
+
export function isContainerEvent(event: { source?: string }): event is ContainerEvent {
|
|
470
|
+
return event.source === "container" || event.source === "sandbox";
|
|
471
|
+
}
|