@masons/agent-network 0.5.14 → 0.5.16
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/channel.d.ts +0 -7
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +3 -174
- package/dist/cli-setup.d.ts +0 -109
- package/dist/cli-setup.d.ts.map +1 -1
- package/dist/cli-setup.js +16 -570
- package/dist/config-fs.d.ts +4 -0
- package/dist/config-fs.d.ts.map +1 -0
- package/dist/config-fs.js +23 -0
- package/dist/config-schema.js +2 -2
- package/dist/config.d.ts +2 -210
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -334
- package/dist/connector-client.d.ts +0 -32
- package/dist/connector-client.d.ts.map +1 -1
- package/dist/connector-client.js +1 -89
- package/dist/constants.d.ts +0 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -3
- package/dist/conversation-manager.d.ts +0 -106
- package/dist/conversation-manager.d.ts.map +1 -1
- package/dist/conversation-manager.js +2 -131
- package/dist/environment-context.d.ts +0 -24
- package/dist/environment-context.d.ts.map +1 -1
- package/dist/environment-context.js +0 -42
- package/dist/handle-utils.d.ts +0 -14
- package/dist/handle-utils.d.ts.map +1 -1
- package/dist/handle-utils.js +0 -14
- package/dist/index.js +0 -9
- package/dist/owner-notes.d.ts +0 -33
- package/dist/owner-notes.d.ts.map +1 -1
- package/dist/owner-notes.js +2 -41
- package/dist/owner-session-state.d.ts +0 -26
- package/dist/owner-session-state.d.ts.map +1 -1
- package/dist/owner-session-state.js +0 -37
- package/dist/platform-client.d.ts +13 -202
- package/dist/platform-client.d.ts.map +1 -1
- package/dist/platform-client.js +22 -171
- package/dist/plugin.d.ts +5 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +3 -167
- package/dist/sent-message-buffer.d.ts +0 -36
- package/dist/sent-message-buffer.d.ts.map +1 -1
- package/dist/sent-message-buffer.js +1 -45
- package/dist/tools.d.ts +0 -28
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +36 -240
- package/dist/turn-context.d.ts +0 -45
- package/dist/turn-context.d.ts.map +1 -1
- package/dist/turn-context.js +0 -57
- package/dist/types.d.ts +0 -67
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -7
- package/dist/update-cache.d.ts +0 -17
- package/dist/update-cache.d.ts.map +1 -1
- package/dist/update-cache.js +1 -21
- package/dist/update-check.d.ts +1 -40
- package/dist/update-check.d.ts.map +1 -1
- package/dist/update-check.js +7 -66
- package/dist/version.d.ts +1 -2
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -2
- package/openclaw.plugin.json +94 -3
- package/package.json +11 -10
- package/skills/agent-network/SKILL.md +21 -47
- package/skills/agent-network/references/troubleshooting.md +5 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-fs.d.ts","sourceRoot":"","sources":["../src/config-fs.ts"],"names":[],"mappings":"AAKA,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAMD,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAOnE;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
export function getOpenClawHome() {
|
|
5
|
+
return process.env.OPENCLAW_HOME || join(homedir(), ".openclaw");
|
|
6
|
+
}
|
|
7
|
+
function getConfigPath() {
|
|
8
|
+
return join(getOpenClawHome(), "openclaw.json");
|
|
9
|
+
}
|
|
10
|
+
export async function readConfig() {
|
|
11
|
+
try {
|
|
12
|
+
const raw = await readFile(getConfigPath(), "utf-8");
|
|
13
|
+
return JSON.parse(raw);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export async function persistConfig(config) {
|
|
20
|
+
const configPath = getConfigPath();
|
|
21
|
+
await mkdir(dirname(configPath), { recursive: true });
|
|
22
|
+
await writeFile(configPath, JSON.stringify(config, null, 2), "utf-8");
|
|
23
|
+
}
|
package/dist/config-schema.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
2
|
export const AgentNetworkAccountSchema = Type.Object({
|
|
3
3
|
connectorUrl: Type.String({
|
|
4
|
-
description: "WebSocket URL of the Connector
|
|
4
|
+
description: "WebSocket URL of the Connector Gateway endpoint",
|
|
5
5
|
}),
|
|
6
6
|
token: Type.String({
|
|
7
|
-
description: "
|
|
7
|
+
description: "Runtime authentication token",
|
|
8
8
|
}),
|
|
9
9
|
});
|
package/dist/config.d.ts
CHANGED
|
@@ -1,251 +1,43 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Config & runtime bridge — mediates shared state between channel.ts and tools.ts.
|
|
3
|
-
*
|
|
4
|
-
* Read/write separation architecture:
|
|
5
|
-
* - **Reads**: `initToolConfig(ctx.cfg)` injects Host-provided config into
|
|
6
|
-
* module-level variables. Tools read from these vars via guard functions.
|
|
7
|
-
* - **Writes**: 3 fs functions write to `openclaw.json`, signaling the Host
|
|
8
|
-
* (Gateway monitors file changes for hot-reload / restart).
|
|
9
|
-
* - **Runtime**: `initConnectorClient(client)` injects the live WebSocket
|
|
10
|
-
* client after connection is established. Conversation tools read it via
|
|
11
|
-
* `requireConnectorClient()`.
|
|
12
|
-
*
|
|
13
|
-
* `ctx.cfg` is the Host's authoritative value for this process lifecycle.
|
|
14
|
-
* Plugin does not re-parse the config file for reads.
|
|
15
|
-
*
|
|
16
|
-
*/
|
|
17
1
|
import type { ConnectorClient } from "./connector-client.js";
|
|
18
2
|
import type { ConversationManager } from "./conversation-manager.js";
|
|
19
3
|
import { type PlatformClientConfig } from "./platform-client.js";
|
|
20
|
-
|
|
21
|
-
* Current state cache generation. Incremented by config-modifying functions.
|
|
22
|
-
* Used by before_prompt_build to detect when cached state needs a refresh.
|
|
23
|
-
*/
|
|
4
|
+
export { getOpenClawHome } from "./config-fs.js";
|
|
24
5
|
export declare function getStateCacheGeneration(): number;
|
|
25
|
-
/**
|
|
26
|
-
* Extract the `channels.agent-network` section from the full OpenClaw config.
|
|
27
|
-
*
|
|
28
|
-
* OpenClaw Gateway passes the ENTIRE config (all of openclaw.json) to
|
|
29
|
-
* channel adapter methods and startAccount(). This helper navigates to
|
|
30
|
-
* the agent-network-specific section.
|
|
31
|
-
*
|
|
32
|
-
*/
|
|
33
6
|
export declare function extractNetworkConfig(cfg: Record<string, unknown>): Record<string, unknown> | null;
|
|
34
|
-
/**
|
|
35
|
-
* Inject Host-provided config into module-level variables.
|
|
36
|
-
*
|
|
37
|
-
* Called by `startAccount()` each time Gateway starts or hot-reloads.
|
|
38
|
-
* Ensures tools always read the Host's current config values.
|
|
39
|
-
*/
|
|
40
7
|
export declare function initToolConfig(cfg: Record<string, unknown>): void;
|
|
41
|
-
/**
|
|
42
|
-
* Whether `session.identityLinks` contains at least one entry with the
|
|
43
|
-
* `agent-network:` channel prefix — indicating the owner's agent-network
|
|
44
|
-
* identity is linked to another channel.
|
|
45
|
-
*/
|
|
46
8
|
export declare function isIdentityLinksConfigured(): boolean;
|
|
47
|
-
/**
|
|
48
|
-
* Current dmScope mode from Gateway config (`cfg.session.dmScope`).
|
|
49
|
-
*
|
|
50
|
-
* Determines how the plugin handles cross-channel identity:
|
|
51
|
-
* - "main" (default): all DMs share one session. Identity linking has no effect.
|
|
52
|
-
* - "per-peer": identity linking merges sessions across channels.
|
|
53
|
-
* - "per-channel-peer" / "per-account-channel-peer": identity linking normalizes
|
|
54
|
-
* peerId but sessions stay separate per channel.
|
|
55
|
-
*/
|
|
56
9
|
export declare function getDmScope(): string;
|
|
57
|
-
/**
|
|
58
|
-
* Inject the live ConnectorClient after WebSocket connection is established.
|
|
59
|
-
*
|
|
60
|
-
* Called by `startAccount()` AFTER `client.connect()` resolves — ensures
|
|
61
|
-
* tools never receive a client with a null WebSocket.
|
|
62
|
-
*
|
|
63
|
-
* Phase 1 supports a single account. The double-init guard makes this
|
|
64
|
-
* assumption explicit: a second call without `clearConnectorClient()` throws.
|
|
65
|
-
*/
|
|
66
10
|
export declare function initConnectorClient(client: ConnectorClient): void;
|
|
67
|
-
/**
|
|
68
|
-
* Clear the stored ConnectorClient reference.
|
|
69
|
-
*
|
|
70
|
-
* Called by `stopAccount()` and at `startAccount()` entry (defensive).
|
|
71
|
-
* NOT called by the abort handler — see #935.
|
|
72
|
-
*/
|
|
73
11
|
export declare function clearConnectorClient(): void;
|
|
74
|
-
/**
|
|
75
|
-
* Inject the live ConversationManager after WebSocket connection is established.
|
|
76
|
-
*
|
|
77
|
-
* Called by `startAccount()` AFTER `client.connect()` resolves — ensures
|
|
78
|
-
* tools always get a manager backed by a connected client.
|
|
79
|
-
*/
|
|
80
12
|
export declare function initConversationManager(manager: ConversationManager): void;
|
|
81
|
-
/**
|
|
82
|
-
* Clear the stored ConversationManager reference.
|
|
83
|
-
*
|
|
84
|
-
* Called by `stopAccount()` and at `startAccount()` entry (defensive).
|
|
85
|
-
* NOT called by the abort handler — in-flight tools need the stale CM
|
|
86
|
-
* to graceful-fail via disconnected WebSocket instead of throwing (#935).
|
|
87
|
-
*/
|
|
88
13
|
export declare function clearConversationManager(): void;
|
|
89
|
-
/**
|
|
90
|
-
* Get the live ConversationManager. Throws if not initialized.
|
|
91
|
-
*/
|
|
92
14
|
export declare function requireConversationManager(): ConversationManager;
|
|
93
|
-
/**
|
|
94
|
-
* Get the live ConversationManager, or null if not yet initialized.
|
|
95
|
-
*
|
|
96
|
-
* Non-throwing variant for use in before_prompt_build where the connection
|
|
97
|
-
* may not be established yet (e.g., during setup flow). Callers must handle
|
|
98
|
-
* the null case gracefully.
|
|
99
|
-
*/
|
|
100
15
|
export declare function getConversationManager(): ConversationManager | null;
|
|
101
|
-
/**
|
|
102
|
-
* Store the OpenClaw PluginRuntime for inbound message dispatch.
|
|
103
|
-
*
|
|
104
|
-
* Called by `register(api)` in plugin.ts — captures `api.runtime` which
|
|
105
|
-
* provides `runtime.channel.*` (routing, reply, session) used by the
|
|
106
|
-
* 4-step inbound dispatch flow in channel.ts.
|
|
107
|
-
*
|
|
108
|
-
* Idempotent: overwrites on re-call. Gateway may hot-reload plugins,
|
|
109
|
-
* calling `register()` again without a teardown counterpart.
|
|
110
|
-
*/
|
|
111
16
|
export declare function initPluginRuntime(runtime: unknown): void;
|
|
112
|
-
/**
|
|
113
|
-
* Clear the stored PluginRuntime reference.
|
|
114
|
-
*/
|
|
115
17
|
export declare function clearPluginRuntime(): void;
|
|
116
|
-
/**
|
|
117
|
-
* Get the stored PluginRuntime. Throws if not initialized.
|
|
118
|
-
*
|
|
119
|
-
* Callers cast the result to `PluginRuntime` (defined in channel.ts)
|
|
120
|
-
* at the usage site. Typed as `unknown` here to avoid circular imports.
|
|
121
|
-
*/
|
|
122
18
|
export declare function requirePluginRuntime(): unknown;
|
|
123
|
-
/**
|
|
124
|
-
* Get platform config. Always returns a valid config — defaults are set
|
|
125
|
-
* at module load time, and overwritten by `initToolConfig()` when
|
|
126
|
-
* `startAccount()` runs.
|
|
127
|
-
*
|
|
128
|
-
* This ensures setup tools work on first install (before credentials
|
|
129
|
-
* exist and before `startAccount()` has run).
|
|
130
|
-
*/
|
|
131
19
|
export declare function requirePlatformConfig(): PlatformClientConfig;
|
|
132
|
-
/**
|
|
133
|
-
* Get stored API key. Throws if no credentials are configured.
|
|
134
|
-
*/
|
|
135
20
|
export declare function requireApiKey(): string;
|
|
136
|
-
/**
|
|
137
|
-
* Get pending connection target handle, or null if none.
|
|
138
|
-
*/
|
|
139
21
|
export declare function getPendingTarget(): string | null;
|
|
140
|
-
/**
|
|
141
|
-
* Whether the agent needs profile completion before connecting.
|
|
142
|
-
*
|
|
143
|
-
* True after onboard (new agent creation), cleared after all required
|
|
144
|
-
* profile fields are filled. Used by connection tools to gate requests
|
|
145
|
-
* until the agent has a visible identity.
|
|
146
|
-
*/
|
|
147
22
|
export declare function isProfileNeeded(): boolean;
|
|
148
|
-
/**
|
|
149
|
-
* Get the live ConnectorClient. Throws if not initialized.
|
|
150
|
-
*
|
|
151
|
-
* Note: The returned client may be in a reconnecting state (WebSocket
|
|
152
|
-
* temporarily null after a drop). Callers must handle `false` returns
|
|
153
|
-
* from send methods (`sendMessage`, `createSession`, `endSession`).
|
|
154
|
-
*/
|
|
155
23
|
export declare function requireConnectorClient(): ConnectorClient;
|
|
156
|
-
/** Resolve the OpenClaw home directory (`$OPENCLAW_HOME` or `~/.openclaw`). */
|
|
157
|
-
export declare function getOpenClawHome(): string;
|
|
158
24
|
export interface NetworkCredentials {
|
|
159
25
|
connectorUrl: string;
|
|
160
26
|
token: string;
|
|
161
27
|
}
|
|
162
|
-
|
|
163
|
-
* Write credentials + apiHost (+ optional idpBaseUrl) to `openclaw.json`.
|
|
164
|
-
*
|
|
165
|
-
* Atomic: all fields are written in a single persistConfig() call to avoid
|
|
166
|
-
* partial-write race conditions.
|
|
167
|
-
*
|
|
168
|
-
* `idpBaseUrl` is written only when provided, mirroring `apiHost`'s pattern —
|
|
169
|
-
* omitted values leave any existing field in place (useful when callers want
|
|
170
|
-
* to refresh credentials without overriding IdP URL).
|
|
171
|
-
*/
|
|
28
|
+
export declare function readExistingConnectorUrl(): Promise<string | undefined>;
|
|
172
29
|
export declare function writeCredentials(creds: NetworkCredentials, apiHost?: string, idpBaseUrl?: string): Promise<void>;
|
|
173
|
-
/**
|
|
174
|
-
* Write pending connection target handle.
|
|
175
|
-
*
|
|
176
|
-
* Used in the invitation flow: when an agent visits another agent's page
|
|
177
|
-
* and installs the plugin, the target handle is persisted here before
|
|
178
|
-
* restart. After restart, Layer B (`detectPendingState`) reads it back
|
|
179
|
-
* and injects continuity context so the agent knows who to connect to.
|
|
180
|
-
*/
|
|
181
30
|
export declare function writeTargetHandle(handle: string): Promise<void>;
|
|
182
|
-
/**
|
|
183
|
-
* Clear pending connection target from config file AND module-level variable.
|
|
184
|
-
*
|
|
185
|
-
* This is a deliberate exception to the read/write separation pattern:
|
|
186
|
-
* we also update `storedPendingTarget` in memory to avoid stale reads
|
|
187
|
-
* within the same session (since `initToolConfig()` only runs at startup).
|
|
188
|
-
*/
|
|
189
31
|
export declare function clearTargetHandle(): Promise<void>;
|
|
190
|
-
/**
|
|
191
|
-
* Mark that this agent needs profile completion.
|
|
192
|
-
*
|
|
193
|
-
* Called after onboard (new agent creation) — the agent has an empty profile.
|
|
194
|
-
* The before_prompt_build hook reads this to inject profile generation context.
|
|
195
|
-
*/
|
|
196
32
|
export declare function markProfileNeeded(): Promise<void>;
|
|
197
|
-
/**
|
|
198
|
-
* Mark that profile completion is done.
|
|
199
|
-
*
|
|
200
|
-
* Called after successful masons_update_profile — clears the needsProfile flag
|
|
201
|
-
* so the before_prompt_build hook no longer injects profile context.
|
|
202
|
-
* Also updates the in-memory `storedNeedsProfile` flag so tool-level gates
|
|
203
|
-
* (connection request / accept) take effect immediately without a restart.
|
|
204
|
-
*/
|
|
205
33
|
export declare function markProfileComplete(): Promise<void>;
|
|
206
|
-
/**
|
|
207
|
-
* Write cross-channel identity links to `config.session.identityLinks`.
|
|
208
|
-
*
|
|
209
|
-
* **Entry-level additive merge** (2026-03-26, #986 redesign):
|
|
210
|
-
* New entries are merged INTO the existing canonical group, deduped,
|
|
211
|
-
* lowercase-normalized. Never overwrites other canonical groups, and
|
|
212
|
-
* never removes existing entries within the same group.
|
|
213
|
-
*
|
|
214
|
-
* This allows one-channel-at-a-time linking: first call adds Telegram,
|
|
215
|
-
* second call adds Feishu — without losing the Telegram entry.
|
|
216
|
-
*
|
|
217
|
-
* This writes to `session.*` (Gateway-level), not `channels.agent-network.*`.
|
|
218
|
-
* Justified because cross-channel identity is inherently a Gateway concern,
|
|
219
|
-
* and the Gateway provides the full config to plugins via `ctx.cfg`.
|
|
220
|
-
*
|
|
221
|
-
* Follows the same readConfig → merge → persistConfig pattern as
|
|
222
|
-
* writeCredentials() and writeTargetHandle().
|
|
223
|
-
*/
|
|
224
34
|
export declare function writeIdentityLinks(canonical: string, entries: string[]): Promise<void>;
|
|
225
|
-
/**
|
|
226
|
-
* Remove a canonical identity group from `config.session.identityLinks`.
|
|
227
|
-
*
|
|
228
|
-
* Undo path for `writeIdentityLinks()`. Removes only the specified
|
|
229
|
-
* canonical key; other groups are preserved.
|
|
230
|
-
*/
|
|
231
35
|
export declare function removeIdentityLinks(canonical: string): Promise<void>;
|
|
232
|
-
/** Pending state detected from config file — used for restart continuity. */
|
|
233
36
|
export interface PendingState {
|
|
234
|
-
/** Whether valid credentials exist (connectorUrl + token) */
|
|
235
37
|
hasCredentials: boolean;
|
|
236
|
-
/** Pending connection target handle, or null if none */
|
|
237
38
|
pendingTarget: string | null;
|
|
238
|
-
/** Whether the agent needs profile completion (new agent, empty profile) */
|
|
239
39
|
needsProfile: boolean;
|
|
240
40
|
}
|
|
241
|
-
/**
|
|
242
|
-
* Detect pending state by reading config file directly.
|
|
243
|
-
*
|
|
244
|
-
* Unlike `initToolConfig()` which is called by `startAccount()`, this reads
|
|
245
|
-
* from disk — available even when the channel hasn't started (no credentials).
|
|
246
|
-
* Used by Layer B (before_prompt_build hook) for per-turn context injection.
|
|
247
|
-
*/
|
|
248
41
|
export declare function detectPendingState(): Promise<PendingState>;
|
|
249
|
-
/** @internal Reset module state for test isolation. */
|
|
250
42
|
export declare function _resetForTesting(): void;
|
|
251
43
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAoCjD,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAsBD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAMhC;AAYD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAyCjE;AAuCD,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAWD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAeD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAOjE;AAQD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAYD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAE1E;AASD,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAKD,wBAAgB,0BAA0B,IAAI,mBAAmB,CAOhE;AASD,wBAAgB,sBAAsB,IAAI,mBAAmB,GAAG,IAAI,CAEnE;AAgBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAExD;AAKD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAQD,wBAAgB,oBAAoB,IAAI,OAAO,CAO9C;AAcD,wBAAgB,qBAAqB,IAAI,oBAAoB,CAE5D;AAKD,wBAAgB,aAAa,IAAI,MAAM,CAKtC;AAKD,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEhD;AASD,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AASD,wBAAgB,sBAAsB,IAAI,eAAe,CAOxD;AAyBD,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAQD,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW5E;AAYD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,kBAAkB,EACzB,OAAO,CAAC,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAkCf;AAUD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrE;AASD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CASvD;AAYD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOvD;AAUD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAOzD;AAwCD,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAQD,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B1E;AAOD,MAAM,WAAW,YAAY;IAE3B,cAAc,EAAE,OAAO,CAAC;IAExB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B,YAAY,EAAE,OAAO,CAAC;CACvB;AASD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CA2BhE;AAOD,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC"}
|