@agent-relay/harness-driver 7.1.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.
- package/README.md +9 -0
- package/dist/actions.d.ts +10 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +140 -0
- package/dist/actions.js.map +1 -0
- package/dist/broker-driver.d.ts +17 -0
- package/dist/broker-driver.d.ts.map +1 -0
- package/dist/broker-driver.js +56 -0
- package/dist/broker-driver.js.map +1 -0
- package/dist/broker-path.d.ts +31 -0
- package/dist/broker-path.d.ts.map +1 -0
- package/dist/broker-path.js +216 -0
- package/dist/broker-path.js.map +1 -0
- package/dist/client.d.ts +293 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +892 -0
- package/dist/client.js.map +1 -0
- package/dist/driver-types.d.ts +43 -0
- package/dist/driver-types.d.ts.map +1 -0
- package/dist/driver-types.js +2 -0
- package/dist/driver-types.js.map +1 -0
- package/dist/event-bus.d.ts +57 -0
- package/dist/event-bus.d.ts.map +1 -0
- package/dist/event-bus.js +76 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/harness.d.ts +82 -0
- package/dist/harness.d.ts.map +1 -0
- package/dist/harness.js +96 -0
- package/dist/harness.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle-hooks.d.ts +166 -0
- package/dist/lifecycle-hooks.d.ts.map +1 -0
- package/dist/lifecycle-hooks.js +25 -0
- package/dist/lifecycle-hooks.js.map +1 -0
- package/dist/protocol.d.ts +527 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +2 -0
- package/dist/protocol.js.map +1 -0
- package/dist/transport.d.ts +104 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +520 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +120 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +71 -0
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HarnessDriverClient — single client for communicating with an agent-relay broker
|
|
3
|
+
* over HTTP/WS. Works identically for local and remote brokers.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* // Remote broker (Daytona sandbox, cloud, etc.)
|
|
7
|
+
* const client = new HarnessDriverClient({ baseUrl, apiKey });
|
|
8
|
+
*
|
|
9
|
+
* // Local broker (spawn and connect)
|
|
10
|
+
* const client = await HarnessDriverClient.spawn({ cwd: '/my/project' });
|
|
11
|
+
*/
|
|
12
|
+
import { type ChildProcess } from 'node:child_process';
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { type PtyInputStream, type PtyInputStreamOptions } from './transport.js';
|
|
15
|
+
import type { BrokerEvent, BrokerStats, BrokerStatus, CrashInsightsResponse, PendingRelayMessage, PtySnapshot, InboundDeliveryMode, SnapshotFormat } from './protocol.js';
|
|
16
|
+
import type { SpawnAgentResult, SpawnCliInput, SpawnHeadlessInput, SpawnPtyInput, SendMessageInput, ListAgent } from './types.js';
|
|
17
|
+
import { EventBus } from './event-bus.js';
|
|
18
|
+
import type { HarnessDriverEvents, BeforeAgentSpawnHandler } from './lifecycle-hooks.js';
|
|
19
|
+
export interface HarnessDriverClientOptions {
|
|
20
|
+
baseUrl: string;
|
|
21
|
+
apiKey?: string;
|
|
22
|
+
/** Fetch implementation. Defaults to globalThis.fetch. */
|
|
23
|
+
fetch?: typeof globalThis.fetch;
|
|
24
|
+
/** Timeout in ms for HTTP requests. Default: 30000. */
|
|
25
|
+
requestTimeoutMs?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Shared event bus. When constructed bare, the client owns its own bus
|
|
28
|
+
* — listeners registered via `addListener` flow only through this
|
|
29
|
+
* client. When passed in (typically by `AgentRelay`), the client uses
|
|
30
|
+
* the supplied bus so facade-registered listeners observe call-site
|
|
31
|
+
* hooks fired here.
|
|
32
|
+
*/
|
|
33
|
+
eventBus?: EventBus<HarnessDriverEvents>;
|
|
34
|
+
}
|
|
35
|
+
export interface BrokerExitInfo {
|
|
36
|
+
/** Exit code, or null when the process was killed by signal. */
|
|
37
|
+
code: number | null;
|
|
38
|
+
/** Terminating signal, or null when the process exited normally. */
|
|
39
|
+
signal: NodeJS.Signals | null;
|
|
40
|
+
/** PID of the managed broker process that exited. */
|
|
41
|
+
pid: number | undefined;
|
|
42
|
+
/** Recent stderr lines captured from the managed broker process. */
|
|
43
|
+
recentStderr: string[];
|
|
44
|
+
}
|
|
45
|
+
export interface BrokerInitArgs {
|
|
46
|
+
/** Optional HTTP API port for dashboard proxy (0 = disabled). */
|
|
47
|
+
apiPort?: number;
|
|
48
|
+
/** Bind address for the HTTP API. Defaults to 127.0.0.1 in the broker. */
|
|
49
|
+
apiBind?: string;
|
|
50
|
+
/** Enable persistence for broker state under the working directory. */
|
|
51
|
+
persist?: boolean;
|
|
52
|
+
/** Override the directory used for broker state files. */
|
|
53
|
+
stateDir?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface RuntimeSpawnOptions {
|
|
56
|
+
/** Path to the agent-relay-broker binary. Auto-resolved if omitted. */
|
|
57
|
+
binaryPath?: string;
|
|
58
|
+
/** Structured options mapped to the broker's Rust `init` CLI flags. */
|
|
59
|
+
binaryArgs?: BrokerInitArgs;
|
|
60
|
+
/** Broker name. Defaults to cwd basename. */
|
|
61
|
+
brokerName?: string;
|
|
62
|
+
/** Default channels for spawned agents. */
|
|
63
|
+
channels?: string[];
|
|
64
|
+
/** Working directory for the broker process. */
|
|
65
|
+
cwd?: string;
|
|
66
|
+
/** Environment variables for the broker process. */
|
|
67
|
+
env?: NodeJS.ProcessEnv;
|
|
68
|
+
/** Forward broker stderr to this callback. */
|
|
69
|
+
onStderr?: (line: string) => void;
|
|
70
|
+
/** Timeout in ms to wait for broker to become ready. Default: 45000. */
|
|
71
|
+
startupTimeoutMs?: number;
|
|
72
|
+
/** Timeout in ms for HTTP requests to the broker. Default: 30000. */
|
|
73
|
+
requestTimeoutMs?: number;
|
|
74
|
+
/** Optional shared event bus — see {@link HarnessDriverClientOptions.eventBus}. */
|
|
75
|
+
eventBus?: EventBus<HarnessDriverEvents>;
|
|
76
|
+
}
|
|
77
|
+
export declare const SpawnAgentResultSchema: z.ZodObject<{
|
|
78
|
+
success: z.ZodOptional<z.ZodBoolean>;
|
|
79
|
+
name: z.ZodString;
|
|
80
|
+
runtime: z.ZodEnum<["pty", "headless"]>;
|
|
81
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
82
|
+
pid: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
|
|
83
|
+
pre_registered: z.ZodOptional<z.ZodBoolean>;
|
|
84
|
+
warning: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
85
|
+
sessionId: z.ZodEffects<z.ZodOptional<z.ZodString>, string | undefined, unknown>;
|
|
86
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
87
|
+
success: z.ZodOptional<z.ZodBoolean>;
|
|
88
|
+
name: z.ZodString;
|
|
89
|
+
runtime: z.ZodEnum<["pty", "headless"]>;
|
|
90
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
91
|
+
pid: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
|
|
92
|
+
pre_registered: z.ZodOptional<z.ZodBoolean>;
|
|
93
|
+
warning: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
94
|
+
sessionId: z.ZodEffects<z.ZodOptional<z.ZodString>, string | undefined, unknown>;
|
|
95
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
96
|
+
success: z.ZodOptional<z.ZodBoolean>;
|
|
97
|
+
name: z.ZodString;
|
|
98
|
+
runtime: z.ZodEnum<["pty", "headless"]>;
|
|
99
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
100
|
+
pid: z.ZodEffects<z.ZodOptional<z.ZodNumber>, number | undefined, unknown>;
|
|
101
|
+
pre_registered: z.ZodOptional<z.ZodBoolean>;
|
|
102
|
+
warning: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
103
|
+
sessionId: z.ZodEffects<z.ZodOptional<z.ZodString>, string | undefined, unknown>;
|
|
104
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
105
|
+
export interface SessionInfo {
|
|
106
|
+
broker_version: string;
|
|
107
|
+
protocol_version: number;
|
|
108
|
+
workspace_key?: string;
|
|
109
|
+
default_workspace_id?: string;
|
|
110
|
+
mode: string;
|
|
111
|
+
uptime_secs: number;
|
|
112
|
+
}
|
|
113
|
+
export interface SetInboundDeliveryModeResult {
|
|
114
|
+
mode: InboundDeliveryMode;
|
|
115
|
+
flushed: number;
|
|
116
|
+
}
|
|
117
|
+
export interface WorkerStreamSubscriptionOptions {
|
|
118
|
+
/** Filter by stream name, for example `stdout` or `stderr`. Defaults to all streams. */
|
|
119
|
+
stream?: string;
|
|
120
|
+
/** Sequence offset to pass to the broker event stream when connecting. */
|
|
121
|
+
sinceSeq?: number;
|
|
122
|
+
}
|
|
123
|
+
type BrokerExitListener = (info: BrokerExitInfo) => void;
|
|
124
|
+
export declare class HarnessDriverClient {
|
|
125
|
+
private readonly transport;
|
|
126
|
+
/** Set after spawn() — the managed child process. */
|
|
127
|
+
private child;
|
|
128
|
+
/** Lease renewal timer (only for spawned brokers). */
|
|
129
|
+
private leaseTimer;
|
|
130
|
+
private brokerExitInfo;
|
|
131
|
+
private brokerExitListeners;
|
|
132
|
+
workspaceKey?: string;
|
|
133
|
+
/** Resolved broker URL — captured so call-site lifecycle contexts can surface it. */
|
|
134
|
+
readonly baseUrl: string;
|
|
135
|
+
/** Shared multi-listener registry. Created bare when no `eventBus` is passed in. */
|
|
136
|
+
readonly eventBus: EventBus<HarnessDriverEvents>;
|
|
137
|
+
constructor(options: HarnessDriverClientOptions);
|
|
138
|
+
/**
|
|
139
|
+
* Register a listener on the client's event bus. Returns an unsubscribe
|
|
140
|
+
* function. Equivalent to `client.eventBus.addListener(...)` but mirrors
|
|
141
|
+
* the `AgentRelay` facade API so direct-client callers don't need to
|
|
142
|
+
* reach through `.eventBus`.
|
|
143
|
+
*
|
|
144
|
+
* `beforeAgentSpawn` is the one event whose handler may return a
|
|
145
|
+
* `SpawnPatch` to mutate the spawn input — the dedicated overload
|
|
146
|
+
* keeps that contract type-safe without forcing other events to accept
|
|
147
|
+
* non-void returns.
|
|
148
|
+
*/
|
|
149
|
+
addListener(event: 'beforeAgentSpawn', handler: BeforeAgentSpawnHandler): () => void;
|
|
150
|
+
addListener<K extends keyof HarnessDriverEvents>(event: K, handler: (...args: HarnessDriverEvents[K]) => void | Promise<void>): () => void;
|
|
151
|
+
/** Remove a previously-registered listener. */
|
|
152
|
+
removeListener(event: 'beforeAgentSpawn', handler: BeforeAgentSpawnHandler): void;
|
|
153
|
+
removeListener<K extends keyof HarnessDriverEvents>(event: K, handler: (...args: HarnessDriverEvents[K]) => void | Promise<void>): void;
|
|
154
|
+
/**
|
|
155
|
+
* Fold `beforeAgentSpawn` patches into the input. Listeners run in
|
|
156
|
+
* registration order; each may return a {@link SpawnPatch} that is
|
|
157
|
+
* shallow-merged over the running result. Handler exceptions are caught
|
|
158
|
+
* and logged but do not abort the chain.
|
|
159
|
+
*/
|
|
160
|
+
private runBeforeSpawn;
|
|
161
|
+
/**
|
|
162
|
+
* Connect to an already-running broker by reading its connection file.
|
|
163
|
+
*
|
|
164
|
+
* The broker writes `connection.json` to its data directory ({cwd}/.agentworkforce/relay/
|
|
165
|
+
* in persist mode). This method reads that file to get the URL and API key.
|
|
166
|
+
*
|
|
167
|
+
* @param cwd — project directory (default: process.cwd())
|
|
168
|
+
* @param connectionPath — explicit path to connection.json (overrides cwd)
|
|
169
|
+
*/
|
|
170
|
+
static connect(options?: {
|
|
171
|
+
cwd?: string;
|
|
172
|
+
connectionPath?: string;
|
|
173
|
+
eventBus?: EventBus<HarnessDriverEvents>;
|
|
174
|
+
}): HarnessDriverClient;
|
|
175
|
+
/**
|
|
176
|
+
* Spawn a local broker process and return a connected client.
|
|
177
|
+
*
|
|
178
|
+
* 1. Generates a random API key
|
|
179
|
+
* 2. Spawns the broker binary (attached)
|
|
180
|
+
* 3. Parses the API port from stdout
|
|
181
|
+
* 4. Connects HTTP/WS transport
|
|
182
|
+
* 5. Fetches session metadata
|
|
183
|
+
* 6. Starts event stream + lease renewal
|
|
184
|
+
*/
|
|
185
|
+
static spawn(options?: RuntimeSpawnOptions): Promise<HarnessDriverClient>;
|
|
186
|
+
/** PID of the managed broker process, if spawned locally. */
|
|
187
|
+
get brokerPid(): number | undefined;
|
|
188
|
+
getSession(): Promise<SessionInfo>;
|
|
189
|
+
healthCheck(): Promise<{
|
|
190
|
+
service: string;
|
|
191
|
+
}>;
|
|
192
|
+
connectEvents(sinceSeq?: number): void;
|
|
193
|
+
disconnectEvents(): void;
|
|
194
|
+
onEvent(listener: (event: BrokerEvent) => void): () => void;
|
|
195
|
+
/**
|
|
196
|
+
* Subscribe to managed broker child-process exit.
|
|
197
|
+
*
|
|
198
|
+
* Clients created with `new HarnessDriverClient(...)` or `connect()` do not own a
|
|
199
|
+
* broker child process, so this is a no-op for them.
|
|
200
|
+
*/
|
|
201
|
+
onBrokerExit(listener: BrokerExitListener): () => void;
|
|
202
|
+
queryEvents(filter?: {
|
|
203
|
+
kind?: string;
|
|
204
|
+
name?: string;
|
|
205
|
+
since?: number;
|
|
206
|
+
limit?: number;
|
|
207
|
+
}): BrokerEvent[];
|
|
208
|
+
getLastEvent(kind: string, name?: string): BrokerEvent | undefined;
|
|
209
|
+
spawnPty(input: SpawnPtyInput): Promise<SpawnAgentResult>;
|
|
210
|
+
spawnCli(input: SpawnCliInput): Promise<SpawnAgentResult>;
|
|
211
|
+
private spawnCliWithContext;
|
|
212
|
+
spawnHeadless(input: SpawnHeadlessInput): Promise<SpawnAgentResult>;
|
|
213
|
+
spawnClaude(input: Omit<SpawnCliInput, 'cli'>): Promise<SpawnAgentResult>;
|
|
214
|
+
spawnOpencode(input: Omit<SpawnCliInput, 'cli'>): Promise<SpawnAgentResult>;
|
|
215
|
+
release(name: string, reason?: string): Promise<{
|
|
216
|
+
name: string;
|
|
217
|
+
}>;
|
|
218
|
+
private emitAfterSpawn;
|
|
219
|
+
listAgents(): Promise<ListAgent[]>;
|
|
220
|
+
sendInput(name: string, data: string): Promise<{
|
|
221
|
+
name: string;
|
|
222
|
+
bytes_written: number;
|
|
223
|
+
}>;
|
|
224
|
+
openInputStream(name: string, options?: PtyInputStreamOptions): PtyInputStream;
|
|
225
|
+
resizePty(name: string, rows: number, cols: number): Promise<{
|
|
226
|
+
name: string;
|
|
227
|
+
rows: number;
|
|
228
|
+
cols: number;
|
|
229
|
+
}>;
|
|
230
|
+
getInboundDeliveryMode(name: string): Promise<InboundDeliveryMode>;
|
|
231
|
+
setInboundDeliveryMode(name: string, mode: InboundDeliveryMode): Promise<SetInboundDeliveryModeResult>;
|
|
232
|
+
getPending(name: string): Promise<PendingRelayMessage[]>;
|
|
233
|
+
flushPending(name: string): Promise<{
|
|
234
|
+
flushed: number;
|
|
235
|
+
}>;
|
|
236
|
+
snapshot(name: string, format?: SnapshotFormat): Promise<PtySnapshot>;
|
|
237
|
+
subscribeWorkerStream(name: string, options?: WorkerStreamSubscriptionOptions): AsyncIterable<string>;
|
|
238
|
+
sendMessage(input: SendMessageInput): Promise<{
|
|
239
|
+
event_id: string;
|
|
240
|
+
targets: string[];
|
|
241
|
+
}>;
|
|
242
|
+
setModel(name: string, model: string, opts?: {
|
|
243
|
+
timeoutMs?: number;
|
|
244
|
+
}): Promise<{
|
|
245
|
+
name: string;
|
|
246
|
+
model: string;
|
|
247
|
+
success: boolean;
|
|
248
|
+
}>;
|
|
249
|
+
subscribeChannels(name: string, channels: string[]): Promise<void>;
|
|
250
|
+
unsubscribeChannels(name: string, channels: string[]): Promise<void>;
|
|
251
|
+
getMetrics(agent?: string): Promise<{
|
|
252
|
+
agents: Array<{
|
|
253
|
+
name: string;
|
|
254
|
+
pid: number;
|
|
255
|
+
memory_bytes: number;
|
|
256
|
+
uptime_secs: number;
|
|
257
|
+
}>;
|
|
258
|
+
broker?: BrokerStats;
|
|
259
|
+
}>;
|
|
260
|
+
getStatus(): Promise<BrokerStatus>;
|
|
261
|
+
getCrashInsights(): Promise<CrashInsightsResponse>;
|
|
262
|
+
preflight(agents: Array<{
|
|
263
|
+
name: string;
|
|
264
|
+
cli: string;
|
|
265
|
+
}>): Promise<{
|
|
266
|
+
queued: number;
|
|
267
|
+
}>;
|
|
268
|
+
renewLease(): Promise<{
|
|
269
|
+
renewed: boolean;
|
|
270
|
+
expires_in_secs: number;
|
|
271
|
+
}>;
|
|
272
|
+
/**
|
|
273
|
+
* Shut down and clean up.
|
|
274
|
+
* - For spawned brokers (via .spawn()): sends POST /api/shutdown to kill the broker, waits for exit.
|
|
275
|
+
* - For connected brokers (via .connect() or constructor): just disconnects the transport.
|
|
276
|
+
* Does NOT kill the broker — the caller doesn't own it.
|
|
277
|
+
*/
|
|
278
|
+
shutdown(): Promise<void>;
|
|
279
|
+
/** Disconnect without shutting down the broker. Alias for cases where the intent is clear. */
|
|
280
|
+
disconnect(): void;
|
|
281
|
+
getConfig(): Promise<{
|
|
282
|
+
workspaceKey?: string;
|
|
283
|
+
}>;
|
|
284
|
+
private notifyBrokerExit;
|
|
285
|
+
private installManagedBrokerExitHandler;
|
|
286
|
+
}
|
|
287
|
+
declare function drainBrokerStdioAfterStartup(child: ChildProcess): void;
|
|
288
|
+
/** @internal Test-only hooks; not part of the public SDK API. */
|
|
289
|
+
export declare const __clientTestInternals: {
|
|
290
|
+
drainBrokerStdioAfterStartup: typeof drainBrokerStdioAfterStartup;
|
|
291
|
+
};
|
|
292
|
+
export {};
|
|
293
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,qBAAqB,EAErB,mBAAmB,EACnB,WAAW,EACX,mBAAmB,EACnB,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAEV,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,SAAS,EACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAGV,mBAAmB,EAGnB,uBAAuB,EAExB,MAAM,sBAAsB,CAAC;AAI9B,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,qDAAqD;IACrD,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,oEAAoE;IACpE,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;CAC1C;AAKD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAWnB,CAAC;AAEjB,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,+BAA+B;IAC9C,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD,KAAK,kBAAkB,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;AAkHzD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAE5C,qDAAqD;IACrD,OAAO,CAAC,KAAK,CAA6B;IAC1C,sDAAsD;IACtD,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,mBAAmB,CAAiC;IAE5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;gBAErC,OAAO,EAAE,0BAA0B;IAW/C;;;;;;;;;;OAUG;IACH,WAAW,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,uBAAuB,GAAG,MAAM,IAAI;IACpF,WAAW,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAC7C,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACjE,MAAM,IAAI;IAWb,+CAA+C;IAC/C,cAAc,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,uBAAuB,GAAG,IAAI;IACjF,cAAc,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAChD,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GACjE,IAAI;IAQP;;;;;OAKG;YACW,cAAc;IAmB5B;;;;;;;;OAQG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACvB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;KAC1C,GAAG,mBAAmB;IAwCvB;;;;;;;;;OASG;WACU,KAAK,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuH/E,6DAA6D;IAC7D,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAIK,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAMlC,WAAW,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAMjD,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAItC,gBAAgB,IAAI,IAAI;IAIxB,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI;IAI3D;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAyBtD,WAAW,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,EAAE;IAIrG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAM5D,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwBzD,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAWjD,mBAAmB;IA+B3B,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAYnE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIzE,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3E,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;YA6BzD,cAAc;IAiBtB,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAOlC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAO7F,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc;IAIxE,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAOlD,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAalE,sBAAsB,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,4BAA4B,CAAC;IAoBlC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAOxD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAQxD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,cAAwB,GAAG,OAAO,CAAC,WAAW,CAAC;IAMpF,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,+BAAoC,GAAG,aAAa,CAAC,MAAM,CAAC;IA6EnG,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA0BtF,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IASvD,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IASpE,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACxC,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACxF,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,CAAC;IAKI,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAIlC,gBAAgB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAMlD,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAOpF,UAAU,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IAI1E;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB/B,8FAA8F;IAC9F,UAAU,IAAI,IAAI;IAQZ,SAAS,IAAI,OAAO,CAAC;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAIrD,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,+BAA+B;CAyBxC;AA+ED,iBAAS,4BAA4B,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAW/D;AAED,iEAAiE;AACjE,eAAO,MAAM,qBAAqB;;CAEjC,CAAC"}
|