@agent-relay/dashboard-server 2.0.19 → 2.0.25
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/dist/index.d.ts +31 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -11
- package/dist/index.js.map +1 -1
- package/dist/mocks/fixtures.d.ts +241 -0
- package/dist/mocks/fixtures.d.ts.map +1 -0
- package/dist/mocks/fixtures.js +459 -0
- package/dist/mocks/fixtures.js.map +1 -0
- package/dist/mocks/index.d.ts +7 -0
- package/dist/mocks/index.d.ts.map +1 -0
- package/dist/mocks/index.js +7 -0
- package/dist/mocks/index.js.map +1 -0
- package/dist/mocks/routes.d.ts +12 -0
- package/dist/mocks/routes.d.ts.map +1 -0
- package/dist/mocks/routes.js +751 -0
- package/dist/mocks/routes.js.map +1 -0
- package/dist/mocks/types.d.ts +127 -0
- package/dist/mocks/types.d.ts.map +1 -0
- package/dist/mocks/types.js +8 -0
- package/dist/mocks/types.js.map +1 -0
- package/dist/proxy-server.d.ts +45 -0
- package/dist/proxy-server.d.ts.map +1 -0
- package/dist/proxy-server.js +320 -0
- package/dist/proxy-server.js.map +1 -0
- package/dist/server.d.ts +1 -22
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +53 -5
- package/dist/server.js.map +1 -1
- package/dist/services/health-worker-manager.d.ts.map +1 -0
- package/dist/services/health-worker-manager.js.map +1 -0
- package/dist/services/health-worker.d.ts.map +1 -0
- package/dist/services/health-worker.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +10 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/metrics.d.ts.map +1 -0
- package/dist/services/metrics.js.map +1 -0
- package/dist/services/needs-attention.d.ts.map +1 -0
- package/dist/services/needs-attention.js.map +1 -0
- package/dist/services/user-bridge.d.ts.map +1 -0
- package/dist/services/user-bridge.js.map +1 -0
- package/dist/start.d.ts +4 -1
- package/dist/start.d.ts.map +1 -1
- package/dist/start.js +63 -9
- package/dist/start.js.map +1 -1
- package/dist/types/index.d.ts +128 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +41 -19
- package/dist/health-worker-manager.d.ts.map +0 -1
- package/dist/health-worker-manager.js.map +0 -1
- package/dist/health-worker.d.ts.map +0 -1
- package/dist/health-worker.js.map +0 -1
- package/dist/metrics.d.ts.map +0 -1
- package/dist/metrics.js.map +0 -1
- package/dist/needs-attention.d.ts.map +0 -1
- package/dist/needs-attention.js.map +0 -1
- package/dist/user-bridge.d.ts.map +0 -1
- package/dist/user-bridge.js.map +0 -1
- /package/dist/{health-worker-manager.d.ts → services/health-worker-manager.d.ts} +0 -0
- /package/dist/{health-worker-manager.js → services/health-worker-manager.js} +0 -0
- /package/dist/{health-worker.d.ts → services/health-worker.d.ts} +0 -0
- /package/dist/{health-worker.js → services/health-worker.js} +0 -0
- /package/dist/{metrics.d.ts → services/metrics.d.ts} +0 -0
- /package/dist/{metrics.js → services/metrics.js} +0 -0
- /package/dist/{needs-attention.d.ts → services/needs-attention.d.ts} +0 -0
- /package/dist/{needs-attention.js → services/needs-attention.js} +0 -0
- /package/dist/{user-bridge.d.ts → services/user-bridge.d.ts} +0 -0
- /package/dist/{user-bridge.js → services/user-bridge.js} +0 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @relay/dashboard-server
|
|
2
|
+
* @agent-relay/dashboard-server
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Dashboard server for Agent Relay with two operating modes:
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* 1. Server mode (startDashboard): Complete integration with @agent-relay packages.
|
|
7
|
+
* Used by the CLI when running `agent-relay up --dashboard`.
|
|
8
|
+
*
|
|
9
|
+
* 2. Proxy/Mock mode (startProxyServer): Lightweight server that proxies to a daemon
|
|
10
|
+
* or serves mock data. Used for standalone testing and development.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Server mode - for CLI integration
|
|
14
|
+
* import { startDashboard } from '@agent-relay/dashboard-server';
|
|
15
|
+
* const port = await startDashboard({
|
|
16
|
+
* port: 3888,
|
|
17
|
+
* dataDir: '/path/to/data',
|
|
18
|
+
* teamDir: '/path/to/team',
|
|
19
|
+
* enableSpawner: true,
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Proxy mode - for standalone operation
|
|
24
|
+
* import { startProxyServer } from '@agent-relay/dashboard-server';
|
|
25
|
+
* const server = await startProxyServer({
|
|
26
|
+
* port: 3888,
|
|
27
|
+
* relayUrl: 'http://localhost:3889',
|
|
28
|
+
* });
|
|
11
29
|
*/
|
|
12
30
|
export { startDashboard } from './server.js';
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
-
export
|
|
17
|
-
export
|
|
31
|
+
export { startServer as startProxyServer, createServer as createProxyServer } from './proxy-server.js';
|
|
32
|
+
export { startServer, createServer } from './proxy-server.js';
|
|
33
|
+
export type { DashboardOptions, ProxyServerOptions, DashboardServer, ServerContext, AgentState, ChannelRecord, ThreadMetadata, } from './types/index.js';
|
|
34
|
+
export type { DashboardServerOptions } from './proxy-server.js';
|
|
35
|
+
export * from './mocks/fixtures.js';
|
|
36
|
+
export * from './mocks/types.js';
|
|
18
37
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,WAAW,IAAI,gBAAgB,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGvG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG9D,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,UAAU,EACV,aAAa,EACb,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGhE,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,17 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @relay/dashboard-server
|
|
2
|
+
* @agent-relay/dashboard-server
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Dashboard server for Agent Relay with two operating modes:
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
* 1. Server mode (startDashboard): Complete integration with @agent-relay packages.
|
|
7
|
+
* Used by the CLI when running `agent-relay up --dashboard`.
|
|
8
|
+
*
|
|
9
|
+
* 2. Proxy/Mock mode (startProxyServer): Lightweight server that proxies to a daemon
|
|
10
|
+
* or serves mock data. Used for standalone testing and development.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Server mode - for CLI integration
|
|
14
|
+
* import { startDashboard } from '@agent-relay/dashboard-server';
|
|
15
|
+
* const port = await startDashboard({
|
|
16
|
+
* port: 3888,
|
|
17
|
+
* dataDir: '/path/to/data',
|
|
18
|
+
* teamDir: '/path/to/team',
|
|
19
|
+
* enableSpawner: true,
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Proxy mode - for standalone operation
|
|
24
|
+
* import { startProxyServer } from '@agent-relay/dashboard-server';
|
|
25
|
+
* const server = await startProxyServer({
|
|
26
|
+
* port: 3888,
|
|
27
|
+
* relayUrl: 'http://localhost:3889',
|
|
28
|
+
* });
|
|
11
29
|
*/
|
|
30
|
+
// Main server (with @agent-relay integrations)
|
|
12
31
|
export { startDashboard } from './server.js';
|
|
13
|
-
|
|
14
|
-
export {
|
|
15
|
-
|
|
16
|
-
export {
|
|
32
|
+
// Proxy/Mock server (standalone, for development)
|
|
33
|
+
export { startServer as startProxyServer, createServer as createProxyServer } from './proxy-server.js';
|
|
34
|
+
// Backwards compatibility aliases
|
|
35
|
+
export { startServer, createServer } from './proxy-server.js';
|
|
36
|
+
// Re-export mock fixtures for testing
|
|
37
|
+
export * from './mocks/fixtures.js';
|
|
38
|
+
export * from './mocks/types.js';
|
|
17
39
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,+CAA+C;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,kDAAkD;AAClD,OAAO,EAAE,WAAW,IAAI,gBAAgB,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEvG,kCAAkC;AAClC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAgB9D,sCAAsC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock Data Fixtures
|
|
3
|
+
*
|
|
4
|
+
* Provides realistic mock data for standalone dashboard testing.
|
|
5
|
+
* Enables the dashboard to run without a relay daemon connection.
|
|
6
|
+
*/
|
|
7
|
+
import type { Agent, Message, Session } from './types.js';
|
|
8
|
+
export declare const mockAgents: Agent[];
|
|
9
|
+
export declare const mockMessages: Message[];
|
|
10
|
+
export declare const mockSessions: Session[];
|
|
11
|
+
export declare const mockChannels: {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
memberCount: number;
|
|
16
|
+
isPrivate: boolean;
|
|
17
|
+
createdAt: string;
|
|
18
|
+
}[];
|
|
19
|
+
export declare const mockDecisions: ({
|
|
20
|
+
id: string;
|
|
21
|
+
agentName: string;
|
|
22
|
+
title: string;
|
|
23
|
+
description: string;
|
|
24
|
+
options: {
|
|
25
|
+
id: string;
|
|
26
|
+
label: string;
|
|
27
|
+
description: string;
|
|
28
|
+
}[];
|
|
29
|
+
urgency: "medium";
|
|
30
|
+
category: "approval";
|
|
31
|
+
createdAt: string;
|
|
32
|
+
} | {
|
|
33
|
+
id: string;
|
|
34
|
+
agentName: string;
|
|
35
|
+
title: string;
|
|
36
|
+
description: string;
|
|
37
|
+
options: {
|
|
38
|
+
id: string;
|
|
39
|
+
label: string;
|
|
40
|
+
description: string;
|
|
41
|
+
}[];
|
|
42
|
+
urgency: "high";
|
|
43
|
+
category: "choice";
|
|
44
|
+
createdAt: string;
|
|
45
|
+
})[];
|
|
46
|
+
export declare const mockTasks: ({
|
|
47
|
+
id: string;
|
|
48
|
+
agentName: string;
|
|
49
|
+
title: string;
|
|
50
|
+
description: string;
|
|
51
|
+
priority: "high";
|
|
52
|
+
status: "in_progress";
|
|
53
|
+
createdAt: string;
|
|
54
|
+
assignedAt: string;
|
|
55
|
+
completedAt?: undefined;
|
|
56
|
+
result?: undefined;
|
|
57
|
+
} | {
|
|
58
|
+
id: string;
|
|
59
|
+
agentName: string;
|
|
60
|
+
title: string;
|
|
61
|
+
description: string;
|
|
62
|
+
priority: "medium";
|
|
63
|
+
status: "completed";
|
|
64
|
+
createdAt: string;
|
|
65
|
+
assignedAt: string;
|
|
66
|
+
completedAt: string;
|
|
67
|
+
result: string;
|
|
68
|
+
} | {
|
|
69
|
+
id: string;
|
|
70
|
+
agentName: string;
|
|
71
|
+
title: string;
|
|
72
|
+
description: string;
|
|
73
|
+
priority: "medium";
|
|
74
|
+
status: "pending";
|
|
75
|
+
createdAt: string;
|
|
76
|
+
assignedAt?: undefined;
|
|
77
|
+
completedAt?: undefined;
|
|
78
|
+
result?: undefined;
|
|
79
|
+
})[];
|
|
80
|
+
export declare const mockFleetStats: {
|
|
81
|
+
totalAgents: number;
|
|
82
|
+
onlineAgents: number;
|
|
83
|
+
busyAgents: number;
|
|
84
|
+
pendingDecisions: number;
|
|
85
|
+
activeTasks: number;
|
|
86
|
+
};
|
|
87
|
+
export declare const mockFleetServers: {
|
|
88
|
+
id: string;
|
|
89
|
+
name: string;
|
|
90
|
+
status: "healthy";
|
|
91
|
+
agents: {
|
|
92
|
+
name: string;
|
|
93
|
+
status: "idle" | "busy" | "online" | "offline";
|
|
94
|
+
}[];
|
|
95
|
+
cpuUsage: number;
|
|
96
|
+
memoryUsage: number;
|
|
97
|
+
activeConnections: number;
|
|
98
|
+
uptime: number;
|
|
99
|
+
lastHeartbeat: string;
|
|
100
|
+
}[];
|
|
101
|
+
export declare const mockMetrics: {
|
|
102
|
+
timestamp: string;
|
|
103
|
+
totalAgents: number;
|
|
104
|
+
onlineAgents: number;
|
|
105
|
+
offlineAgents: number;
|
|
106
|
+
totalMessages: number;
|
|
107
|
+
throughput: {
|
|
108
|
+
messagesLastMinute: number;
|
|
109
|
+
messagesLastHour: number;
|
|
110
|
+
messagesLast24Hours: number;
|
|
111
|
+
avgMessagesPerMinute: number;
|
|
112
|
+
};
|
|
113
|
+
agents: {
|
|
114
|
+
name: string;
|
|
115
|
+
isOnline: boolean;
|
|
116
|
+
messagesSent: number;
|
|
117
|
+
messagesReceived: number;
|
|
118
|
+
firstSeen: string;
|
|
119
|
+
lastSeen: string;
|
|
120
|
+
uptimeSeconds: number;
|
|
121
|
+
}[];
|
|
122
|
+
sessions: {
|
|
123
|
+
totalSessions: number;
|
|
124
|
+
activeSessions: number;
|
|
125
|
+
closedByAgent: number;
|
|
126
|
+
closedByDisconnect: number;
|
|
127
|
+
closedByError: number;
|
|
128
|
+
errorRate: number;
|
|
129
|
+
recentSessions: {
|
|
130
|
+
agentName: string;
|
|
131
|
+
startedAt: string;
|
|
132
|
+
endedAt: string | undefined;
|
|
133
|
+
messageCount: number;
|
|
134
|
+
closedBy: "agent" | "disconnect" | "error" | undefined;
|
|
135
|
+
}[];
|
|
136
|
+
};
|
|
137
|
+
system: {
|
|
138
|
+
totalAgents: number;
|
|
139
|
+
onlineAgents: number;
|
|
140
|
+
totalMessages: number;
|
|
141
|
+
totalSessions: number;
|
|
142
|
+
activeSessions: number;
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
export declare const mockHistorySessions: {
|
|
146
|
+
duration: string;
|
|
147
|
+
summary: string;
|
|
148
|
+
id: string;
|
|
149
|
+
agentName: string;
|
|
150
|
+
cli?: string;
|
|
151
|
+
startedAt: string;
|
|
152
|
+
endedAt?: string;
|
|
153
|
+
messageCount: number;
|
|
154
|
+
isActive: boolean;
|
|
155
|
+
closedBy?: "agent" | "disconnect" | "error";
|
|
156
|
+
}[];
|
|
157
|
+
export declare const mockHistoryStats: {
|
|
158
|
+
messageCount: number;
|
|
159
|
+
sessionCount: number;
|
|
160
|
+
activeSessions: number;
|
|
161
|
+
uniqueAgents: number;
|
|
162
|
+
oldestMessageDate: string | null;
|
|
163
|
+
};
|
|
164
|
+
export declare const mockSpawnedAgents: {
|
|
165
|
+
name: string;
|
|
166
|
+
cli: string;
|
|
167
|
+
startedAt: string;
|
|
168
|
+
}[];
|
|
169
|
+
export declare const mockFiles: {
|
|
170
|
+
path: string;
|
|
171
|
+
name: string;
|
|
172
|
+
isDirectory: boolean;
|
|
173
|
+
}[];
|
|
174
|
+
export declare const mockConversations: {
|
|
175
|
+
participants: string[];
|
|
176
|
+
lastMessage: string;
|
|
177
|
+
lastTimestamp: string;
|
|
178
|
+
messageCount: number;
|
|
179
|
+
}[];
|
|
180
|
+
export declare const mockBillingPlans: ({
|
|
181
|
+
tier: string;
|
|
182
|
+
name: string;
|
|
183
|
+
description: string;
|
|
184
|
+
price: {
|
|
185
|
+
monthly: number;
|
|
186
|
+
yearly: number;
|
|
187
|
+
};
|
|
188
|
+
features: string[];
|
|
189
|
+
limits: {
|
|
190
|
+
workspaces: number;
|
|
191
|
+
agents: number;
|
|
192
|
+
messagesPerDay: number;
|
|
193
|
+
};
|
|
194
|
+
recommended?: undefined;
|
|
195
|
+
} | {
|
|
196
|
+
tier: string;
|
|
197
|
+
name: string;
|
|
198
|
+
description: string;
|
|
199
|
+
price: {
|
|
200
|
+
monthly: number;
|
|
201
|
+
yearly: number;
|
|
202
|
+
};
|
|
203
|
+
features: string[];
|
|
204
|
+
limits: {
|
|
205
|
+
workspaces: number;
|
|
206
|
+
agents: number;
|
|
207
|
+
messagesPerDay: number;
|
|
208
|
+
};
|
|
209
|
+
recommended: boolean;
|
|
210
|
+
})[];
|
|
211
|
+
export declare const mockSubscription: {
|
|
212
|
+
id: string;
|
|
213
|
+
tier: string;
|
|
214
|
+
status: string;
|
|
215
|
+
currentPeriodStart: string;
|
|
216
|
+
currentPeriodEnd: string;
|
|
217
|
+
cancelAtPeriodEnd: boolean;
|
|
218
|
+
interval: "month";
|
|
219
|
+
};
|
|
220
|
+
export declare const mockInvoices: {
|
|
221
|
+
id: string;
|
|
222
|
+
number: string;
|
|
223
|
+
amount: number;
|
|
224
|
+
status: string;
|
|
225
|
+
date: string;
|
|
226
|
+
pdfUrl: string;
|
|
227
|
+
}[];
|
|
228
|
+
export declare const mockWorkspaces: {
|
|
229
|
+
id: string;
|
|
230
|
+
name: string;
|
|
231
|
+
status: string;
|
|
232
|
+
createdAt: string;
|
|
233
|
+
}[];
|
|
234
|
+
export declare const mockUser: {
|
|
235
|
+
id: string;
|
|
236
|
+
email: string;
|
|
237
|
+
displayName: string;
|
|
238
|
+
avatarUrl: null;
|
|
239
|
+
createdAt: string;
|
|
240
|
+
};
|
|
241
|
+
//# sourceMappingURL=fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/mocks/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1D,eAAO,MAAM,UAAU,EAAE,KAAK,EAoC7B,CAAC;AAIF,eAAO,MAAM,YAAY,EAAE,OAAO,EAuCjC,CAAC;AAIF,eAAO,MAAM,YAAY,EAAE,OAAO,EAmCjC,CAAC;AAIF,eAAO,MAAM,YAAY;;;;;;;GAyBxB,CAAC;AAIF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BzB,CAAC;AAIF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgCrB,CAAC;AAIF,eAAO,MAAM,cAAc;;;;;;CAM1B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;GAY5B,CAAC;AAOF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CvB,CAAC;AAIF,eAAO,MAAM,mBAAmB;;;;;;;;;;;GAM7B,CAAC;AAEJ,eAAO,MAAM,gBAAgB;;;;;;CAU5B,CAAC;AAIF,eAAO,MAAM,iBAAiB;;;;GAW7B,CAAC;AAIF,eAAO,MAAM,SAAS;;;;GASrB,CAAC;AAIF,eAAO,MAAM,iBAAiB;;;;;GAa7B,CAAC;AAIF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0D5B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;CAQ5B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;GAyBxB,CAAC;AAIF,eAAO,MAAM,cAAc;;;;;GAa1B,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;CAMpB,CAAC"}
|