@elizaos/plugin-browser 2.0.0-beta.1 → 2.0.3-beta.3
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/LICENSE +21 -0
- package/README.md +106 -64
- package/dist/actions/browser-autofill-login.d.ts.map +1 -1
- package/dist/actions/browser-autofill-login.js.map +1 -1
- package/dist/actions/browser.d.ts +5 -6
- package/dist/actions/browser.d.ts.map +1 -1
- package/dist/actions/browser.js +312 -60
- package/dist/actions/browser.js.map +1 -1
- package/dist/actions/manage-browser-bridge.d.ts.map +1 -1
- package/dist/actions/manage-browser-bridge.js +10 -14
- package/dist/actions/manage-browser-bridge.js.map +1 -1
- package/dist/actions/wait-for-url-predicate.d.ts +34 -0
- package/dist/actions/wait-for-url-predicate.d.ts.map +1 -0
- package/dist/actions/wait-for-url-predicate.js +33 -0
- package/dist/actions/wait-for-url-predicate.js.map +1 -0
- package/dist/actions/wait-for-url.d.ts +64 -0
- package/dist/actions/wait-for-url.d.ts.map +1 -0
- package/dist/actions/wait-for-url.js +89 -0
- package/dist/actions/wait-for-url.js.map +1 -0
- package/dist/bridge-policy.d.ts +10 -0
- package/dist/bridge-policy.d.ts.map +1 -0
- package/dist/bridge-policy.js +37 -0
- package/dist/bridge-policy.js.map +1 -0
- package/dist/bridge-readiness.d.ts +16 -0
- package/dist/bridge-readiness.d.ts.map +1 -0
- package/dist/bridge-readiness.js +82 -0
- package/dist/bridge-readiness.js.map +1 -0
- package/dist/bridge-records.d.ts +9 -0
- package/dist/bridge-records.d.ts.map +1 -0
- package/dist/bridge-records.js +37 -0
- package/dist/bridge-records.js.map +1 -0
- package/dist/browser-capture-hooks.d.ts +9 -0
- package/dist/browser-capture-hooks.d.ts.map +1 -0
- package/dist/browser-capture-hooks.js +15 -0
- package/dist/browser-capture-hooks.js.map +1 -0
- package/dist/browser-service.d.ts +22 -4
- package/dist/browser-service.d.ts.map +1 -1
- package/dist/browser-service.js +63 -15
- package/dist/browser-service.js.map +1 -1
- package/dist/browser-workspace-hooks.d.ts +14 -0
- package/dist/browser-workspace-hooks.d.ts.map +1 -0
- package/dist/browser-workspace-hooks.js +15 -0
- package/dist/browser-workspace-hooks.js.map +1 -0
- package/dist/companion-auth.d.ts +34 -0
- package/dist/companion-auth.d.ts.map +1 -0
- package/dist/companion-auth.js +98 -0
- package/dist/companion-auth.js.map +1 -0
- package/dist/index.d.ts +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +66 -12
- package/dist/index.js.map +1 -1
- package/dist/message-adapter.d.ts +9 -0
- package/dist/message-adapter.d.ts.map +1 -0
- package/dist/message-adapter.js +104 -0
- package/dist/message-adapter.js.map +1 -0
- package/dist/packaging.d.ts.map +1 -1
- package/dist/packaging.js +2 -0
- package/dist/packaging.js.map +1 -1
- package/dist/parity/browser-matrix.d.ts +45 -0
- package/dist/parity/browser-matrix.d.ts.map +1 -0
- package/dist/parity/browser-matrix.js +361 -0
- package/dist/parity/browser-matrix.js.map +1 -0
- package/dist/parity/index.d.ts +5 -0
- package/dist/parity/index.d.ts.map +1 -0
- package/dist/parity/index.js +13 -0
- package/dist/parity/index.js.map +1 -0
- package/dist/password-manager-bridge.d.ts +50 -0
- package/dist/password-manager-bridge.d.ts.map +1 -0
- package/dist/password-manager-bridge.js +437 -0
- package/dist/password-manager-bridge.js.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +8 -4
- package/dist/plugin.js.map +1 -1
- package/dist/providers/workspace.d.ts +1 -1
- package/dist/providers/workspace.js.map +1 -1
- package/dist/routes/bridge.d.ts.map +1 -1
- package/dist/routes/bridge.js +63 -14
- package/dist/routes/bridge.js.map +1 -1
- package/dist/routes/workspace-setup.d.ts.map +1 -1
- package/dist/routes/workspace-setup.js +1 -1
- package/dist/routes/workspace-setup.js.map +1 -1
- package/dist/routes/workspace.d.ts +1 -2
- package/dist/routes/workspace.d.ts.map +1 -1
- package/dist/routes/workspace.js +104 -4
- package/dist/routes/workspace.js.map +1 -1
- package/dist/schema.d.ts +2 -2
- package/dist/schema.js.map +1 -1
- package/dist/service.d.ts +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js.map +1 -1
- package/dist/targets/bridge-target.d.ts +1 -1
- package/dist/targets/bridge-target.d.ts.map +1 -1
- package/dist/targets/bridge-target.js.map +1 -1
- package/dist/targets/stagehand-target.d.ts +3 -0
- package/dist/targets/stagehand-target.d.ts.map +1 -0
- package/dist/targets/stagehand-target.js +187 -0
- package/dist/targets/stagehand-target.js.map +1 -0
- package/dist/workspace/browser-capture.d.ts +1 -1
- package/dist/workspace/browser-capture.d.ts.map +1 -1
- package/dist/workspace/browser-capture.js +33 -1
- package/dist/workspace/browser-capture.js.map +1 -1
- package/dist/workspace/browser-workspace-desktop.d.ts +1 -1
- package/dist/workspace/browser-workspace-desktop.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-desktop.js +66 -30
- package/dist/workspace/browser-workspace-desktop.js.map +1 -1
- package/dist/workspace/browser-workspace-errors.d.ts +62 -0
- package/dist/workspace/browser-workspace-errors.d.ts.map +1 -0
- package/dist/workspace/browser-workspace-errors.js +69 -0
- package/dist/workspace/browser-workspace-errors.js.map +1 -0
- package/dist/workspace/browser-workspace-forms.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-forms.js +1 -1
- package/dist/workspace/browser-workspace-forms.js.map +1 -1
- package/dist/workspace/browser-workspace-helpers.d.ts +7 -0
- package/dist/workspace/browser-workspace-helpers.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-helpers.js +64 -6
- package/dist/workspace/browser-workspace-helpers.js.map +1 -1
- package/dist/workspace/browser-workspace-network.d.ts +1 -1
- package/dist/workspace/browser-workspace-network.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-types.d.ts +15 -0
- package/dist/workspace/browser-workspace-types.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-types.js.map +1 -1
- package/dist/workspace/browser-workspace-web.d.ts.map +1 -1
- package/dist/workspace/browser-workspace-web.js +34 -93
- package/dist/workspace/browser-workspace-web.js.map +1 -1
- package/dist/workspace/browser-workspace.d.ts +1 -1
- package/dist/workspace/browser-workspace.d.ts.map +1 -1
- package/dist/workspace/browser-workspace.js +9 -4
- package/dist/workspace/browser-workspace.js.map +1 -1
- package/dist/workspace/index.d.ts +1 -0
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -0
- package/dist/workspace/index.js.map +1 -1
- package/package.json +29 -7
- package/registry-entry.json +75 -0
- package/dist/actions/browser-autofill-login.d.js +0 -1
- package/dist/actions/browser-autofill-login.d.js.map +0 -1
- package/dist/actions/browser.d.js +0 -1
- package/dist/actions/browser.d.js.map +0 -1
- package/dist/actions/manage-browser-bridge.d.js +0 -1
- package/dist/actions/manage-browser-bridge.d.js.map +0 -1
- package/dist/ambient-jsdom.d.js +0 -1
- package/dist/ambient-jsdom.d.js.map +0 -1
- package/dist/browser-service.d.js +0 -1
- package/dist/browser-service.d.js.map +0 -1
- package/dist/contracts.d.js +0 -1
- package/dist/contracts.d.js.map +0 -1
- package/dist/index.d.js +0 -21
- package/dist/index.d.js.map +0 -1
- package/dist/lifeops-session-contracts.d.js +0 -1
- package/dist/lifeops-session-contracts.d.js.map +0 -1
- package/dist/packaging.d.js +0 -1
- package/dist/packaging.d.js.map +0 -1
- package/dist/plugin.d.js +0 -1
- package/dist/plugin.d.js.map +0 -1
- package/dist/providers/workspace.d.js +0 -1
- package/dist/providers/workspace.d.js.map +0 -1
- package/dist/routes/bridge.d.js +0 -1
- package/dist/routes/bridge.d.js.map +0 -1
- package/dist/routes/workspace-account-gate.d.js +0 -1
- package/dist/routes/workspace-account-gate.d.js.map +0 -1
- package/dist/routes/workspace-setup.d.js +0 -1
- package/dist/routes/workspace-setup.d.js.map +0 -1
- package/dist/routes/workspace.d.js +0 -1
- package/dist/routes/workspace.d.js.map +0 -1
- package/dist/schema.d.js +0 -1
- package/dist/schema.d.js.map +0 -1
- package/dist/service.d.js +0 -1
- package/dist/service.d.js.map +0 -1
- package/dist/targets/bridge-target.d.js +0 -1
- package/dist/targets/bridge-target.d.js.map +0 -1
- package/dist/workspace/browser-capture.d.js +0 -1
- package/dist/workspace/browser-capture.d.js.map +0 -1
- package/dist/workspace/browser-workspace-desktop.d.js +0 -1
- package/dist/workspace/browser-workspace-desktop.d.js.map +0 -1
- package/dist/workspace/browser-workspace-elements.d.js +0 -1
- package/dist/workspace/browser-workspace-elements.d.js.map +0 -1
- package/dist/workspace/browser-workspace-forms.d.js +0 -1
- package/dist/workspace/browser-workspace-forms.d.js.map +0 -1
- package/dist/workspace/browser-workspace-helpers.d.js +0 -1
- package/dist/workspace/browser-workspace-helpers.d.js.map +0 -1
- package/dist/workspace/browser-workspace-jsdom.d.js +0 -1
- package/dist/workspace/browser-workspace-jsdom.d.js.map +0 -1
- package/dist/workspace/browser-workspace-network.d.js +0 -1
- package/dist/workspace/browser-workspace-network.d.js.map +0 -1
- package/dist/workspace/browser-workspace-snapshots.d.js +0 -1
- package/dist/workspace/browser-workspace-snapshots.d.js.map +0 -1
- package/dist/workspace/browser-workspace-state.d.js +0 -1
- package/dist/workspace/browser-workspace-state.d.js.map +0 -1
- package/dist/workspace/browser-workspace-types.d.js +0 -1
- package/dist/workspace/browser-workspace-types.d.js.map +0 -1
- package/dist/workspace/browser-workspace-web.d.js +0 -1
- package/dist/workspace/browser-workspace-web.d.js.map +0 -1
- package/dist/workspace/browser-workspace.d.js +0 -11
- package/dist/workspace/browser-workspace.d.js.map +0 -1
- package/dist/workspace/index.d.js +0 -3
- package/dist/workspace/index.d.js.map +0 -1
|
@@ -29,7 +29,9 @@ import {
|
|
|
29
29
|
} from "./browser-workspace-forms.js";
|
|
30
30
|
import {
|
|
31
31
|
assertBrowserWorkspaceConnectorSecretsNotExported,
|
|
32
|
+
assertBrowserWorkspaceJsdomScriptNotRequested,
|
|
32
33
|
createBrowserWorkspaceCommandTargetError,
|
|
34
|
+
createBrowserWorkspaceJsdomScriptExecutionError,
|
|
33
35
|
createBrowserWorkspaceNotFoundError,
|
|
34
36
|
DEFAULT_TIMEOUT_MS,
|
|
35
37
|
DEFAULT_WAIT_INTERVAL_MS,
|
|
@@ -65,6 +67,13 @@ import {
|
|
|
65
67
|
webWorkspaceState,
|
|
66
68
|
withWebStateLock
|
|
67
69
|
} from "./browser-workspace-state.js";
|
|
70
|
+
function safeWebStorageArea(getArea) {
|
|
71
|
+
try {
|
|
72
|
+
return getArea();
|
|
73
|
+
} catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
68
77
|
function getWebBrowserWorkspaceTabIndex(tabId) {
|
|
69
78
|
return webWorkspaceState.tabs.findIndex((tab) => tab.id === tabId);
|
|
70
79
|
}
|
|
@@ -142,75 +151,7 @@ async function executeWebBrowserWorkspaceUtilityCommand(command) {
|
|
|
142
151
|
if (!command.script?.trim()) {
|
|
143
152
|
throw new Error("Eliza browser workspace eval requires script.");
|
|
144
153
|
}
|
|
145
|
-
|
|
146
|
-
let value;
|
|
147
|
-
try {
|
|
148
|
-
value = new Function(
|
|
149
|
-
"document",
|
|
150
|
-
"fetch",
|
|
151
|
-
"alert",
|
|
152
|
-
"confirm",
|
|
153
|
-
"prompt",
|
|
154
|
-
"window",
|
|
155
|
-
"location",
|
|
156
|
-
"navigator",
|
|
157
|
-
"localStorage",
|
|
158
|
-
"sessionStorage",
|
|
159
|
-
"console",
|
|
160
|
-
`return (${command.script});`
|
|
161
|
-
)(
|
|
162
|
-
document,
|
|
163
|
-
dom.window.fetch.bind(dom.window),
|
|
164
|
-
dom.window.alert.bind(dom.window),
|
|
165
|
-
dom.window.confirm.bind(dom.window),
|
|
166
|
-
dom.window.prompt.bind(dom.window),
|
|
167
|
-
dom.window,
|
|
168
|
-
dom.window.location,
|
|
169
|
-
dom.window.navigator,
|
|
170
|
-
dom.window.localStorage,
|
|
171
|
-
dom.window.sessionStorage,
|
|
172
|
-
dom.window.console
|
|
173
|
-
);
|
|
174
|
-
} catch {
|
|
175
|
-
value = new Function(
|
|
176
|
-
"document",
|
|
177
|
-
"fetch",
|
|
178
|
-
"alert",
|
|
179
|
-
"confirm",
|
|
180
|
-
"prompt",
|
|
181
|
-
"window",
|
|
182
|
-
"location",
|
|
183
|
-
"navigator",
|
|
184
|
-
"localStorage",
|
|
185
|
-
"sessionStorage",
|
|
186
|
-
"console",
|
|
187
|
-
command.script
|
|
188
|
-
)(
|
|
189
|
-
document,
|
|
190
|
-
dom.window.fetch.bind(dom.window),
|
|
191
|
-
dom.window.alert.bind(dom.window),
|
|
192
|
-
dom.window.confirm.bind(dom.window),
|
|
193
|
-
dom.window.prompt.bind(dom.window),
|
|
194
|
-
dom.window,
|
|
195
|
-
dom.window.location,
|
|
196
|
-
dom.window.navigator,
|
|
197
|
-
dom.window.localStorage,
|
|
198
|
-
dom.window.sessionStorage,
|
|
199
|
-
dom.window.console
|
|
200
|
-
);
|
|
201
|
-
}
|
|
202
|
-
if (value && typeof value === "object" && typeof value.then === "function") {
|
|
203
|
-
value = await value;
|
|
204
|
-
}
|
|
205
|
-
return { mode: "web", subaction: command.subaction, value };
|
|
206
|
-
} catch (error) {
|
|
207
|
-
runtime.errors.push({
|
|
208
|
-
message: error instanceof Error ? error.message : String(error),
|
|
209
|
-
stack: error instanceof Error ? error.stack ?? null : null,
|
|
210
|
-
timestamp: getBrowserWorkspaceTimestamp()
|
|
211
|
-
});
|
|
212
|
-
throw error;
|
|
213
|
-
}
|
|
154
|
+
throw createBrowserWorkspaceJsdomScriptExecutionError("eval");
|
|
214
155
|
}
|
|
215
156
|
case "screenshot": {
|
|
216
157
|
const data = createBrowserWorkspaceSyntheticScreenshotData(
|
|
@@ -443,7 +384,14 @@ async function executeWebBrowserWorkspaceUtilityCommand(command) {
|
|
|
443
384
|
tab.partition,
|
|
444
385
|
"storage"
|
|
445
386
|
);
|
|
446
|
-
const area =
|
|
387
|
+
const area = safeWebStorageArea(
|
|
388
|
+
() => command.storageArea === "session" ? dom.window.sessionStorage : dom.window.localStorage
|
|
389
|
+
);
|
|
390
|
+
if (!area) {
|
|
391
|
+
throw new Error(
|
|
392
|
+
"Eliza browser workspace storage is unavailable for this page's origin (e.g. about:blank). Navigate to a real page first."
|
|
393
|
+
);
|
|
394
|
+
}
|
|
447
395
|
const action = command.storageAction ?? "get";
|
|
448
396
|
if (action === "clear") {
|
|
449
397
|
area.clear();
|
|
@@ -832,13 +780,13 @@ async function executeWebBrowserWorkspaceUtilityCommand(command) {
|
|
|
832
780
|
value: { loaded: true }
|
|
833
781
|
};
|
|
834
782
|
}
|
|
783
|
+
const localArea = safeWebStorageArea(() => dom.window.localStorage);
|
|
784
|
+
const sessionArea = safeWebStorageArea(() => dom.window.sessionStorage);
|
|
835
785
|
const payload = {
|
|
836
786
|
clipboard: browserWorkspaceClipboardText,
|
|
837
787
|
cookies: readBrowserWorkspaceCookies(document),
|
|
838
|
-
localStorage: readBrowserWorkspaceStorage(
|
|
839
|
-
sessionStorage: readBrowserWorkspaceStorage(
|
|
840
|
-
dom.window.sessionStorage
|
|
841
|
-
),
|
|
788
|
+
localStorage: localArea ? readBrowserWorkspaceStorage(localArea) : {},
|
|
789
|
+
sessionStorage: sessionArea ? readBrowserWorkspaceStorage(sessionArea) : {},
|
|
842
790
|
settings: runtime.settings,
|
|
843
791
|
url: tab.url
|
|
844
792
|
};
|
|
@@ -1334,6 +1282,7 @@ async function executeWebBrowserWorkspaceDomCommand(command) {
|
|
|
1334
1282
|
};
|
|
1335
1283
|
}
|
|
1336
1284
|
case "wait": {
|
|
1285
|
+
assertBrowserWorkspaceJsdomScriptNotRequested(command.script, "wait");
|
|
1337
1286
|
if (!command.selector && !command.findBy && !command.text && !command.url && !command.script && typeof command.timeoutMs === "number" && Number.isFinite(command.timeoutMs)) {
|
|
1338
1287
|
const waitedMs = Math.max(0, command.timeoutMs);
|
|
1339
1288
|
await sleep(waitedMs);
|
|
@@ -1356,31 +1305,23 @@ async function executeWebBrowserWorkspaceDomCommand(command) {
|
|
|
1356
1305
|
void 0,
|
|
1357
1306
|
command
|
|
1358
1307
|
);
|
|
1359
|
-
if (command.state === "
|
|
1360
|
-
return found
|
|
1308
|
+
if (command.state === "hidden") {
|
|
1309
|
+
return !found || !isBrowserWorkspaceElementVisible(found);
|
|
1361
1310
|
}
|
|
1362
|
-
return
|
|
1311
|
+
return found ? isBrowserWorkspaceElementVisible(found) : false;
|
|
1312
|
+
})() : false;
|
|
1313
|
+
const matchesFind = command.findBy ? (() => {
|
|
1314
|
+
const found = resolveBrowserWorkspaceFindElement(
|
|
1315
|
+
currentDocument,
|
|
1316
|
+
command
|
|
1317
|
+
);
|
|
1318
|
+
return command.state === "hidden" ? !found : Boolean(found);
|
|
1363
1319
|
})() : false;
|
|
1364
|
-
const matchesFind = command.findBy ? Boolean(
|
|
1365
|
-
resolveBrowserWorkspaceFindElement(currentDocument, command)
|
|
1366
|
-
) : false;
|
|
1367
1320
|
const matchesText = command.text?.trim() ? normalizeBrowserWorkspaceText(
|
|
1368
1321
|
currentDocument.body?.textContent
|
|
1369
1322
|
).includes(command.text.trim()) : false;
|
|
1370
1323
|
const matchesUrl = command.url?.trim() ? tab.url.includes(command.url.trim()) : false;
|
|
1371
|
-
|
|
1372
|
-
new Function(
|
|
1373
|
-
"document",
|
|
1374
|
-
"window",
|
|
1375
|
-
"location",
|
|
1376
|
-
`return (${command.script});`
|
|
1377
|
-
)(
|
|
1378
|
-
currentDocument,
|
|
1379
|
-
currentDom.window,
|
|
1380
|
-
currentDom.window.location
|
|
1381
|
-
)
|
|
1382
|
-
) : false;
|
|
1383
|
-
if (matchesSelector || matchesFind || matchesText || matchesUrl || matchesScript || !command.selector && !command.findBy && !command.text && !command.url && !command.script) {
|
|
1324
|
+
if (matchesSelector || matchesFind || matchesText || matchesUrl || !command.selector && !command.findBy && !command.text && !command.url) {
|
|
1384
1325
|
return {
|
|
1385
1326
|
mode: "web",
|
|
1386
1327
|
subaction: command.subaction,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workspace/browser-workspace-web.ts"],"sourcesContent":["import * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport {\n browserWorkspaceTextMatches,\n buildBrowserWorkspaceElementSelector,\n collectBrowserWorkspaceInspectElements,\n createBrowserWorkspaceElementSummary,\n findClosestBrowserWorkspaceForm,\n getBrowserWorkspaceElementBox,\n getBrowserWorkspaceElementStyles,\n getBrowserWorkspaceElementValue,\n isBrowserWorkspaceElementVisible,\n mergeBrowserWorkspaceSelectorCommand,\n queryAllBrowserWorkspaceSelector,\n resolveBrowserWorkspaceElement,\n resolveBrowserWorkspaceFindElement,\n resolveWebBrowserWorkspaceCommandDocument,\n} from \"./browser-workspace-elements.js\";\nimport {\n activateWebBrowserWorkspaceElement,\n clearWebBrowserWorkspaceTabElementRefs,\n cloneWebBrowserWorkspaceTabState,\n ensureBrowserWorkspaceCheckboxElement,\n ensureBrowserWorkspaceFormControlElement,\n ensureLoadedWebBrowserWorkspaceTabDocument,\n scrollWebBrowserWorkspaceTarget,\n setBrowserWorkspaceControlValue,\n submitWebBrowserWorkspaceForm,\n} from \"./browser-workspace-forms.js\";\nimport {\n assertBrowserWorkspaceConnectorSecretsNotExported,\n createBrowserWorkspaceCommandTargetError,\n createBrowserWorkspaceNotFoundError,\n DEFAULT_TIMEOUT_MS,\n DEFAULT_WAIT_INTERVAL_MS,\n normalizeBrowserWorkspaceText,\n resolveBrowserWorkspaceCommandElementRefs,\n sleep,\n writeBrowserWorkspaceFile,\n} from \"./browser-workspace-helpers.js\";\nimport {\n applyBrowserWorkspaceDomSettings,\n ensureBrowserWorkspaceDom,\n} from \"./browser-workspace-jsdom.js\";\nimport {\n fetchBrowserWorkspaceTrackedResponse,\n normalizeBrowserWorkspaceHeaders,\n} from \"./browser-workspace-network.js\";\nimport {\n applyBrowserWorkspaceStateToWebDocument,\n buildBrowserWorkspaceDocumentSnapshotText,\n createBrowserWorkspacePdfBuffer,\n createBrowserWorkspaceSnapshotRecord,\n createBrowserWorkspaceSyntheticScreenshotData,\n diffBrowserWorkspaceSnapshots,\n readBrowserWorkspaceCookies,\n readBrowserWorkspaceStorage,\n} from \"./browser-workspace-snapshots.js\";\nimport {\n browserWorkspaceClipboardText,\n getBrowserWorkspaceRuntimeState,\n getBrowserWorkspaceTimestamp,\n registerBrowserWorkspaceElementRefs,\n setBrowserWorkspaceClipboardText,\n webWorkspaceState,\n withWebStateLock,\n} from \"./browser-workspace-state.js\";\nimport type {\n BrowserWorkspaceCommand,\n BrowserWorkspaceCommandResult,\n BrowserWorkspaceSettingsState,\n WebBrowserWorkspaceTabState,\n} from \"./browser-workspace-types.js\";\n\nexport function getWebBrowserWorkspaceTabIndex(tabId: string): number {\n return webWorkspaceState.tabs.findIndex((tab) => tab.id === tabId);\n}\n\nexport function getWebBrowserWorkspaceTabState(\n tabId: string,\n): WebBrowserWorkspaceTabState {\n const tab = webWorkspaceState.tabs.find((entry) => entry.id === tabId);\n if (!tab) {\n throw createBrowserWorkspaceNotFoundError(tabId);\n }\n return tab;\n}\n\nexport function getCurrentWebBrowserWorkspaceTabState(): WebBrowserWorkspaceTabState | null {\n if (webWorkspaceState.tabs.length === 0) {\n return null;\n }\n\n return (\n webWorkspaceState.tabs.find((tab) => tab.visible) ??\n [...webWorkspaceState.tabs].sort((left, right) => {\n const leftTime = left.lastFocusedAt ?? left.updatedAt ?? \"\";\n const rightTime = right.lastFocusedAt ?? right.updatedAt ?? \"\";\n return (\n rightTime.localeCompare(leftTime) || left.id.localeCompare(right.id)\n );\n })[0] ??\n null\n );\n}\n\nexport function findWebBrowserWorkspaceTargetTabId(\n command: BrowserWorkspaceCommand,\n): string {\n if (command.id?.trim()) {\n return command.id.trim();\n }\n const current = getCurrentWebBrowserWorkspaceTabState();\n if (!current) {\n throw createBrowserWorkspaceCommandTargetError(command.subaction);\n }\n return current.id;\n}\n\nexport async function executeWebBrowserWorkspaceUtilityCommand(\n command: BrowserWorkspaceCommand,\n): Promise<BrowserWorkspaceCommandResult | null> {\n return withWebStateLock(async () => {\n if (\n ![\n \"clipboard\",\n \"console\",\n \"cookies\",\n \"diff\",\n \"dialog\",\n \"drag\",\n \"errors\",\n \"eval\",\n \"frame\",\n \"highlight\",\n \"mouse\",\n \"network\",\n \"pdf\",\n \"screenshot\",\n \"set\",\n \"state\",\n \"storage\",\n \"trace\",\n \"profiler\",\n \"upload\",\n ].includes(command.subaction)\n ) {\n return null;\n }\n\n const id = findWebBrowserWorkspaceTargetTabId(command);\n const tab = getWebBrowserWorkspaceTabState(id);\n const dom = await ensureLoadedWebBrowserWorkspaceTabDocument(tab);\n const runtime = getBrowserWorkspaceRuntimeState(\"web\", id);\n const frameContext = resolveWebBrowserWorkspaceCommandDocument(\n tab,\n dom,\n runtime,\n );\n const document = frameContext.document;\n const resolveTarget = () =>\n resolveBrowserWorkspaceElement(\n document,\n command.selector,\n command.text,\n command,\n );\n\n switch (command.subaction) {\n case \"eval\": {\n if (!command.script?.trim()) {\n throw new Error(\"Eliza browser workspace eval requires script.\");\n }\n try {\n let value: unknown;\n try {\n value = new Function(\n \"document\",\n \"fetch\",\n \"alert\",\n \"confirm\",\n \"prompt\",\n \"window\",\n \"location\",\n \"navigator\",\n \"localStorage\",\n \"sessionStorage\",\n \"console\",\n `return (${command.script});`,\n )(\n document,\n dom.window.fetch.bind(dom.window),\n dom.window.alert.bind(dom.window),\n dom.window.confirm.bind(dom.window),\n dom.window.prompt.bind(dom.window),\n dom.window,\n dom.window.location,\n dom.window.navigator,\n dom.window.localStorage,\n dom.window.sessionStorage,\n dom.window.console,\n );\n } catch {\n value = new Function(\n \"document\",\n \"fetch\",\n \"alert\",\n \"confirm\",\n \"prompt\",\n \"window\",\n \"location\",\n \"navigator\",\n \"localStorage\",\n \"sessionStorage\",\n \"console\",\n command.script,\n )(\n document,\n dom.window.fetch.bind(dom.window),\n dom.window.alert.bind(dom.window),\n dom.window.confirm.bind(dom.window),\n dom.window.prompt.bind(dom.window),\n dom.window,\n dom.window.location,\n dom.window.navigator,\n dom.window.localStorage,\n dom.window.sessionStorage,\n dom.window.console,\n );\n }\n if (\n value &&\n typeof value === \"object\" &&\n typeof (value as Promise<unknown>).then === \"function\"\n ) {\n value = await (value as Promise<unknown>);\n }\n return { mode: \"web\", subaction: command.subaction, value };\n } catch (error) {\n runtime.errors.push({\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? (error.stack ?? null) : null,\n timestamp: getBrowserWorkspaceTimestamp(),\n });\n throw error;\n }\n }\n case \"screenshot\": {\n const data = createBrowserWorkspaceSyntheticScreenshotData(\n tab.title,\n tab.url,\n buildBrowserWorkspaceDocumentSnapshotText(document),\n runtime.settings.viewport ?? undefined,\n );\n runtime.lastScreenshotData = data;\n if (command.filePath?.trim() || command.outputPath?.trim()) {\n const targetPath =\n command.filePath?.trim() || command.outputPath?.trim() || \"\";\n await writeBrowserWorkspaceFile(\n targetPath,\n Buffer.from(data, \"base64\"),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n snapshot: { data },\n value: { path: path.resolve(targetPath) },\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n snapshot: { data },\n };\n }\n case \"clipboard\": {\n const action = command.clipboardAction ?? \"read\";\n if (action === \"read\") {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: browserWorkspaceClipboardText,\n };\n }\n if (action === \"write\") {\n setBrowserWorkspaceClipboardText(command.value ?? command.text ?? \"\");\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: browserWorkspaceClipboardText,\n };\n }\n if (action === \"copy\") {\n const target = resolveTarget();\n setBrowserWorkspaceClipboardText(\n target && \"value\" in (target as HTMLInputElement)\n ? String((target as HTMLInputElement).value ?? \"\")\n : normalizeBrowserWorkspaceText(\n target?.textContent ?? document.body?.textContent,\n ),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: browserWorkspaceClipboardText,\n };\n }\n const target = resolveTarget() ?? document.activeElement;\n if (\n target &&\n (target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.tagName === \"SELECT\")\n ) {\n const control = ensureBrowserWorkspaceFormControlElement(\n target,\n \"clipboard\",\n );\n setBrowserWorkspaceControlValue(\n control,\n `${control.value ?? \"\"}${browserWorkspaceClipboardText}`,\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(control),\n value: control.value,\n },\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: browserWorkspaceClipboardText,\n };\n }\n case \"mouse\": {\n const action = command.mouseAction ?? \"move\";\n if (action === \"move\") {\n runtime.mouse.x = command.x ?? runtime.mouse.x;\n runtime.mouse.y = command.y ?? runtime.mouse.y;\n } else if (action === \"down\") {\n const button = command.button ?? \"left\";\n runtime.mouse.buttons = Array.from(\n new Set([...runtime.mouse.buttons, button]),\n );\n } else if (action === \"up\") {\n const button = command.button ?? \"left\";\n runtime.mouse.buttons = runtime.mouse.buttons.filter(\n (entry) => entry !== button,\n );\n } else {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: scrollWebBrowserWorkspaceTarget(\n dom,\n resolveTarget(),\n (command.deltaY ?? 0) < 0 ? \"up\" : \"down\",\n Math.abs(command.deltaY ?? command.pixels ?? 240),\n ),\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.mouse,\n };\n }\n case \"drag\": {\n const source = resolveTarget();\n const target = command.value\n ? resolveBrowserWorkspaceElement(document, command.value)\n : null;\n if (!source || !target) {\n throw new Error(\n \"Eliza browser workspace drag requires source selector and target selector in value.\",\n );\n }\n source.setAttribute(\"data-eliza-dragging\", \"true\");\n target.setAttribute(\"data-eliza-drop-target\", \"true\");\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n source: buildBrowserWorkspaceElementSelector(source),\n target: buildBrowserWorkspaceElementSelector(target),\n },\n };\n }\n case \"upload\": {\n const target = resolveTarget();\n if (!target || target.tagName !== \"INPUT\") {\n throw new Error(\n \"Eliza browser workspace upload requires a file input target.\",\n );\n }\n const files = (command.files ?? []).map((entry) =>\n path.basename(entry),\n );\n target.setAttribute(\"data-eliza-uploaded-files\", files.join(\",\"));\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n files,\n selector: buildBrowserWorkspaceElementSelector(target),\n },\n };\n }\n case \"set\": {\n const action = command.setAction ?? \"viewport\";\n if (action === \"credentials\" || action === \"headers\") {\n assertBrowserWorkspaceConnectorSecretsNotExported(\n tab.partition,\n `set:${action}`,\n );\n }\n if (action === \"viewport\") {\n runtime.settings.viewport = {\n height: Math.max(1, Math.round(command.height ?? 720)),\n scale: Math.max(1, Number(command.scale ?? 1)),\n width: Math.max(1, Math.round(command.width ?? 1280)),\n };\n } else if (action === \"device\") {\n runtime.settings.device = command.device ?? null;\n } else if (action === \"geo\") {\n runtime.settings.geo =\n typeof command.latitude === \"number\" &&\n typeof command.longitude === \"number\"\n ? { latitude: command.latitude, longitude: command.longitude }\n : null;\n } else if (action === \"offline\") {\n runtime.settings.offline = Boolean(command.offline);\n } else if (action === \"headers\") {\n runtime.settings.headers = normalizeBrowserWorkspaceHeaders(\n command.headers,\n );\n } else if (action === \"credentials\") {\n runtime.settings.credentials =\n command.username || command.password\n ? {\n password: command.password ?? \"\",\n username: command.username ?? \"\",\n }\n : null;\n } else if (action === \"media\") {\n runtime.settings.media = command.media ?? null;\n }\n applyBrowserWorkspaceDomSettings(dom, runtime);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.settings,\n };\n }\n case \"cookies\": {\n assertBrowserWorkspaceConnectorSecretsNotExported(\n tab.partition,\n \"cookies\",\n );\n const action = command.cookieAction ?? \"get\";\n if (action === \"clear\") {\n for (const key of Object.keys(\n readBrowserWorkspaceCookies(document),\n )) {\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { cleared: true },\n };\n }\n if (action === \"set\") {\n const cookieName = command.name?.trim() || command.entryKey?.trim();\n if (!cookieName) {\n throw new Error(\n \"Eliza browser workspace cookies set requires name.\",\n );\n }\n document.cookie = `${cookieName}=${command.value ?? \"\"}; path=/`;\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: readBrowserWorkspaceCookies(document),\n };\n }\n case \"storage\": {\n assertBrowserWorkspaceConnectorSecretsNotExported(\n tab.partition,\n \"storage\",\n );\n const area =\n command.storageArea === \"session\"\n ? dom.window.sessionStorage\n : dom.window.localStorage;\n const action = command.storageAction ?? \"get\";\n if (action === \"clear\") {\n area.clear();\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { cleared: true },\n };\n }\n if (action === \"set\") {\n const key = command.entryKey?.trim() || command.name?.trim();\n if (!key) {\n throw new Error(\n \"Eliza browser workspace storage set requires entryKey.\",\n );\n }\n area.setItem(key, command.value ?? \"\");\n }\n if (command.entryKey?.trim() || command.name?.trim()) {\n const key = command.entryKey?.trim() || command.name?.trim() || \"\";\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: area.getItem(key),\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: readBrowserWorkspaceStorage(area),\n };\n }\n case \"network\": {\n const action = command.networkAction ?? \"requests\";\n if (action === \"route\") {\n const pattern = command.url?.trim();\n if (!pattern) {\n throw new Error(\n \"Eliza browser workspace network route requires url pattern.\",\n );\n }\n runtime.networkRoutes.push({\n abort: Boolean(command.offline),\n body: command.responseBody ?? null,\n headers: normalizeBrowserWorkspaceHeaders(command.responseHeaders),\n pattern,\n status:\n typeof command.responseStatus === \"number\"\n ? command.responseStatus\n : null,\n });\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.networkRoutes,\n };\n }\n if (action === \"unroute\") {\n runtime.networkRoutes = command.url?.trim()\n ? runtime.networkRoutes.filter(\n (route) => route.pattern !== command.url?.trim(),\n )\n : [];\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.networkRoutes,\n };\n }\n if (action === \"request\") {\n const request = runtime.networkRequests.find(\n (entry) => entry.id === command.requestId,\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: request ?? null,\n };\n }\n if (action === \"harstart\") {\n runtime.networkHar = {\n active: true,\n entries: [],\n startedAt: getBrowserWorkspaceTimestamp(),\n };\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.networkHar,\n };\n }\n if (action === \"harstop\") {\n runtime.networkHar.active = false;\n const har = {\n log: {\n entries: runtime.networkHar.entries,\n startedAt: runtime.networkHar.startedAt,\n },\n };\n if (command.filePath?.trim() || command.outputPath?.trim()) {\n const targetPath =\n command.filePath?.trim() || command.outputPath?.trim() || \"\";\n await writeBrowserWorkspaceFile(\n targetPath,\n JSON.stringify(har, null, 2),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { path: path.resolve(targetPath), ...har },\n };\n }\n return { mode: \"web\", subaction: command.subaction, value: har };\n }\n let requests = [...runtime.networkRequests];\n if (command.filter?.trim()) {\n requests = requests.filter((entry) =>\n entry.url.includes(command.filter ?? \"\"),\n );\n }\n if (command.method?.trim()) {\n requests = requests.filter(\n (entry) =>\n entry.method.toUpperCase() ===\n command.method?.trim().toUpperCase(),\n );\n }\n if (command.status?.trim()) {\n const statusFilter = command.status.trim();\n requests = requests.filter((entry) => {\n if (entry.status === null) {\n return false;\n }\n if (/^\\dxx$/i.test(statusFilter)) {\n return String(entry.status).startsWith(statusFilter[0] ?? \"\");\n }\n return String(entry.status) === statusFilter;\n });\n }\n return { mode: \"web\", subaction: command.subaction, value: requests };\n }\n case \"dialog\": {\n const action = command.dialogAction ?? \"status\";\n if (action === \"status\") {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.dialog,\n };\n }\n if (runtime.dialog) {\n runtime.dialog.open = false;\n }\n const result =\n action === \"accept\"\n ? {\n accepted: true,\n dialog: runtime.dialog,\n promptText: command.promptText ?? command.value ?? null,\n }\n : { accepted: false, dialog: runtime.dialog };\n runtime.dialog = null;\n return { mode: \"web\", subaction: command.subaction, value: result };\n }\n case \"console\": {\n if (command.consoleAction === \"clear\") {\n runtime.consoleEntries = [];\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.consoleEntries,\n };\n }\n case \"errors\": {\n if (command.consoleAction === \"clear\") {\n runtime.errors = [];\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.errors,\n };\n }\n case \"highlight\": {\n const target = resolveTarget();\n if (!target) {\n throw new Error(\"Target element was not found.\");\n }\n target.setAttribute(\"data-eliza-highlight\", \"true\");\n runtime.highlightedSelector =\n buildBrowserWorkspaceElementSelector(target);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { selector: runtime.highlightedSelector },\n };\n }\n case \"frame\": {\n const action = command.frameAction ?? \"select\";\n if (action === \"main\") {\n runtime.currentFrame = null;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { frame: null },\n };\n }\n const frame = resolveBrowserWorkspaceElement(\n dom.window.document,\n command.selector,\n );\n if (!frame || frame.tagName !== \"IFRAME\") {\n throw new Error(\n \"Eliza browser workspace frame select requires an iframe selector.\",\n );\n }\n runtime.currentFrame = buildBrowserWorkspaceElementSelector(frame);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { frame: runtime.currentFrame },\n };\n }\n case \"diff\": {\n const snapshot = createBrowserWorkspaceSnapshotRecord(\n tab.title,\n tab.url,\n buildBrowserWorkspaceDocumentSnapshotText(document),\n );\n if (command.diffAction === \"url\") {\n const leftUrl = command.url?.trim() || tab.url;\n const rightUrl = command.secondaryUrl?.trim();\n if (!rightUrl) {\n throw new Error(\n \"Eliza browser workspace diff url requires secondaryUrl.\",\n );\n }\n const left = await fetchBrowserWorkspaceTrackedResponse(\n runtime,\n leftUrl,\n {},\n \"document\",\n );\n const right = await fetchBrowserWorkspaceTrackedResponse(\n runtime,\n rightUrl,\n {},\n \"document\",\n );\n const leftSnapshot = createBrowserWorkspaceSnapshotRecord(\n leftUrl,\n left.url || leftUrl,\n await left.text(),\n );\n const rightSnapshot = createBrowserWorkspaceSnapshotRecord(\n rightUrl,\n right.url || rightUrl,\n await right.text(),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: diffBrowserWorkspaceSnapshots(leftSnapshot, rightSnapshot),\n };\n }\n if (command.diffAction === \"screenshot\") {\n const currentData =\n runtime.lastScreenshotData ??\n createBrowserWorkspaceSyntheticScreenshotData(\n tab.title,\n tab.url,\n buildBrowserWorkspaceDocumentSnapshotText(document),\n runtime.settings.viewport ?? undefined,\n );\n const baseline = command.baselinePath?.trim()\n ? await fsp.readFile(\n path.resolve(command.baselinePath.trim()),\n \"base64\",\n )\n : runtime.lastScreenshotData;\n runtime.lastScreenshotData = currentData;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n baselineLength: baseline?.length ?? 0,\n changed: baseline !== currentData,\n currentLength: currentData.length,\n },\n };\n }\n const baseline = command.baselinePath?.trim()\n ? (JSON.parse(\n await fsp.readFile(\n path.resolve(command.baselinePath.trim()),\n \"utf8\",\n ),\n ) as import(\"./browser-workspace-types.js\").BrowserWorkspaceSnapshotRecord)\n : runtime.lastSnapshot;\n const diff = diffBrowserWorkspaceSnapshots(baseline, snapshot);\n runtime.lastSnapshot = snapshot;\n return { mode: \"web\", subaction: command.subaction, value: diff };\n }\n case \"trace\": {\n if (command.traceAction === \"stop\") {\n runtime.trace.active = false;\n const traceValue = { entries: runtime.trace.entries };\n if (command.filePath?.trim() || command.outputPath?.trim()) {\n const targetPath =\n command.filePath?.trim() || command.outputPath?.trim() || \"\";\n await writeBrowserWorkspaceFile(\n targetPath,\n JSON.stringify(traceValue, null, 2),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { path: path.resolve(targetPath), ...traceValue },\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: traceValue,\n };\n }\n runtime.trace = { active: true, entries: [] };\n runtime.trace.entries.push({\n command: \"trace:start\",\n timestamp: getBrowserWorkspaceTimestamp(),\n });\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { active: true },\n };\n }\n case \"profiler\": {\n if (command.profilerAction === \"stop\") {\n runtime.profiler.active = false;\n const profileValue = { entries: runtime.profiler.entries };\n if (command.filePath?.trim() || command.outputPath?.trim()) {\n const targetPath =\n command.filePath?.trim() || command.outputPath?.trim() || \"\";\n await writeBrowserWorkspaceFile(\n targetPath,\n JSON.stringify(profileValue, null, 2),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { path: path.resolve(targetPath), ...profileValue },\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: profileValue,\n };\n }\n runtime.profiler = {\n active: true,\n entries: [\n {\n command: \"profiler:start\",\n timestamp: getBrowserWorkspaceTimestamp(),\n },\n ],\n };\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { active: true },\n };\n }\n case \"state\": {\n assertBrowserWorkspaceConnectorSecretsNotExported(\n tab.partition,\n \"state\",\n );\n if (command.stateAction === \"load\") {\n const filePath =\n command.filePath?.trim() || command.outputPath?.trim();\n if (!filePath) {\n throw new Error(\n \"Eliza browser workspace state load requires filePath.\",\n );\n }\n const payload = JSON.parse(\n await fsp.readFile(path.resolve(filePath), \"utf8\"),\n ) as Record<string, unknown>;\n applyBrowserWorkspaceStateToWebDocument(document, payload);\n if (payload.settings && typeof payload.settings === \"object\") {\n runtime.settings = {\n ...runtime.settings,\n ...(payload.settings as BrowserWorkspaceSettingsState),\n };\n applyBrowserWorkspaceDomSettings(dom, runtime);\n }\n setBrowserWorkspaceClipboardText(\n typeof payload.clipboard === \"string\"\n ? payload.clipboard\n : browserWorkspaceClipboardText,\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { loaded: true },\n };\n }\n const payload = {\n clipboard: browserWorkspaceClipboardText,\n cookies: readBrowserWorkspaceCookies(document),\n localStorage: readBrowserWorkspaceStorage(dom.window.localStorage),\n sessionStorage: readBrowserWorkspaceStorage(\n dom.window.sessionStorage,\n ),\n settings: runtime.settings,\n url: tab.url,\n };\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (filePath) {\n await writeBrowserWorkspaceFile(\n filePath,\n JSON.stringify(payload, null, 2),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { path: path.resolve(filePath), ...payload },\n };\n }\n return { mode: \"web\", subaction: command.subaction, value: payload };\n }\n case \"pdf\": {\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (!filePath) {\n throw new Error(\"Eliza browser workspace pdf requires filePath.\");\n }\n const pdf = createBrowserWorkspacePdfBuffer(\n tab.title,\n normalizeBrowserWorkspaceText(document.body?.textContent),\n );\n const resolved = await writeBrowserWorkspaceFile(filePath, pdf);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { path: resolved, size: pdf.byteLength },\n };\n }\n default:\n return null;\n }\n });\n}\n\nexport async function executeWebBrowserWorkspaceDomCommand(\n command: BrowserWorkspaceCommand,\n): Promise<BrowserWorkspaceCommandResult> {\n return withWebStateLock(async () => {\n const id = findWebBrowserWorkspaceTargetTabId(command);\n command = resolveBrowserWorkspaceCommandElementRefs(command, \"web\", id);\n const tab = getWebBrowserWorkspaceTabState(id);\n const dom = await ensureLoadedWebBrowserWorkspaceTabDocument(tab);\n const runtime = getBrowserWorkspaceRuntimeState(\"web\", id);\n const frameContext = resolveWebBrowserWorkspaceCommandDocument(\n tab,\n dom,\n runtime,\n );\n const document = frameContext.document;\n const resolveTarget = () =>\n resolveBrowserWorkspaceElement(\n document,\n command.selector,\n command.text,\n command,\n );\n\n switch (command.subaction) {\n case \"inspect\":\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n return {\n mode: \"web\",\n subaction: command.subaction,\n elements: registerBrowserWorkspaceElementRefs(\n \"web\",\n tab.id,\n collectBrowserWorkspaceInspectElements(document),\n ),\n value: {\n title: tab.title,\n url: tab.url,\n },\n };\n case \"snapshot\":\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n return {\n mode: \"web\",\n subaction: command.subaction,\n elements: registerBrowserWorkspaceElementRefs(\n \"web\",\n tab.id,\n collectBrowserWorkspaceInspectElements(document),\n ),\n value: {\n bodyText: buildBrowserWorkspaceDocumentSnapshotText(document).slice(\n 0,\n 800,\n ),\n title: tab.title,\n url: tab.url,\n },\n };\n case \"get\": {\n if (command.getMode === \"title\") {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: tab.title,\n };\n }\n if (command.getMode === \"url\") {\n return { mode: \"web\", subaction: command.subaction, value: tab.url };\n }\n if (command.getMode === \"count\") {\n if (!command.selector?.trim()) {\n throw new Error(\n \"Eliza browser workspace get count requires selector.\",\n );\n }\n const semanticCommand = mergeBrowserWorkspaceSelectorCommand(\n command,\n command.selector,\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: semanticCommand\n ? Number(\n Boolean(\n resolveBrowserWorkspaceFindElement(\n document,\n semanticCommand,\n ),\n ),\n )\n : queryAllBrowserWorkspaceSelector(document, command.selector)\n .length,\n };\n }\n\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n\n let value: unknown;\n switch (command.getMode) {\n case \"attr\":\n if (!command.attribute?.trim()) {\n throw new Error(\n \"Eliza browser workspace attr lookups require attribute.\",\n );\n }\n value = element.getAttribute(command.attribute);\n break;\n case \"box\":\n value = getBrowserWorkspaceElementBox(element);\n break;\n case \"checked\":\n value =\n element.tagName === \"INPUT\"\n ? Boolean((element as HTMLInputElement).checked)\n : element.tagName === \"OPTION\"\n ? Boolean((element as HTMLOptionElement).selected)\n : false;\n break;\n case \"enabled\":\n value =\n \"disabled\" in element\n ? !(\n element as\n | HTMLButtonElement\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement\n ).disabled\n : true;\n break;\n case \"html\":\n value = element.innerHTML;\n break;\n case \"styles\":\n value = getBrowserWorkspaceElementStyles(element, dom.window);\n break;\n case \"value\":\n value = getBrowserWorkspaceElementValue(element);\n break;\n case \"visible\":\n value = isBrowserWorkspaceElementVisible(element);\n break;\n default:\n value = normalizeBrowserWorkspaceText(element.textContent);\n break;\n }\n\n return { mode: \"web\", subaction: command.subaction, value };\n }\n case \"find\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n\n switch (command.action) {\n case \"check\": {\n const input = ensureBrowserWorkspaceCheckboxElement(\n element,\n \"check\",\n );\n input.checked = true;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n checked: input.checked,\n selector: buildBrowserWorkspaceElementSelector(input),\n },\n };\n }\n case \"click\":\n return {\n ...(await activateWebBrowserWorkspaceElement(\n tab,\n element,\n \"click\",\n )),\n subaction: command.subaction,\n };\n case \"fill\": {\n const control = ensureBrowserWorkspaceFormControlElement(\n element,\n \"fill\",\n );\n setBrowserWorkspaceControlValue(control, command.value ?? \"\");\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(control),\n value: control.value,\n },\n };\n }\n case \"focus\":\n if (typeof (element as HTMLElement).focus === \"function\") {\n (element as HTMLElement).focus();\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n focused: document.activeElement === element,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n case \"hover\":\n element.setAttribute(\"data-eliza-hover\", \"true\");\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n hovered: true,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n case \"type\": {\n const control = ensureBrowserWorkspaceFormControlElement(\n element,\n \"type\",\n );\n setBrowserWorkspaceControlValue(\n control,\n `${control.value ?? \"\"}${command.value ?? \"\"}`,\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(control),\n value: control.value,\n },\n };\n }\n case \"uncheck\": {\n const input = ensureBrowserWorkspaceCheckboxElement(\n element,\n \"uncheck\",\n );\n input.checked = false;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n checked: input.checked,\n selector: buildBrowserWorkspaceElementSelector(input),\n },\n };\n }\n case \"text\":\n case undefined:\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n element: createBrowserWorkspaceElementSummary(element),\n text: normalizeBrowserWorkspaceText(element.textContent),\n },\n };\n default:\n throw new Error(\n `Unsupported browser workspace find action: ${command.action}`,\n );\n }\n }\n case \"check\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n const input = ensureBrowserWorkspaceCheckboxElement(element, \"check\");\n input.checked = true;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n checked: input.checked,\n selector: buildBrowserWorkspaceElementSelector(input),\n },\n };\n }\n case \"fill\":\n case \"type\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n const control = ensureBrowserWorkspaceFormControlElement(\n element,\n command.subaction,\n );\n const nextValue =\n command.subaction === \"type\"\n ? `${control.value ?? \"\"}${command.value ?? \"\"}`\n : (command.value ?? \"\");\n setBrowserWorkspaceControlValue(control, nextValue);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(control),\n value: nextValue,\n },\n };\n }\n case \"focus\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n if (typeof (element as HTMLElement).focus === \"function\") {\n (element as HTMLElement).focus();\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n focused: document.activeElement === element,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n }\n case \"hover\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n element.setAttribute(\"data-eliza-hover\", \"true\");\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n hovered: true,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n }\n case \"keyboardinserttext\":\n case \"keyboardtype\": {\n const active = document.activeElement;\n if (\n !active ||\n !(\n active.tagName === \"INPUT\" ||\n active.tagName === \"TEXTAREA\" ||\n active.tagName === \"SELECT\"\n )\n ) {\n throw new Error(\n \"Eliza browser workspace keyboard text input requires a focused input target.\",\n );\n }\n const control = ensureBrowserWorkspaceFormControlElement(\n active,\n command.subaction === \"keyboardtype\" ? \"type\" : \"keyboardinserttext\",\n );\n const nextValue =\n command.subaction === \"keyboardtype\"\n ? `${control.value ?? \"\"}${command.value ?? \"\"}`\n : (command.value ?? \"\");\n setBrowserWorkspaceControlValue(control, nextValue);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(control),\n value: control.value,\n },\n };\n }\n case \"keydown\":\n case \"keyup\":\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n key: command.key?.trim() || \"Enter\",\n selector:\n document.activeElement &&\n document.activeElement instanceof Element\n ? buildBrowserWorkspaceElementSelector(document.activeElement)\n : null,\n },\n };\n case \"click\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n return activateWebBrowserWorkspaceElement(tab, element, \"click\");\n }\n case \"dblclick\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n return activateWebBrowserWorkspaceElement(tab, element, \"dblclick\");\n }\n case \"press\": {\n const key = command.key?.trim() || \"Enter\";\n const element = resolveTarget();\n const form = findClosestBrowserWorkspaceForm(element);\n\n if (key === \"Enter\" && form) {\n await submitWebBrowserWorkspaceForm(tab, form);\n return {\n mode: \"web\",\n subaction: command.subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: { key, url: tab.url },\n };\n }\n\n return { mode: \"web\", subaction: command.subaction, value: { key } };\n }\n case \"scroll\": {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: scrollWebBrowserWorkspaceTarget(\n dom,\n resolveTarget(),\n command.direction ?? \"down\",\n command.pixels ?? 240,\n ),\n };\n }\n case \"scrollinto\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n if (typeof (element as HTMLElement).focus === \"function\") {\n (element as HTMLElement).focus();\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n scrolled: true,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n }\n case \"select\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n if (element.tagName !== \"SELECT\") {\n throw new Error(\n \"Eliza browser workspace select requires a select target.\",\n );\n }\n const select = ensureBrowserWorkspaceFormControlElement(\n element,\n \"select\",\n );\n const option = Array.from((select as HTMLSelectElement).options).find(\n (entry) =>\n entry.value === (command.value ?? \"\") ||\n browserWorkspaceTextMatches(\n entry.textContent ?? \"\",\n command.value ?? \"\",\n true,\n ),\n );\n if (!option) {\n throw new Error(\"Select option was not found.\");\n }\n (select as HTMLSelectElement).value = option.value;\n option.selected = true;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(select),\n value: (select as HTMLSelectElement).value,\n },\n };\n }\n case \"uncheck\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n const input = ensureBrowserWorkspaceCheckboxElement(element, \"uncheck\");\n input.checked = false;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n checked: input.checked,\n selector: buildBrowserWorkspaceElementSelector(input),\n },\n };\n }\n case \"wait\": {\n if (\n !command.selector &&\n !command.findBy &&\n !command.text &&\n !command.url &&\n !command.script &&\n typeof command.timeoutMs === \"number\" &&\n Number.isFinite(command.timeoutMs)\n ) {\n const waitedMs = Math.max(0, command.timeoutMs);\n await sleep(waitedMs);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { waitedMs },\n };\n }\n const timeoutMs =\n typeof command.timeoutMs === \"number\" &&\n Number.isFinite(command.timeoutMs)\n ? Math.max(100, command.timeoutMs)\n : DEFAULT_TIMEOUT_MS;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() <= deadline) {\n await ensureLoadedWebBrowserWorkspaceTabDocument(tab);\n const currentDom = ensureBrowserWorkspaceDom(tab);\n const currentDocument = currentDom.window.document;\n\n const matchesSelector = command.selector?.trim()\n ? (() => {\n const found = resolveBrowserWorkspaceElement(\n currentDocument,\n command.selector,\n undefined,\n command,\n );\n if (command.state === \"visible\") {\n return found\n ? isBrowserWorkspaceElementVisible(found)\n : false;\n }\n return !found || !isBrowserWorkspaceElementVisible(found);\n })()\n : false;\n const matchesFind = command.findBy\n ? Boolean(\n resolveBrowserWorkspaceFindElement(currentDocument, command),\n )\n : false;\n const matchesText = command.text?.trim()\n ? normalizeBrowserWorkspaceText(\n currentDocument.body?.textContent,\n ).includes(command.text.trim())\n : false;\n const matchesUrl = command.url?.trim()\n ? tab.url.includes(command.url.trim())\n : false;\n const matchesScript = command.script?.trim()\n ? Boolean(\n new Function(\n \"document\",\n \"window\",\n \"location\",\n `return (${command.script});`,\n )(\n currentDocument,\n currentDom.window,\n currentDom.window.location,\n ),\n )\n : false;\n\n if (\n matchesSelector ||\n matchesFind ||\n matchesText ||\n matchesUrl ||\n matchesScript ||\n (!command.selector &&\n !command.findBy &&\n !command.text &&\n !command.url &&\n !command.script)\n ) {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n findBy: command.findBy ?? null,\n selector: command.selector ?? null,\n state: command.state ?? null,\n text: command.text ?? null,\n url: tab.url,\n },\n };\n }\n\n await sleep(DEFAULT_WAIT_INTERVAL_MS);\n }\n\n throw new Error(\"Timed out waiting for browser workspace condition.\");\n }\n default:\n throw new Error(\n `Unsupported web browser workspace subaction: ${command.subaction}`,\n );\n }\n });\n}\n"],"mappings":"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","names":["target","baseline","filePath","payload"]}
|
|
1
|
+
{"version":3,"sources":["../../src/workspace/browser-workspace-web.ts"],"sourcesContent":["import * as fsp from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport {\n browserWorkspaceTextMatches,\n buildBrowserWorkspaceElementSelector,\n collectBrowserWorkspaceInspectElements,\n createBrowserWorkspaceElementSummary,\n findClosestBrowserWorkspaceForm,\n getBrowserWorkspaceElementBox,\n getBrowserWorkspaceElementStyles,\n getBrowserWorkspaceElementValue,\n isBrowserWorkspaceElementVisible,\n mergeBrowserWorkspaceSelectorCommand,\n queryAllBrowserWorkspaceSelector,\n resolveBrowserWorkspaceElement,\n resolveBrowserWorkspaceFindElement,\n resolveWebBrowserWorkspaceCommandDocument,\n} from \"./browser-workspace-elements.js\";\nimport {\n activateWebBrowserWorkspaceElement,\n clearWebBrowserWorkspaceTabElementRefs,\n cloneWebBrowserWorkspaceTabState,\n ensureBrowserWorkspaceCheckboxElement,\n ensureBrowserWorkspaceFormControlElement,\n ensureLoadedWebBrowserWorkspaceTabDocument,\n scrollWebBrowserWorkspaceTarget,\n setBrowserWorkspaceControlValue,\n submitWebBrowserWorkspaceForm,\n} from \"./browser-workspace-forms.js\";\nimport {\n assertBrowserWorkspaceConnectorSecretsNotExported,\n assertBrowserWorkspaceJsdomScriptNotRequested,\n createBrowserWorkspaceCommandTargetError,\n createBrowserWorkspaceJsdomScriptExecutionError,\n createBrowserWorkspaceNotFoundError,\n DEFAULT_TIMEOUT_MS,\n DEFAULT_WAIT_INTERVAL_MS,\n normalizeBrowserWorkspaceText,\n resolveBrowserWorkspaceCommandElementRefs,\n sleep,\n writeBrowserWorkspaceFile,\n} from \"./browser-workspace-helpers.js\";\nimport {\n applyBrowserWorkspaceDomSettings,\n ensureBrowserWorkspaceDom,\n} from \"./browser-workspace-jsdom.js\";\nimport {\n fetchBrowserWorkspaceTrackedResponse,\n normalizeBrowserWorkspaceHeaders,\n} from \"./browser-workspace-network.js\";\nimport {\n applyBrowserWorkspaceStateToWebDocument,\n buildBrowserWorkspaceDocumentSnapshotText,\n createBrowserWorkspacePdfBuffer,\n createBrowserWorkspaceSnapshotRecord,\n createBrowserWorkspaceSyntheticScreenshotData,\n diffBrowserWorkspaceSnapshots,\n readBrowserWorkspaceCookies,\n readBrowserWorkspaceStorage,\n} from \"./browser-workspace-snapshots.js\";\nimport {\n browserWorkspaceClipboardText,\n getBrowserWorkspaceRuntimeState,\n getBrowserWorkspaceTimestamp,\n registerBrowserWorkspaceElementRefs,\n setBrowserWorkspaceClipboardText,\n webWorkspaceState,\n withWebStateLock,\n} from \"./browser-workspace-state.js\";\nimport type {\n BrowserWorkspaceCommand,\n BrowserWorkspaceCommandResult,\n BrowserWorkspaceSettingsState,\n WebBrowserWorkspaceTabState,\n} from \"./browser-workspace-types.js\";\n\n/**\n * Safely resolve a JSDOM `Storage` area. The `localStorage` / `sessionStorage`\n * getters themselves throw `SecurityError: localStorage is not available for\n * opaque origins` on `about:blank` (and other opaque-origin documents), so any\n * access must be guarded. Callers that can degrade gracefully use the `null`\n * return; callers that require storage turn `null` into a clear error.\n */\nfunction safeWebStorageArea(getArea: () => Storage): Storage | null {\n try {\n return getArea();\n } catch {\n return null;\n }\n}\n\nexport function getWebBrowserWorkspaceTabIndex(tabId: string): number {\n return webWorkspaceState.tabs.findIndex((tab) => tab.id === tabId);\n}\n\nexport function getWebBrowserWorkspaceTabState(\n tabId: string,\n): WebBrowserWorkspaceTabState {\n const tab = webWorkspaceState.tabs.find((entry) => entry.id === tabId);\n if (!tab) {\n throw createBrowserWorkspaceNotFoundError(tabId);\n }\n return tab;\n}\n\nexport function getCurrentWebBrowserWorkspaceTabState(): WebBrowserWorkspaceTabState | null {\n if (webWorkspaceState.tabs.length === 0) {\n return null;\n }\n\n return (\n webWorkspaceState.tabs.find((tab) => tab.visible) ??\n [...webWorkspaceState.tabs].sort((left, right) => {\n const leftTime = left.lastFocusedAt ?? left.updatedAt ?? \"\";\n const rightTime = right.lastFocusedAt ?? right.updatedAt ?? \"\";\n return (\n rightTime.localeCompare(leftTime) || left.id.localeCompare(right.id)\n );\n })[0] ??\n null\n );\n}\n\nexport function findWebBrowserWorkspaceTargetTabId(\n command: BrowserWorkspaceCommand,\n): string {\n if (command.id?.trim()) {\n return command.id.trim();\n }\n const current = getCurrentWebBrowserWorkspaceTabState();\n if (!current) {\n throw createBrowserWorkspaceCommandTargetError(command.subaction);\n }\n return current.id;\n}\n\nexport async function executeWebBrowserWorkspaceUtilityCommand(\n command: BrowserWorkspaceCommand,\n): Promise<BrowserWorkspaceCommandResult | null> {\n return withWebStateLock(async () => {\n if (\n ![\n \"clipboard\",\n \"console\",\n \"cookies\",\n \"diff\",\n \"dialog\",\n \"drag\",\n \"errors\",\n \"eval\",\n \"frame\",\n \"highlight\",\n \"mouse\",\n \"network\",\n \"pdf\",\n \"screenshot\",\n \"set\",\n \"state\",\n \"storage\",\n \"trace\",\n \"profiler\",\n \"upload\",\n ].includes(command.subaction)\n ) {\n return null;\n }\n\n const id = findWebBrowserWorkspaceTargetTabId(command);\n const tab = getWebBrowserWorkspaceTabState(id);\n const dom = await ensureLoadedWebBrowserWorkspaceTabDocument(tab);\n const runtime = getBrowserWorkspaceRuntimeState(\"web\", id);\n const frameContext = resolveWebBrowserWorkspaceCommandDocument(\n tab,\n dom,\n runtime,\n );\n const document = frameContext.document;\n const resolveTarget = () =>\n resolveBrowserWorkspaceElement(\n document,\n command.selector,\n command.text,\n command,\n );\n\n switch (command.subaction) {\n case \"eval\": {\n if (!command.script?.trim()) {\n throw new Error(\"Eliza browser workspace eval requires script.\");\n }\n // GHSA-mhhr-9ph9-64j7 / GHSA-vhvq-g4mq-vq62: never run user script in\n // Node JSDOM — `new Function()` / eval reach process and full DOM forgery.\n throw createBrowserWorkspaceJsdomScriptExecutionError(\"eval\");\n }\n case \"screenshot\": {\n const data = createBrowserWorkspaceSyntheticScreenshotData(\n tab.title,\n tab.url,\n buildBrowserWorkspaceDocumentSnapshotText(document),\n runtime.settings.viewport ?? undefined,\n );\n runtime.lastScreenshotData = data;\n if (command.filePath?.trim() || command.outputPath?.trim()) {\n const targetPath =\n command.filePath?.trim() || command.outputPath?.trim() || \"\";\n await writeBrowserWorkspaceFile(\n targetPath,\n Buffer.from(data, \"base64\"),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n snapshot: { data },\n value: { path: path.resolve(targetPath) },\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n snapshot: { data },\n };\n }\n case \"clipboard\": {\n const action = command.clipboardAction ?? \"read\";\n if (action === \"read\") {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: browserWorkspaceClipboardText,\n };\n }\n if (action === \"write\") {\n setBrowserWorkspaceClipboardText(command.value ?? command.text ?? \"\");\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: browserWorkspaceClipboardText,\n };\n }\n if (action === \"copy\") {\n const target = resolveTarget();\n setBrowserWorkspaceClipboardText(\n target && \"value\" in (target as HTMLInputElement)\n ? String((target as HTMLInputElement).value ?? \"\")\n : normalizeBrowserWorkspaceText(\n target?.textContent ?? document.body?.textContent,\n ),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: browserWorkspaceClipboardText,\n };\n }\n const target = resolveTarget() ?? document.activeElement;\n if (\n target &&\n (target.tagName === \"INPUT\" ||\n target.tagName === \"TEXTAREA\" ||\n target.tagName === \"SELECT\")\n ) {\n const control = ensureBrowserWorkspaceFormControlElement(\n target,\n \"clipboard\",\n );\n setBrowserWorkspaceControlValue(\n control,\n `${control.value ?? \"\"}${browserWorkspaceClipboardText}`,\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(control),\n value: control.value,\n },\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: browserWorkspaceClipboardText,\n };\n }\n case \"mouse\": {\n const action = command.mouseAction ?? \"move\";\n if (action === \"move\") {\n runtime.mouse.x = command.x ?? runtime.mouse.x;\n runtime.mouse.y = command.y ?? runtime.mouse.y;\n } else if (action === \"down\") {\n const button = command.button ?? \"left\";\n runtime.mouse.buttons = Array.from(\n new Set([...runtime.mouse.buttons, button]),\n );\n } else if (action === \"up\") {\n const button = command.button ?? \"left\";\n runtime.mouse.buttons = runtime.mouse.buttons.filter(\n (entry) => entry !== button,\n );\n } else {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: scrollWebBrowserWorkspaceTarget(\n dom,\n resolveTarget(),\n (command.deltaY ?? 0) < 0 ? \"up\" : \"down\",\n Math.abs(command.deltaY ?? command.pixels ?? 240),\n ),\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.mouse,\n };\n }\n case \"drag\": {\n const source = resolveTarget();\n const target = command.value\n ? resolveBrowserWorkspaceElement(document, command.value)\n : null;\n if (!source || !target) {\n throw new Error(\n \"Eliza browser workspace drag requires source selector and target selector in value.\",\n );\n }\n source.setAttribute(\"data-eliza-dragging\", \"true\");\n target.setAttribute(\"data-eliza-drop-target\", \"true\");\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n source: buildBrowserWorkspaceElementSelector(source),\n target: buildBrowserWorkspaceElementSelector(target),\n },\n };\n }\n case \"upload\": {\n const target = resolveTarget();\n if (!target || target.tagName !== \"INPUT\") {\n throw new Error(\n \"Eliza browser workspace upload requires a file input target.\",\n );\n }\n const files = (command.files ?? []).map((entry) =>\n path.basename(entry),\n );\n target.setAttribute(\"data-eliza-uploaded-files\", files.join(\",\"));\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n files,\n selector: buildBrowserWorkspaceElementSelector(target),\n },\n };\n }\n case \"set\": {\n const action = command.setAction ?? \"viewport\";\n if (action === \"credentials\" || action === \"headers\") {\n assertBrowserWorkspaceConnectorSecretsNotExported(\n tab.partition,\n `set:${action}`,\n );\n }\n if (action === \"viewport\") {\n runtime.settings.viewport = {\n height: Math.max(1, Math.round(command.height ?? 720)),\n scale: Math.max(1, Number(command.scale ?? 1)),\n width: Math.max(1, Math.round(command.width ?? 1280)),\n };\n } else if (action === \"device\") {\n runtime.settings.device = command.device ?? null;\n } else if (action === \"geo\") {\n runtime.settings.geo =\n typeof command.latitude === \"number\" &&\n typeof command.longitude === \"number\"\n ? { latitude: command.latitude, longitude: command.longitude }\n : null;\n } else if (action === \"offline\") {\n runtime.settings.offline = Boolean(command.offline);\n } else if (action === \"headers\") {\n runtime.settings.headers = normalizeBrowserWorkspaceHeaders(\n command.headers,\n );\n } else if (action === \"credentials\") {\n runtime.settings.credentials =\n command.username || command.password\n ? {\n password: command.password ?? \"\",\n username: command.username ?? \"\",\n }\n : null;\n } else if (action === \"media\") {\n runtime.settings.media = command.media ?? null;\n }\n applyBrowserWorkspaceDomSettings(dom, runtime);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.settings,\n };\n }\n case \"cookies\": {\n assertBrowserWorkspaceConnectorSecretsNotExported(\n tab.partition,\n \"cookies\",\n );\n const action = command.cookieAction ?? \"get\";\n if (action === \"clear\") {\n for (const key of Object.keys(\n readBrowserWorkspaceCookies(document),\n )) {\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { cleared: true },\n };\n }\n if (action === \"set\") {\n const cookieName = command.name?.trim() || command.entryKey?.trim();\n if (!cookieName) {\n throw new Error(\n \"Eliza browser workspace cookies set requires name.\",\n );\n }\n document.cookie = `${cookieName}=${command.value ?? \"\"}; path=/`;\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: readBrowserWorkspaceCookies(document),\n };\n }\n case \"storage\": {\n assertBrowserWorkspaceConnectorSecretsNotExported(\n tab.partition,\n \"storage\",\n );\n const area = safeWebStorageArea(() =>\n command.storageArea === \"session\"\n ? dom.window.sessionStorage\n : dom.window.localStorage,\n );\n if (!area) {\n throw new Error(\n \"Eliza browser workspace storage is unavailable for this page's origin (e.g. about:blank). Navigate to a real page first.\",\n );\n }\n const action = command.storageAction ?? \"get\";\n if (action === \"clear\") {\n area.clear();\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { cleared: true },\n };\n }\n if (action === \"set\") {\n const key = command.entryKey?.trim() || command.name?.trim();\n if (!key) {\n throw new Error(\n \"Eliza browser workspace storage set requires entryKey.\",\n );\n }\n area.setItem(key, command.value ?? \"\");\n }\n if (command.entryKey?.trim() || command.name?.trim()) {\n const key = command.entryKey?.trim() || command.name?.trim() || \"\";\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: area.getItem(key),\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: readBrowserWorkspaceStorage(area),\n };\n }\n case \"network\": {\n const action = command.networkAction ?? \"requests\";\n if (action === \"route\") {\n const pattern = command.url?.trim();\n if (!pattern) {\n throw new Error(\n \"Eliza browser workspace network route requires url pattern.\",\n );\n }\n runtime.networkRoutes.push({\n abort: Boolean(command.offline),\n body: command.responseBody ?? null,\n headers: normalizeBrowserWorkspaceHeaders(command.responseHeaders),\n pattern,\n status:\n typeof command.responseStatus === \"number\"\n ? command.responseStatus\n : null,\n });\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.networkRoutes,\n };\n }\n if (action === \"unroute\") {\n runtime.networkRoutes = command.url?.trim()\n ? runtime.networkRoutes.filter(\n (route) => route.pattern !== command.url?.trim(),\n )\n : [];\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.networkRoutes,\n };\n }\n if (action === \"request\") {\n const request = runtime.networkRequests.find(\n (entry) => entry.id === command.requestId,\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: request ?? null,\n };\n }\n if (action === \"harstart\") {\n runtime.networkHar = {\n active: true,\n entries: [],\n startedAt: getBrowserWorkspaceTimestamp(),\n };\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.networkHar,\n };\n }\n if (action === \"harstop\") {\n runtime.networkHar.active = false;\n const har = {\n log: {\n entries: runtime.networkHar.entries,\n startedAt: runtime.networkHar.startedAt,\n },\n };\n if (command.filePath?.trim() || command.outputPath?.trim()) {\n const targetPath =\n command.filePath?.trim() || command.outputPath?.trim() || \"\";\n await writeBrowserWorkspaceFile(\n targetPath,\n JSON.stringify(har, null, 2),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { path: path.resolve(targetPath), ...har },\n };\n }\n return { mode: \"web\", subaction: command.subaction, value: har };\n }\n let requests = [...runtime.networkRequests];\n if (command.filter?.trim()) {\n requests = requests.filter((entry) =>\n entry.url.includes(command.filter ?? \"\"),\n );\n }\n if (command.method?.trim()) {\n requests = requests.filter(\n (entry) =>\n entry.method.toUpperCase() ===\n command.method?.trim().toUpperCase(),\n );\n }\n if (command.status?.trim()) {\n const statusFilter = command.status.trim();\n requests = requests.filter((entry) => {\n if (entry.status === null) {\n return false;\n }\n if (/^\\dxx$/i.test(statusFilter)) {\n return String(entry.status).startsWith(statusFilter[0] ?? \"\");\n }\n return String(entry.status) === statusFilter;\n });\n }\n return { mode: \"web\", subaction: command.subaction, value: requests };\n }\n case \"dialog\": {\n const action = command.dialogAction ?? \"status\";\n if (action === \"status\") {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.dialog,\n };\n }\n if (runtime.dialog) {\n runtime.dialog.open = false;\n }\n const result =\n action === \"accept\"\n ? {\n accepted: true,\n dialog: runtime.dialog,\n promptText: command.promptText ?? command.value ?? null,\n }\n : { accepted: false, dialog: runtime.dialog };\n runtime.dialog = null;\n return { mode: \"web\", subaction: command.subaction, value: result };\n }\n case \"console\": {\n if (command.consoleAction === \"clear\") {\n runtime.consoleEntries = [];\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.consoleEntries,\n };\n }\n case \"errors\": {\n if (command.consoleAction === \"clear\") {\n runtime.errors = [];\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: runtime.errors,\n };\n }\n case \"highlight\": {\n const target = resolveTarget();\n if (!target) {\n throw new Error(\"Target element was not found.\");\n }\n target.setAttribute(\"data-eliza-highlight\", \"true\");\n runtime.highlightedSelector =\n buildBrowserWorkspaceElementSelector(target);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { selector: runtime.highlightedSelector },\n };\n }\n case \"frame\": {\n const action = command.frameAction ?? \"select\";\n if (action === \"main\") {\n runtime.currentFrame = null;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { frame: null },\n };\n }\n const frame = resolveBrowserWorkspaceElement(\n dom.window.document,\n command.selector,\n );\n if (!frame || frame.tagName !== \"IFRAME\") {\n throw new Error(\n \"Eliza browser workspace frame select requires an iframe selector.\",\n );\n }\n runtime.currentFrame = buildBrowserWorkspaceElementSelector(frame);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { frame: runtime.currentFrame },\n };\n }\n case \"diff\": {\n const snapshot = createBrowserWorkspaceSnapshotRecord(\n tab.title,\n tab.url,\n buildBrowserWorkspaceDocumentSnapshotText(document),\n );\n if (command.diffAction === \"url\") {\n const leftUrl = command.url?.trim() || tab.url;\n const rightUrl = command.secondaryUrl?.trim();\n if (!rightUrl) {\n throw new Error(\n \"Eliza browser workspace diff url requires secondaryUrl.\",\n );\n }\n const left = await fetchBrowserWorkspaceTrackedResponse(\n runtime,\n leftUrl,\n {},\n \"document\",\n );\n const right = await fetchBrowserWorkspaceTrackedResponse(\n runtime,\n rightUrl,\n {},\n \"document\",\n );\n const leftSnapshot = createBrowserWorkspaceSnapshotRecord(\n leftUrl,\n left.url || leftUrl,\n await left.text(),\n );\n const rightSnapshot = createBrowserWorkspaceSnapshotRecord(\n rightUrl,\n right.url || rightUrl,\n await right.text(),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: diffBrowserWorkspaceSnapshots(leftSnapshot, rightSnapshot),\n };\n }\n if (command.diffAction === \"screenshot\") {\n const currentData =\n runtime.lastScreenshotData ??\n createBrowserWorkspaceSyntheticScreenshotData(\n tab.title,\n tab.url,\n buildBrowserWorkspaceDocumentSnapshotText(document),\n runtime.settings.viewport ?? undefined,\n );\n const baseline = command.baselinePath?.trim()\n ? await fsp.readFile(\n path.resolve(command.baselinePath.trim()),\n \"base64\",\n )\n : runtime.lastScreenshotData;\n runtime.lastScreenshotData = currentData;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n baselineLength: baseline?.length ?? 0,\n changed: baseline !== currentData,\n currentLength: currentData.length,\n },\n };\n }\n const baseline = command.baselinePath?.trim()\n ? (JSON.parse(\n await fsp.readFile(\n path.resolve(command.baselinePath.trim()),\n \"utf8\",\n ),\n ) as import(\"./browser-workspace-types.js\").BrowserWorkspaceSnapshotRecord)\n : runtime.lastSnapshot;\n const diff = diffBrowserWorkspaceSnapshots(baseline, snapshot);\n runtime.lastSnapshot = snapshot;\n return { mode: \"web\", subaction: command.subaction, value: diff };\n }\n case \"trace\": {\n if (command.traceAction === \"stop\") {\n runtime.trace.active = false;\n const traceValue = { entries: runtime.trace.entries };\n if (command.filePath?.trim() || command.outputPath?.trim()) {\n const targetPath =\n command.filePath?.trim() || command.outputPath?.trim() || \"\";\n await writeBrowserWorkspaceFile(\n targetPath,\n JSON.stringify(traceValue, null, 2),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { path: path.resolve(targetPath), ...traceValue },\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: traceValue,\n };\n }\n runtime.trace = { active: true, entries: [] };\n runtime.trace.entries.push({\n command: \"trace:start\",\n timestamp: getBrowserWorkspaceTimestamp(),\n });\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { active: true },\n };\n }\n case \"profiler\": {\n if (command.profilerAction === \"stop\") {\n runtime.profiler.active = false;\n const profileValue = { entries: runtime.profiler.entries };\n if (command.filePath?.trim() || command.outputPath?.trim()) {\n const targetPath =\n command.filePath?.trim() || command.outputPath?.trim() || \"\";\n await writeBrowserWorkspaceFile(\n targetPath,\n JSON.stringify(profileValue, null, 2),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { path: path.resolve(targetPath), ...profileValue },\n };\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: profileValue,\n };\n }\n runtime.profiler = {\n active: true,\n entries: [\n {\n command: \"profiler:start\",\n timestamp: getBrowserWorkspaceTimestamp(),\n },\n ],\n };\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { active: true },\n };\n }\n case \"state\": {\n assertBrowserWorkspaceConnectorSecretsNotExported(\n tab.partition,\n \"state\",\n );\n if (command.stateAction === \"load\") {\n const filePath =\n command.filePath?.trim() || command.outputPath?.trim();\n if (!filePath) {\n throw new Error(\n \"Eliza browser workspace state load requires filePath.\",\n );\n }\n const payload = JSON.parse(\n await fsp.readFile(path.resolve(filePath), \"utf8\"),\n ) as Record<string, unknown>;\n applyBrowserWorkspaceStateToWebDocument(document, payload);\n if (payload.settings && typeof payload.settings === \"object\") {\n runtime.settings = {\n ...runtime.settings,\n ...(payload.settings as BrowserWorkspaceSettingsState),\n };\n applyBrowserWorkspaceDomSettings(dom, runtime);\n }\n setBrowserWorkspaceClipboardText(\n typeof payload.clipboard === \"string\"\n ? payload.clipboard\n : browserWorkspaceClipboardText,\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { loaded: true },\n };\n }\n // `state` is a best-effort snapshot — opaque origins (about:blank) have\n // no accessible storage, so degrade to empty maps rather than throwing.\n const localArea = safeWebStorageArea(() => dom.window.localStorage);\n const sessionArea = safeWebStorageArea(() => dom.window.sessionStorage);\n const payload = {\n clipboard: browserWorkspaceClipboardText,\n cookies: readBrowserWorkspaceCookies(document),\n localStorage: localArea ? readBrowserWorkspaceStorage(localArea) : {},\n sessionStorage: sessionArea\n ? readBrowserWorkspaceStorage(sessionArea)\n : {},\n settings: runtime.settings,\n url: tab.url,\n };\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (filePath) {\n await writeBrowserWorkspaceFile(\n filePath,\n JSON.stringify(payload, null, 2),\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { path: path.resolve(filePath), ...payload },\n };\n }\n return { mode: \"web\", subaction: command.subaction, value: payload };\n }\n case \"pdf\": {\n const filePath = command.filePath?.trim() || command.outputPath?.trim();\n if (!filePath) {\n throw new Error(\"Eliza browser workspace pdf requires filePath.\");\n }\n const pdf = createBrowserWorkspacePdfBuffer(\n tab.title,\n normalizeBrowserWorkspaceText(document.body?.textContent),\n );\n const resolved = await writeBrowserWorkspaceFile(filePath, pdf);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { path: resolved, size: pdf.byteLength },\n };\n }\n default:\n return null;\n }\n });\n}\n\nexport async function executeWebBrowserWorkspaceDomCommand(\n command: BrowserWorkspaceCommand,\n): Promise<BrowserWorkspaceCommandResult> {\n return withWebStateLock(async () => {\n const id = findWebBrowserWorkspaceTargetTabId(command);\n command = resolveBrowserWorkspaceCommandElementRefs(command, \"web\", id);\n const tab = getWebBrowserWorkspaceTabState(id);\n const dom = await ensureLoadedWebBrowserWorkspaceTabDocument(tab);\n const runtime = getBrowserWorkspaceRuntimeState(\"web\", id);\n const frameContext = resolveWebBrowserWorkspaceCommandDocument(\n tab,\n dom,\n runtime,\n );\n const document = frameContext.document;\n const resolveTarget = () =>\n resolveBrowserWorkspaceElement(\n document,\n command.selector,\n command.text,\n command,\n );\n\n switch (command.subaction) {\n case \"inspect\":\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n return {\n mode: \"web\",\n subaction: command.subaction,\n elements: registerBrowserWorkspaceElementRefs(\n \"web\",\n tab.id,\n collectBrowserWorkspaceInspectElements(document),\n ),\n value: {\n title: tab.title,\n url: tab.url,\n },\n };\n case \"snapshot\":\n clearWebBrowserWorkspaceTabElementRefs(tab.id);\n return {\n mode: \"web\",\n subaction: command.subaction,\n elements: registerBrowserWorkspaceElementRefs(\n \"web\",\n tab.id,\n collectBrowserWorkspaceInspectElements(document),\n ),\n value: {\n bodyText: buildBrowserWorkspaceDocumentSnapshotText(document).slice(\n 0,\n 800,\n ),\n title: tab.title,\n url: tab.url,\n },\n };\n case \"get\": {\n if (command.getMode === \"title\") {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: tab.title,\n };\n }\n if (command.getMode === \"url\") {\n return { mode: \"web\", subaction: command.subaction, value: tab.url };\n }\n if (command.getMode === \"count\") {\n if (!command.selector?.trim()) {\n throw new Error(\n \"Eliza browser workspace get count requires selector.\",\n );\n }\n const semanticCommand = mergeBrowserWorkspaceSelectorCommand(\n command,\n command.selector,\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: semanticCommand\n ? Number(\n Boolean(\n resolveBrowserWorkspaceFindElement(\n document,\n semanticCommand,\n ),\n ),\n )\n : queryAllBrowserWorkspaceSelector(document, command.selector)\n .length,\n };\n }\n\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n\n let value: unknown;\n switch (command.getMode) {\n case \"attr\":\n if (!command.attribute?.trim()) {\n throw new Error(\n \"Eliza browser workspace attr lookups require attribute.\",\n );\n }\n value = element.getAttribute(command.attribute);\n break;\n case \"box\":\n value = getBrowserWorkspaceElementBox(element);\n break;\n case \"checked\":\n value =\n element.tagName === \"INPUT\"\n ? Boolean((element as HTMLInputElement).checked)\n : element.tagName === \"OPTION\"\n ? Boolean((element as HTMLOptionElement).selected)\n : false;\n break;\n case \"enabled\":\n value =\n \"disabled\" in element\n ? !(\n element as\n | HTMLButtonElement\n | HTMLInputElement\n | HTMLSelectElement\n | HTMLTextAreaElement\n ).disabled\n : true;\n break;\n case \"html\":\n value = element.innerHTML;\n break;\n case \"styles\":\n value = getBrowserWorkspaceElementStyles(element, dom.window);\n break;\n case \"value\":\n value = getBrowserWorkspaceElementValue(element);\n break;\n case \"visible\":\n value = isBrowserWorkspaceElementVisible(element);\n break;\n default:\n value = normalizeBrowserWorkspaceText(element.textContent);\n break;\n }\n\n return { mode: \"web\", subaction: command.subaction, value };\n }\n case \"find\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n\n switch (command.action) {\n case \"check\": {\n const input = ensureBrowserWorkspaceCheckboxElement(\n element,\n \"check\",\n );\n input.checked = true;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n checked: input.checked,\n selector: buildBrowserWorkspaceElementSelector(input),\n },\n };\n }\n case \"click\":\n return {\n ...(await activateWebBrowserWorkspaceElement(\n tab,\n element,\n \"click\",\n )),\n subaction: command.subaction,\n };\n case \"fill\": {\n const control = ensureBrowserWorkspaceFormControlElement(\n element,\n \"fill\",\n );\n setBrowserWorkspaceControlValue(control, command.value ?? \"\");\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(control),\n value: control.value,\n },\n };\n }\n case \"focus\":\n if (typeof (element as HTMLElement).focus === \"function\") {\n (element as HTMLElement).focus();\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n focused: document.activeElement === element,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n case \"hover\":\n element.setAttribute(\"data-eliza-hover\", \"true\");\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n hovered: true,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n case \"type\": {\n const control = ensureBrowserWorkspaceFormControlElement(\n element,\n \"type\",\n );\n setBrowserWorkspaceControlValue(\n control,\n `${control.value ?? \"\"}${command.value ?? \"\"}`,\n );\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(control),\n value: control.value,\n },\n };\n }\n case \"uncheck\": {\n const input = ensureBrowserWorkspaceCheckboxElement(\n element,\n \"uncheck\",\n );\n input.checked = false;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n checked: input.checked,\n selector: buildBrowserWorkspaceElementSelector(input),\n },\n };\n }\n case \"text\":\n case undefined:\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n element: createBrowserWorkspaceElementSummary(element),\n text: normalizeBrowserWorkspaceText(element.textContent),\n },\n };\n default:\n throw new Error(\n `Unsupported browser workspace find action: ${command.action}`,\n );\n }\n }\n case \"check\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n const input = ensureBrowserWorkspaceCheckboxElement(element, \"check\");\n input.checked = true;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n checked: input.checked,\n selector: buildBrowserWorkspaceElementSelector(input),\n },\n };\n }\n case \"fill\":\n case \"type\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n const control = ensureBrowserWorkspaceFormControlElement(\n element,\n command.subaction,\n );\n const nextValue =\n command.subaction === \"type\"\n ? `${control.value ?? \"\"}${command.value ?? \"\"}`\n : (command.value ?? \"\");\n setBrowserWorkspaceControlValue(control, nextValue);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(control),\n value: nextValue,\n },\n };\n }\n case \"focus\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n if (typeof (element as HTMLElement).focus === \"function\") {\n (element as HTMLElement).focus();\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n focused: document.activeElement === element,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n }\n case \"hover\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n element.setAttribute(\"data-eliza-hover\", \"true\");\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n hovered: true,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n }\n case \"keyboardinserttext\":\n case \"keyboardtype\": {\n const active = document.activeElement;\n if (\n !active ||\n !(\n active.tagName === \"INPUT\" ||\n active.tagName === \"TEXTAREA\" ||\n active.tagName === \"SELECT\"\n )\n ) {\n throw new Error(\n \"Eliza browser workspace keyboard text input requires a focused input target.\",\n );\n }\n const control = ensureBrowserWorkspaceFormControlElement(\n active,\n command.subaction === \"keyboardtype\" ? \"type\" : \"keyboardinserttext\",\n );\n const nextValue =\n command.subaction === \"keyboardtype\"\n ? `${control.value ?? \"\"}${command.value ?? \"\"}`\n : (command.value ?? \"\");\n setBrowserWorkspaceControlValue(control, nextValue);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(control),\n value: control.value,\n },\n };\n }\n case \"keydown\":\n case \"keyup\":\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n key: command.key?.trim() || \"Enter\",\n selector:\n document.activeElement &&\n document.activeElement instanceof Element\n ? buildBrowserWorkspaceElementSelector(document.activeElement)\n : null,\n },\n };\n case \"click\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n return activateWebBrowserWorkspaceElement(tab, element, \"click\");\n }\n case \"dblclick\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n return activateWebBrowserWorkspaceElement(tab, element, \"dblclick\");\n }\n case \"press\": {\n const key = command.key?.trim() || \"Enter\";\n const element = resolveTarget();\n const form = findClosestBrowserWorkspaceForm(element);\n\n if (key === \"Enter\" && form) {\n await submitWebBrowserWorkspaceForm(tab, form);\n return {\n mode: \"web\",\n subaction: command.subaction,\n tab: cloneWebBrowserWorkspaceTabState(tab),\n value: { key, url: tab.url },\n };\n }\n\n return { mode: \"web\", subaction: command.subaction, value: { key } };\n }\n case \"scroll\": {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: scrollWebBrowserWorkspaceTarget(\n dom,\n resolveTarget(),\n command.direction ?? \"down\",\n command.pixels ?? 240,\n ),\n };\n }\n case \"scrollinto\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n if (typeof (element as HTMLElement).focus === \"function\") {\n (element as HTMLElement).focus();\n }\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n scrolled: true,\n selector: buildBrowserWorkspaceElementSelector(element),\n },\n };\n }\n case \"select\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n if (element.tagName !== \"SELECT\") {\n throw new Error(\n \"Eliza browser workspace select requires a select target.\",\n );\n }\n const select = ensureBrowserWorkspaceFormControlElement(\n element,\n \"select\",\n );\n const option = Array.from((select as HTMLSelectElement).options).find(\n (entry) =>\n entry.value === (command.value ?? \"\") ||\n browserWorkspaceTextMatches(\n entry.textContent ?? \"\",\n command.value ?? \"\",\n true,\n ),\n );\n if (!option) {\n throw new Error(\"Select option was not found.\");\n }\n (select as HTMLSelectElement).value = option.value;\n option.selected = true;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n selector: buildBrowserWorkspaceElementSelector(select),\n value: (select as HTMLSelectElement).value,\n },\n };\n }\n case \"uncheck\": {\n const element = resolveTarget();\n if (!element) {\n throw new Error(\"Target element was not found.\");\n }\n const input = ensureBrowserWorkspaceCheckboxElement(element, \"uncheck\");\n input.checked = false;\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n checked: input.checked,\n selector: buildBrowserWorkspaceElementSelector(input),\n },\n };\n }\n case \"wait\": {\n assertBrowserWorkspaceJsdomScriptNotRequested(command.script, \"wait\");\n if (\n !command.selector &&\n !command.findBy &&\n !command.text &&\n !command.url &&\n !command.script &&\n typeof command.timeoutMs === \"number\" &&\n Number.isFinite(command.timeoutMs)\n ) {\n const waitedMs = Math.max(0, command.timeoutMs);\n await sleep(waitedMs);\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: { waitedMs },\n };\n }\n const timeoutMs =\n typeof command.timeoutMs === \"number\" &&\n Number.isFinite(command.timeoutMs)\n ? Math.max(100, command.timeoutMs)\n : DEFAULT_TIMEOUT_MS;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() <= deadline) {\n await ensureLoadedWebBrowserWorkspaceTabDocument(tab);\n const currentDom = ensureBrowserWorkspaceDom(tab);\n const currentDocument = currentDom.window.document;\n\n const matchesSelector = command.selector?.trim()\n ? (() => {\n const found = resolveBrowserWorkspaceElement(\n currentDocument,\n command.selector,\n undefined,\n command,\n );\n if (command.state === \"hidden\") {\n return !found || !isBrowserWorkspaceElementVisible(found);\n }\n return found ? isBrowserWorkspaceElementVisible(found) : false;\n })()\n : false;\n const matchesFind = command.findBy\n ? (() => {\n const found = resolveBrowserWorkspaceFindElement(\n currentDocument,\n command,\n );\n return command.state === \"hidden\" ? !found : Boolean(found);\n })()\n : false;\n const matchesText = command.text?.trim()\n ? normalizeBrowserWorkspaceText(\n currentDocument.body?.textContent,\n ).includes(command.text.trim())\n : false;\n const matchesUrl = command.url?.trim()\n ? tab.url.includes(command.url.trim())\n : false;\n\n if (\n matchesSelector ||\n matchesFind ||\n matchesText ||\n matchesUrl ||\n (!command.selector &&\n !command.findBy &&\n !command.text &&\n !command.url)\n ) {\n return {\n mode: \"web\",\n subaction: command.subaction,\n value: {\n findBy: command.findBy ?? null,\n selector: command.selector ?? null,\n state: command.state ?? null,\n text: command.text ?? null,\n url: tab.url,\n },\n };\n }\n\n await sleep(DEFAULT_WAIT_INTERVAL_MS);\n }\n\n throw new Error(\"Timed out waiting for browser workspace condition.\");\n }\n default:\n throw new Error(\n `Unsupported web browser workspace subaction: ${command.subaction}`,\n );\n }\n });\n}\n"],"mappings":"AAAA,YAAY,SAAS;AACrB,YAAY,UAAU;AACtB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAeP,SAAS,mBAAmB,SAAwC;AAClE,MAAI;AACF,WAAO,QAAQ;AAAA,EACjB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,+BAA+B,OAAuB;AACpE,SAAO,kBAAkB,KAAK,UAAU,CAAC,QAAQ,IAAI,OAAO,KAAK;AACnE;AAEO,SAAS,+BACd,OAC6B;AAC7B,QAAM,MAAM,kBAAkB,KAAK,KAAK,CAAC,UAAU,MAAM,OAAO,KAAK;AACrE,MAAI,CAAC,KAAK;AACR,UAAM,oCAAoC,KAAK;AAAA,EACjD;AACA,SAAO;AACT;AAEO,SAAS,wCAA4E;AAC1F,MAAI,kBAAkB,KAAK,WAAW,GAAG;AACvC,WAAO;AAAA,EACT;AAEA,SACE,kBAAkB,KAAK,KAAK,CAAC,QAAQ,IAAI,OAAO,KAChD,CAAC,GAAG,kBAAkB,IAAI,EAAE,KAAK,CAAC,MAAM,UAAU;AAChD,UAAM,WAAW,KAAK,iBAAiB,KAAK,aAAa;AACzD,UAAM,YAAY,MAAM,iBAAiB,MAAM,aAAa;AAC5D,WACE,UAAU,cAAc,QAAQ,KAAK,KAAK,GAAG,cAAc,MAAM,EAAE;AAAA,EAEvE,CAAC,EAAE,CAAC,KACJ;AAEJ;AAEO,SAAS,mCACd,SACQ;AACR,MAAI,QAAQ,IAAI,KAAK,GAAG;AACtB,WAAO,QAAQ,GAAG,KAAK;AAAA,EACzB;AACA,QAAM,UAAU,sCAAsC;AACtD,MAAI,CAAC,SAAS;AACZ,UAAM,yCAAyC,QAAQ,SAAS;AAAA,EAClE;AACA,SAAO,QAAQ;AACjB;AAEA,eAAsB,yCACpB,SAC+C;AAC/C,SAAO,iBAAiB,YAAY;AAClC,QACE,CAAC;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,SAAS,QAAQ,SAAS,GAC5B;AACA,aAAO;AAAA,IACT;AAEA,UAAM,KAAK,mCAAmC,OAAO;AACrD,UAAM,MAAM,+BAA+B,EAAE;AAC7C,UAAM,MAAM,MAAM,2CAA2C,GAAG;AAChE,UAAM,UAAU,gCAAgC,OAAO,EAAE;AACzD,UAAM,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,WAAW,aAAa;AAC9B,UAAM,gBAAgB,MACpB;AAAA,MACE;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,IACF;AAEF,YAAQ,QAAQ,WAAW;AAAA,MACzB,KAAK,QAAQ;AACX,YAAI,CAAC,QAAQ,QAAQ,KAAK,GAAG;AAC3B,gBAAM,IAAI,MAAM,+CAA+C;AAAA,QACjE;AAGA,cAAM,gDAAgD,MAAM;AAAA,MAC9D;AAAA,MACA,KAAK,cAAc;AACjB,cAAM,OAAO;AAAA,UACX,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,0CAA0C,QAAQ;AAAA,UAClD,QAAQ,SAAS,YAAY;AAAA,QAC/B;AACA,gBAAQ,qBAAqB;AAC7B,YAAI,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK,GAAG;AAC1D,gBAAM,aACJ,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK,KAAK;AAC5D,gBAAM;AAAA,YACJ;AAAA,YACA,OAAO,KAAK,MAAM,QAAQ;AAAA,UAC5B;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,UAAU,EAAE,KAAK;AAAA,YACjB,OAAO,EAAE,MAAM,KAAK,QAAQ,UAAU,EAAE;AAAA,UAC1C;AAAA,QACF;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,UAAU,EAAE,KAAK;AAAA,QACnB;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,SAAS,QAAQ,mBAAmB;AAC1C,YAAI,WAAW,QAAQ;AACrB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,WAAW,SAAS;AACtB,2CAAiC,QAAQ,SAAS,QAAQ,QAAQ,EAAE;AACpE,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,WAAW,QAAQ;AACrB,gBAAMA,UAAS,cAAc;AAC7B;AAAA,YACEA,WAAU,WAAYA,UAClB,OAAQA,QAA4B,SAAS,EAAE,IAC/C;AAAA,cACEA,SAAQ,eAAe,SAAS,MAAM;AAAA,YACxC;AAAA,UACN;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO;AAAA,UACT;AAAA,QACF;AACA,cAAM,SAAS,cAAc,KAAK,SAAS;AAC3C,YACE,WACC,OAAO,YAAY,WAClB,OAAO,YAAY,cACnB,OAAO,YAAY,WACrB;AACA,gBAAM,UAAU;AAAA,YACd;AAAA,YACA;AAAA,UACF;AACA;AAAA,YACE;AAAA,YACA,GAAG,QAAQ,SAAS,EAAE,GAAG,6BAA6B;AAAA,UACxD;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO;AAAA,cACL,UAAU,qCAAqC,OAAO;AAAA,cACtD,OAAO,QAAQ;AAAA,YACjB;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,QACT;AAAA,MACF;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,SAAS,QAAQ,eAAe;AACtC,YAAI,WAAW,QAAQ;AACrB,kBAAQ,MAAM,IAAI,QAAQ,KAAK,QAAQ,MAAM;AAC7C,kBAAQ,MAAM,IAAI,QAAQ,KAAK,QAAQ,MAAM;AAAA,QAC/C,WAAW,WAAW,QAAQ;AAC5B,gBAAM,SAAS,QAAQ,UAAU;AACjC,kBAAQ,MAAM,UAAU,MAAM;AAAA,YAC5B,oBAAI,IAAI,CAAC,GAAG,QAAQ,MAAM,SAAS,MAAM,CAAC;AAAA,UAC5C;AAAA,QACF,WAAW,WAAW,MAAM;AAC1B,gBAAM,SAAS,QAAQ,UAAU;AACjC,kBAAQ,MAAM,UAAU,QAAQ,MAAM,QAAQ;AAAA,YAC5C,CAAC,UAAU,UAAU;AAAA,UACvB;AAAA,QACF,OAAO;AACL,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO;AAAA,cACL;AAAA,cACA,cAAc;AAAA,eACb,QAAQ,UAAU,KAAK,IAAI,OAAO;AAAA,cACnC,KAAK,IAAI,QAAQ,UAAU,QAAQ,UAAU,GAAG;AAAA,YAClD;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,QAAQ;AAAA,QACjB;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,cAAM,SAAS,cAAc;AAC7B,cAAM,SAAS,QAAQ,QACnB,+BAA+B,UAAU,QAAQ,KAAK,IACtD;AACJ,YAAI,CAAC,UAAU,CAAC,QAAQ;AACtB,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,eAAO,aAAa,uBAAuB,MAAM;AACjD,eAAO,aAAa,0BAA0B,MAAM;AACpD,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,QAAQ,qCAAqC,MAAM;AAAA,YACnD,QAAQ,qCAAqC,MAAM;AAAA,UACrD;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,UAAU;AACb,cAAM,SAAS,cAAc;AAC7B,YAAI,CAAC,UAAU,OAAO,YAAY,SAAS;AACzC,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,cAAM,SAAS,QAAQ,SAAS,CAAC,GAAG;AAAA,UAAI,CAAC,UACvC,KAAK,SAAS,KAAK;AAAA,QACrB;AACA,eAAO,aAAa,6BAA6B,MAAM,KAAK,GAAG,CAAC;AAChE,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL;AAAA,YACA,UAAU,qCAAqC,MAAM;AAAA,UACvD;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,OAAO;AACV,cAAM,SAAS,QAAQ,aAAa;AACpC,YAAI,WAAW,iBAAiB,WAAW,WAAW;AACpD;AAAA,YACE,IAAI;AAAA,YACJ,OAAO,MAAM;AAAA,UACf;AAAA,QACF;AACA,YAAI,WAAW,YAAY;AACzB,kBAAQ,SAAS,WAAW;AAAA,YAC1B,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,UAAU,GAAG,CAAC;AAAA,YACrD,OAAO,KAAK,IAAI,GAAG,OAAO,QAAQ,SAAS,CAAC,CAAC;AAAA,YAC7C,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,SAAS,IAAI,CAAC;AAAA,UACtD;AAAA,QACF,WAAW,WAAW,UAAU;AAC9B,kBAAQ,SAAS,SAAS,QAAQ,UAAU;AAAA,QAC9C,WAAW,WAAW,OAAO;AAC3B,kBAAQ,SAAS,MACf,OAAO,QAAQ,aAAa,YAC5B,OAAO,QAAQ,cAAc,WACzB,EAAE,UAAU,QAAQ,UAAU,WAAW,QAAQ,UAAU,IAC3D;AAAA,QACR,WAAW,WAAW,WAAW;AAC/B,kBAAQ,SAAS,UAAU,QAAQ,QAAQ,OAAO;AAAA,QACpD,WAAW,WAAW,WAAW;AAC/B,kBAAQ,SAAS,UAAU;AAAA,YACzB,QAAQ;AAAA,UACV;AAAA,QACF,WAAW,WAAW,eAAe;AACnC,kBAAQ,SAAS,cACf,QAAQ,YAAY,QAAQ,WACxB;AAAA,YACE,UAAU,QAAQ,YAAY;AAAA,YAC9B,UAAU,QAAQ,YAAY;AAAA,UAChC,IACA;AAAA,QACR,WAAW,WAAW,SAAS;AAC7B,kBAAQ,SAAS,QAAQ,QAAQ,SAAS;AAAA,QAC5C;AACA,yCAAiC,KAAK,OAAO;AAC7C,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,QAAQ;AAAA,QACjB;AAAA,MACF;AAAA,MACA,KAAK,WAAW;AACd;AAAA,UACE,IAAI;AAAA,UACJ;AAAA,QACF;AACA,cAAM,SAAS,QAAQ,gBAAgB;AACvC,YAAI,WAAW,SAAS;AACtB,qBAAW,OAAO,OAAO;AAAA,YACvB,4BAA4B,QAAQ;AAAA,UACtC,GAAG;AACD,qBAAS,SAAS,GAAG,GAAG;AAAA,UAC1B;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,EAAE,SAAS,KAAK;AAAA,UACzB;AAAA,QACF;AACA,YAAI,WAAW,OAAO;AACpB,gBAAM,aAAa,QAAQ,MAAM,KAAK,KAAK,QAAQ,UAAU,KAAK;AAClE,cAAI,CAAC,YAAY;AACf,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AACA,mBAAS,SAAS,GAAG,UAAU,IAAI,QAAQ,SAAS,EAAE;AAAA,QACxD;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,4BAA4B,QAAQ;AAAA,QAC7C;AAAA,MACF;AAAA,MACA,KAAK,WAAW;AACd;AAAA,UACE,IAAI;AAAA,UACJ;AAAA,QACF;AACA,cAAM,OAAO;AAAA,UAAmB,MAC9B,QAAQ,gBAAgB,YACpB,IAAI,OAAO,iBACX,IAAI,OAAO;AAAA,QACjB;AACA,YAAI,CAAC,MAAM;AACT,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,cAAM,SAAS,QAAQ,iBAAiB;AACxC,YAAI,WAAW,SAAS;AACtB,eAAK,MAAM;AACX,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,EAAE,SAAS,KAAK;AAAA,UACzB;AAAA,QACF;AACA,YAAI,WAAW,OAAO;AACpB,gBAAM,MAAM,QAAQ,UAAU,KAAK,KAAK,QAAQ,MAAM,KAAK;AAC3D,cAAI,CAAC,KAAK;AACR,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AACA,eAAK,QAAQ,KAAK,QAAQ,SAAS,EAAE;AAAA,QACvC;AACA,YAAI,QAAQ,UAAU,KAAK,KAAK,QAAQ,MAAM,KAAK,GAAG;AACpD,gBAAM,MAAM,QAAQ,UAAU,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK;AAChE,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,KAAK,QAAQ,GAAG;AAAA,UACzB;AAAA,QACF;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,4BAA4B,IAAI;AAAA,QACzC;AAAA,MACF;AAAA,MACA,KAAK,WAAW;AACd,cAAM,SAAS,QAAQ,iBAAiB;AACxC,YAAI,WAAW,SAAS;AACtB,gBAAM,UAAU,QAAQ,KAAK,KAAK;AAClC,cAAI,CAAC,SAAS;AACZ,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AACA,kBAAQ,cAAc,KAAK;AAAA,YACzB,OAAO,QAAQ,QAAQ,OAAO;AAAA,YAC9B,MAAM,QAAQ,gBAAgB;AAAA,YAC9B,SAAS,iCAAiC,QAAQ,eAAe;AAAA,YACjE;AAAA,YACA,QACE,OAAO,QAAQ,mBAAmB,WAC9B,QAAQ,iBACR;AAAA,UACR,CAAC;AACD,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,QAAQ;AAAA,UACjB;AAAA,QACF;AACA,YAAI,WAAW,WAAW;AACxB,kBAAQ,gBAAgB,QAAQ,KAAK,KAAK,IACtC,QAAQ,cAAc;AAAA,YACpB,CAAC,UAAU,MAAM,YAAY,QAAQ,KAAK,KAAK;AAAA,UACjD,IACA,CAAC;AACL,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,QAAQ;AAAA,UACjB;AAAA,QACF;AACA,YAAI,WAAW,WAAW;AACxB,gBAAM,UAAU,QAAQ,gBAAgB;AAAA,YACtC,CAAC,UAAU,MAAM,OAAO,QAAQ;AAAA,UAClC;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,WAAW;AAAA,UACpB;AAAA,QACF;AACA,YAAI,WAAW,YAAY;AACzB,kBAAQ,aAAa;AAAA,YACnB,QAAQ;AAAA,YACR,SAAS,CAAC;AAAA,YACV,WAAW,6BAA6B;AAAA,UAC1C;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,QAAQ;AAAA,UACjB;AAAA,QACF;AACA,YAAI,WAAW,WAAW;AACxB,kBAAQ,WAAW,SAAS;AAC5B,gBAAM,MAAM;AAAA,YACV,KAAK;AAAA,cACH,SAAS,QAAQ,WAAW;AAAA,cAC5B,WAAW,QAAQ,WAAW;AAAA,YAChC;AAAA,UACF;AACA,cAAI,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK,GAAG;AAC1D,kBAAM,aACJ,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK,KAAK;AAC5D,kBAAM;AAAA,cACJ;AAAA,cACA,KAAK,UAAU,KAAK,MAAM,CAAC;AAAA,YAC7B;AACA,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO,EAAE,MAAM,KAAK,QAAQ,UAAU,GAAG,GAAG,IAAI;AAAA,YAClD;AAAA,UACF;AACA,iBAAO,EAAE,MAAM,OAAO,WAAW,QAAQ,WAAW,OAAO,IAAI;AAAA,QACjE;AACA,YAAI,WAAW,CAAC,GAAG,QAAQ,eAAe;AAC1C,YAAI,QAAQ,QAAQ,KAAK,GAAG;AAC1B,qBAAW,SAAS;AAAA,YAAO,CAAC,UAC1B,MAAM,IAAI,SAAS,QAAQ,UAAU,EAAE;AAAA,UACzC;AAAA,QACF;AACA,YAAI,QAAQ,QAAQ,KAAK,GAAG;AAC1B,qBAAW,SAAS;AAAA,YAClB,CAAC,UACC,MAAM,OAAO,YAAY,MACzB,QAAQ,QAAQ,KAAK,EAAE,YAAY;AAAA,UACvC;AAAA,QACF;AACA,YAAI,QAAQ,QAAQ,KAAK,GAAG;AAC1B,gBAAM,eAAe,QAAQ,OAAO,KAAK;AACzC,qBAAW,SAAS,OAAO,CAAC,UAAU;AACpC,gBAAI,MAAM,WAAW,MAAM;AACzB,qBAAO;AAAA,YACT;AACA,gBAAI,UAAU,KAAK,YAAY,GAAG;AAChC,qBAAO,OAAO,MAAM,MAAM,EAAE,WAAW,aAAa,CAAC,KAAK,EAAE;AAAA,YAC9D;AACA,mBAAO,OAAO,MAAM,MAAM,MAAM;AAAA,UAClC,CAAC;AAAA,QACH;AACA,eAAO,EAAE,MAAM,OAAO,WAAW,QAAQ,WAAW,OAAO,SAAS;AAAA,MACtE;AAAA,MACA,KAAK,UAAU;AACb,cAAM,SAAS,QAAQ,gBAAgB;AACvC,YAAI,WAAW,UAAU;AACvB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,QAAQ;AAAA,UACjB;AAAA,QACF;AACA,YAAI,QAAQ,QAAQ;AAClB,kBAAQ,OAAO,OAAO;AAAA,QACxB;AACA,cAAM,SACJ,WAAW,WACP;AAAA,UACE,UAAU;AAAA,UACV,QAAQ,QAAQ;AAAA,UAChB,YAAY,QAAQ,cAAc,QAAQ,SAAS;AAAA,QACrD,IACA,EAAE,UAAU,OAAO,QAAQ,QAAQ,OAAO;AAChD,gBAAQ,SAAS;AACjB,eAAO,EAAE,MAAM,OAAO,WAAW,QAAQ,WAAW,OAAO,OAAO;AAAA,MACpE;AAAA,MACA,KAAK,WAAW;AACd,YAAI,QAAQ,kBAAkB,SAAS;AACrC,kBAAQ,iBAAiB,CAAC;AAAA,QAC5B;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,QAAQ;AAAA,QACjB;AAAA,MACF;AAAA,MACA,KAAK,UAAU;AACb,YAAI,QAAQ,kBAAkB,SAAS;AACrC,kBAAQ,SAAS,CAAC;AAAA,QACpB;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,QAAQ;AAAA,QACjB;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,SAAS,cAAc;AAC7B,YAAI,CAAC,QAAQ;AACX,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,eAAO,aAAa,wBAAwB,MAAM;AAClD,gBAAQ,sBACN,qCAAqC,MAAM;AAC7C,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,EAAE,UAAU,QAAQ,oBAAoB;AAAA,QACjD;AAAA,MACF;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,SAAS,QAAQ,eAAe;AACtC,YAAI,WAAW,QAAQ;AACrB,kBAAQ,eAAe;AACvB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,EAAE,OAAO,KAAK;AAAA,UACvB;AAAA,QACF;AACA,cAAM,QAAQ;AAAA,UACZ,IAAI,OAAO;AAAA,UACX,QAAQ;AAAA,QACV;AACA,YAAI,CAAC,SAAS,MAAM,YAAY,UAAU;AACxC,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,gBAAQ,eAAe,qCAAqC,KAAK;AACjE,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,EAAE,OAAO,QAAQ,aAAa;AAAA,QACvC;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,cAAM,WAAW;AAAA,UACf,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,0CAA0C,QAAQ;AAAA,QACpD;AACA,YAAI,QAAQ,eAAe,OAAO;AAChC,gBAAM,UAAU,QAAQ,KAAK,KAAK,KAAK,IAAI;AAC3C,gBAAM,WAAW,QAAQ,cAAc,KAAK;AAC5C,cAAI,CAAC,UAAU;AACb,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AACA,gBAAM,OAAO,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA,CAAC;AAAA,YACD;AAAA,UACF;AACA,gBAAM,QAAQ,MAAM;AAAA,YAClB;AAAA,YACA;AAAA,YACA,CAAC;AAAA,YACD;AAAA,UACF;AACA,gBAAM,eAAe;AAAA,YACnB;AAAA,YACA,KAAK,OAAO;AAAA,YACZ,MAAM,KAAK,KAAK;AAAA,UAClB;AACA,gBAAM,gBAAgB;AAAA,YACpB;AAAA,YACA,MAAM,OAAO;AAAA,YACb,MAAM,MAAM,KAAK;AAAA,UACnB;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,8BAA8B,cAAc,aAAa;AAAA,UAClE;AAAA,QACF;AACA,YAAI,QAAQ,eAAe,cAAc;AACvC,gBAAM,cACJ,QAAQ,sBACR;AAAA,YACE,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,0CAA0C,QAAQ;AAAA,YAClD,QAAQ,SAAS,YAAY;AAAA,UAC/B;AACF,gBAAMC,YAAW,QAAQ,cAAc,KAAK,IACxC,MAAM,IAAI;AAAA,YACR,KAAK,QAAQ,QAAQ,aAAa,KAAK,CAAC;AAAA,YACxC;AAAA,UACF,IACA,QAAQ;AACZ,kBAAQ,qBAAqB;AAC7B,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO;AAAA,cACL,gBAAgBA,WAAU,UAAU;AAAA,cACpC,SAASA,cAAa;AAAA,cACtB,eAAe,YAAY;AAAA,YAC7B;AAAA,UACF;AAAA,QACF;AACA,cAAM,WAAW,QAAQ,cAAc,KAAK,IACvC,KAAK;AAAA,UACJ,MAAM,IAAI;AAAA,YACR,KAAK,QAAQ,QAAQ,aAAa,KAAK,CAAC;AAAA,YACxC;AAAA,UACF;AAAA,QACF,IACA,QAAQ;AACZ,cAAM,OAAO,8BAA8B,UAAU,QAAQ;AAC7D,gBAAQ,eAAe;AACvB,eAAO,EAAE,MAAM,OAAO,WAAW,QAAQ,WAAW,OAAO,KAAK;AAAA,MAClE;AAAA,MACA,KAAK,SAAS;AACZ,YAAI,QAAQ,gBAAgB,QAAQ;AAClC,kBAAQ,MAAM,SAAS;AACvB,gBAAM,aAAa,EAAE,SAAS,QAAQ,MAAM,QAAQ;AACpD,cAAI,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK,GAAG;AAC1D,kBAAM,aACJ,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK,KAAK;AAC5D,kBAAM;AAAA,cACJ;AAAA,cACA,KAAK,UAAU,YAAY,MAAM,CAAC;AAAA,YACpC;AACA,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO,EAAE,MAAM,KAAK,QAAQ,UAAU,GAAG,GAAG,WAAW;AAAA,YACzD;AAAA,UACF;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO;AAAA,UACT;AAAA,QACF;AACA,gBAAQ,QAAQ,EAAE,QAAQ,MAAM,SAAS,CAAC,EAAE;AAC5C,gBAAQ,MAAM,QAAQ,KAAK;AAAA,UACzB,SAAS;AAAA,UACT,WAAW,6BAA6B;AAAA,QAC1C,CAAC;AACD,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,EAAE,QAAQ,KAAK;AAAA,QACxB;AAAA,MACF;AAAA,MACA,KAAK,YAAY;AACf,YAAI,QAAQ,mBAAmB,QAAQ;AACrC,kBAAQ,SAAS,SAAS;AAC1B,gBAAM,eAAe,EAAE,SAAS,QAAQ,SAAS,QAAQ;AACzD,cAAI,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK,GAAG;AAC1D,kBAAM,aACJ,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK,KAAK;AAC5D,kBAAM;AAAA,cACJ;AAAA,cACA,KAAK,UAAU,cAAc,MAAM,CAAC;AAAA,YACtC;AACA,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO,EAAE,MAAM,KAAK,QAAQ,UAAU,GAAG,GAAG,aAAa;AAAA,YAC3D;AAAA,UACF;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO;AAAA,UACT;AAAA,QACF;AACA,gBAAQ,WAAW;AAAA,UACjB,QAAQ;AAAA,UACR,SAAS;AAAA,YACP;AAAA,cACE,SAAS;AAAA,cACT,WAAW,6BAA6B;AAAA,YAC1C;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,EAAE,QAAQ,KAAK;AAAA,QACxB;AAAA,MACF;AAAA,MACA,KAAK,SAAS;AACZ;AAAA,UACE,IAAI;AAAA,UACJ;AAAA,QACF;AACA,YAAI,QAAQ,gBAAgB,QAAQ;AAClC,gBAAMC,YACJ,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK;AACvD,cAAI,CAACA,WAAU;AACb,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AACA,gBAAMC,WAAU,KAAK;AAAA,YACnB,MAAM,IAAI,SAAS,KAAK,QAAQD,SAAQ,GAAG,MAAM;AAAA,UACnD;AACA,kDAAwC,UAAUC,QAAO;AACzD,cAAIA,SAAQ,YAAY,OAAOA,SAAQ,aAAa,UAAU;AAC5D,oBAAQ,WAAW;AAAA,cACjB,GAAG,QAAQ;AAAA,cACX,GAAIA,SAAQ;AAAA,YACd;AACA,6CAAiC,KAAK,OAAO;AAAA,UAC/C;AACA;AAAA,YACE,OAAOA,SAAQ,cAAc,WACzBA,SAAQ,YACR;AAAA,UACN;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,EAAE,QAAQ,KAAK;AAAA,UACxB;AAAA,QACF;AAGA,cAAM,YAAY,mBAAmB,MAAM,IAAI,OAAO,YAAY;AAClE,cAAM,cAAc,mBAAmB,MAAM,IAAI,OAAO,cAAc;AACtE,cAAM,UAAU;AAAA,UACd,WAAW;AAAA,UACX,SAAS,4BAA4B,QAAQ;AAAA,UAC7C,cAAc,YAAY,4BAA4B,SAAS,IAAI,CAAC;AAAA,UACpE,gBAAgB,cACZ,4BAA4B,WAAW,IACvC,CAAC;AAAA,UACL,UAAU,QAAQ;AAAA,UAClB,KAAK,IAAI;AAAA,QACX;AACA,cAAM,WAAW,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK;AACtE,YAAI,UAAU;AACZ,gBAAM;AAAA,YACJ;AAAA,YACA,KAAK,UAAU,SAAS,MAAM,CAAC;AAAA,UACjC;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,EAAE,MAAM,KAAK,QAAQ,QAAQ,GAAG,GAAG,QAAQ;AAAA,UACpD;AAAA,QACF;AACA,eAAO,EAAE,MAAM,OAAO,WAAW,QAAQ,WAAW,OAAO,QAAQ;AAAA,MACrE;AAAA,MACA,KAAK,OAAO;AACV,cAAM,WAAW,QAAQ,UAAU,KAAK,KAAK,QAAQ,YAAY,KAAK;AACtE,YAAI,CAAC,UAAU;AACb,gBAAM,IAAI,MAAM,gDAAgD;AAAA,QAClE;AACA,cAAM,MAAM;AAAA,UACV,IAAI;AAAA,UACJ,8BAA8B,SAAS,MAAM,WAAW;AAAA,QAC1D;AACA,cAAM,WAAW,MAAM,0BAA0B,UAAU,GAAG;AAC9D,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO,EAAE,MAAM,UAAU,MAAM,IAAI,WAAW;AAAA,QAChD;AAAA,MACF;AAAA,MACA;AACE,eAAO;AAAA,IACX;AAAA,EACF,CAAC;AACH;AAEA,eAAsB,qCACpB,SACwC;AACxC,SAAO,iBAAiB,YAAY;AAClC,UAAM,KAAK,mCAAmC,OAAO;AACrD,cAAU,0CAA0C,SAAS,OAAO,EAAE;AACtE,UAAM,MAAM,+BAA+B,EAAE;AAC7C,UAAM,MAAM,MAAM,2CAA2C,GAAG;AAChE,UAAM,UAAU,gCAAgC,OAAO,EAAE;AACzD,UAAM,eAAe;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,WAAW,aAAa;AAC9B,UAAM,gBAAgB,MACpB;AAAA,MACE;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,IACF;AAEF,YAAQ,QAAQ,WAAW;AAAA,MACzB,KAAK;AACH,+CAAuC,IAAI,EAAE;AAC7C,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,UAAU;AAAA,YACR;AAAA,YACA,IAAI;AAAA,YACJ,uCAAuC,QAAQ;AAAA,UACjD;AAAA,UACA,OAAO;AAAA,YACL,OAAO,IAAI;AAAA,YACX,KAAK,IAAI;AAAA,UACX;AAAA,QACF;AAAA,MACF,KAAK;AACH,+CAAuC,IAAI,EAAE;AAC7C,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,UAAU;AAAA,YACR;AAAA,YACA,IAAI;AAAA,YACJ,uCAAuC,QAAQ;AAAA,UACjD;AAAA,UACA,OAAO;AAAA,YACL,UAAU,0CAA0C,QAAQ,EAAE;AAAA,cAC5D;AAAA,cACA;AAAA,YACF;AAAA,YACA,OAAO,IAAI;AAAA,YACX,KAAK,IAAI;AAAA,UACX;AAAA,QACF;AAAA,MACF,KAAK,OAAO;AACV,YAAI,QAAQ,YAAY,SAAS;AAC/B,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,IAAI;AAAA,UACb;AAAA,QACF;AACA,YAAI,QAAQ,YAAY,OAAO;AAC7B,iBAAO,EAAE,MAAM,OAAO,WAAW,QAAQ,WAAW,OAAO,IAAI,IAAI;AAAA,QACrE;AACA,YAAI,QAAQ,YAAY,SAAS;AAC/B,cAAI,CAAC,QAAQ,UAAU,KAAK,GAAG;AAC7B,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AACA,gBAAM,kBAAkB;AAAA,YACtB;AAAA,YACA,QAAQ;AAAA,UACV;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,kBACH;AAAA,cACE;AAAA,gBACE;AAAA,kBACE;AAAA,kBACA;AAAA,gBACF;AAAA,cACF;AAAA,YACF,IACA,iCAAiC,UAAU,QAAQ,QAAQ,EACxD;AAAA,UACT;AAAA,QACF;AAEA,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AAEA,YAAI;AACJ,gBAAQ,QAAQ,SAAS;AAAA,UACvB,KAAK;AACH,gBAAI,CAAC,QAAQ,WAAW,KAAK,GAAG;AAC9B,oBAAM,IAAI;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AACA,oBAAQ,QAAQ,aAAa,QAAQ,SAAS;AAC9C;AAAA,UACF,KAAK;AACH,oBAAQ,8BAA8B,OAAO;AAC7C;AAAA,UACF,KAAK;AACH,oBACE,QAAQ,YAAY,UAChB,QAAS,QAA6B,OAAO,IAC7C,QAAQ,YAAY,WAClB,QAAS,QAA8B,QAAQ,IAC/C;AACR;AAAA,UACF,KAAK;AACH,oBACE,cAAc,UACV,CACE,QAKA,WACF;AACN;AAAA,UACF,KAAK;AACH,oBAAQ,QAAQ;AAChB;AAAA,UACF,KAAK;AACH,oBAAQ,iCAAiC,SAAS,IAAI,MAAM;AAC5D;AAAA,UACF,KAAK;AACH,oBAAQ,gCAAgC,OAAO;AAC/C;AAAA,UACF,KAAK;AACH,oBAAQ,iCAAiC,OAAO;AAChD;AAAA,UACF;AACE,oBAAQ,8BAA8B,QAAQ,WAAW;AACzD;AAAA,QACJ;AAEA,eAAO,EAAE,MAAM,OAAO,WAAW,QAAQ,WAAW,MAAM;AAAA,MAC5D;AAAA,MACA,KAAK,QAAQ;AACX,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AAEA,gBAAQ,QAAQ,QAAQ;AAAA,UACtB,KAAK,SAAS;AACZ,kBAAM,QAAQ;AAAA,cACZ;AAAA,cACA;AAAA,YACF;AACA,kBAAM,UAAU;AAChB,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO;AAAA,gBACL,SAAS,MAAM;AAAA,gBACf,UAAU,qCAAqC,KAAK;AAAA,cACtD;AAAA,YACF;AAAA,UACF;AAAA,UACA,KAAK;AACH,mBAAO;AAAA,cACL,GAAI,MAAM;AAAA,gBACR;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,WAAW,QAAQ;AAAA,YACrB;AAAA,UACF,KAAK,QAAQ;AACX,kBAAM,UAAU;AAAA,cACd;AAAA,cACA;AAAA,YACF;AACA,4CAAgC,SAAS,QAAQ,SAAS,EAAE;AAC5D,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO;AAAA,gBACL,UAAU,qCAAqC,OAAO;AAAA,gBACtD,OAAO,QAAQ;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,UACA,KAAK;AACH,gBAAI,OAAQ,QAAwB,UAAU,YAAY;AACxD,cAAC,QAAwB,MAAM;AAAA,YACjC;AACA,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO;AAAA,gBACL,SAAS,SAAS,kBAAkB;AAAA,gBACpC,UAAU,qCAAqC,OAAO;AAAA,cACxD;AAAA,YACF;AAAA,UACF,KAAK;AACH,oBAAQ,aAAa,oBAAoB,MAAM;AAC/C,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,UAAU,qCAAqC,OAAO;AAAA,cACxD;AAAA,YACF;AAAA,UACF,KAAK,QAAQ;AACX,kBAAM,UAAU;AAAA,cACd;AAAA,cACA;AAAA,YACF;AACA;AAAA,cACE;AAAA,cACA,GAAG,QAAQ,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAE;AAAA,YAC9C;AACA,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO;AAAA,gBACL,UAAU,qCAAqC,OAAO;AAAA,gBACtD,OAAO,QAAQ;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,UACA,KAAK,WAAW;AACd,kBAAM,QAAQ;AAAA,cACZ;AAAA,cACA;AAAA,YACF;AACA,kBAAM,UAAU;AAChB,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO;AAAA,gBACL,SAAS,MAAM;AAAA,gBACf,UAAU,qCAAqC,KAAK;AAAA,cACtD;AAAA,YACF;AAAA,UACF;AAAA,UACA,KAAK;AAAA,UACL,KAAK;AACH,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO;AAAA,gBACL,SAAS,qCAAqC,OAAO;AAAA,gBACrD,MAAM,8BAA8B,QAAQ,WAAW;AAAA,cACzD;AAAA,YACF;AAAA,UACF;AACE,kBAAM,IAAI;AAAA,cACR,8CAA8C,QAAQ,MAAM;AAAA,YAC9D;AAAA,QACJ;AAAA,MACF;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,cAAM,QAAQ,sCAAsC,SAAS,OAAO;AACpE,cAAM,UAAU;AAChB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,SAAS,MAAM;AAAA,YACf,UAAU,qCAAqC,KAAK;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK,QAAQ;AACX,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,cAAM,UAAU;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,QACV;AACA,cAAM,YACJ,QAAQ,cAAc,SAClB,GAAG,QAAQ,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAE,KAC3C,QAAQ,SAAS;AACxB,wCAAgC,SAAS,SAAS;AAClD,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,UAAU,qCAAqC,OAAO;AAAA,YACtD,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,YAAI,OAAQ,QAAwB,UAAU,YAAY;AACxD,UAAC,QAAwB,MAAM;AAAA,QACjC;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,SAAS,SAAS,kBAAkB;AAAA,YACpC,UAAU,qCAAqC,OAAO;AAAA,UACxD;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,gBAAQ,aAAa,oBAAoB,MAAM;AAC/C,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,SAAS;AAAA,YACT,UAAU,qCAAqC,OAAO;AAAA,UACxD;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK,gBAAgB;AACnB,cAAM,SAAS,SAAS;AACxB,YACE,CAAC,UACD,EACE,OAAO,YAAY,WACnB,OAAO,YAAY,cACnB,OAAO,YAAY,WAErB;AACA,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,cAAM,UAAU;AAAA,UACd;AAAA,UACA,QAAQ,cAAc,iBAAiB,SAAS;AAAA,QAClD;AACA,cAAM,YACJ,QAAQ,cAAc,iBAClB,GAAG,QAAQ,SAAS,EAAE,GAAG,QAAQ,SAAS,EAAE,KAC3C,QAAQ,SAAS;AACxB,wCAAgC,SAAS,SAAS;AAClD,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,UAAU,qCAAqC,OAAO;AAAA,YACtD,OAAO,QAAQ;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,KAAK,QAAQ,KAAK,KAAK,KAAK;AAAA,YAC5B,UACE,SAAS,iBACT,SAAS,yBAAyB,UAC9B,qCAAqC,SAAS,aAAa,IAC3D;AAAA,UACR;AAAA,QACF;AAAA,MACF,KAAK,SAAS;AACZ,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,eAAO,mCAAmC,KAAK,SAAS,OAAO;AAAA,MACjE;AAAA,MACA,KAAK,YAAY;AACf,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,eAAO,mCAAmC,KAAK,SAAS,UAAU;AAAA,MACpE;AAAA,MACA,KAAK,SAAS;AACZ,cAAM,MAAM,QAAQ,KAAK,KAAK,KAAK;AACnC,cAAM,UAAU,cAAc;AAC9B,cAAM,OAAO,gCAAgC,OAAO;AAEpD,YAAI,QAAQ,WAAW,MAAM;AAC3B,gBAAM,8BAA8B,KAAK,IAAI;AAC7C,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,KAAK,iCAAiC,GAAG;AAAA,YACzC,OAAO,EAAE,KAAK,KAAK,IAAI,IAAI;AAAA,UAC7B;AAAA,QACF;AAEA,eAAO,EAAE,MAAM,OAAO,WAAW,QAAQ,WAAW,OAAO,EAAE,IAAI,EAAE;AAAA,MACrE;AAAA,MACA,KAAK,UAAU;AACb,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL;AAAA,YACA,cAAc;AAAA,YACd,QAAQ,aAAa;AAAA,YACrB,QAAQ,UAAU;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,cAAc;AACjB,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,YAAI,OAAQ,QAAwB,UAAU,YAAY;AACxD,UAAC,QAAwB,MAAM;AAAA,QACjC;AACA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,UAAU;AAAA,YACV,UAAU,qCAAqC,OAAO;AAAA,UACxD;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,UAAU;AACb,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,YAAI,QAAQ,YAAY,UAAU;AAChC,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,cAAM,SAAS;AAAA,UACb;AAAA,UACA;AAAA,QACF;AACA,cAAM,SAAS,MAAM,KAAM,OAA6B,OAAO,EAAE;AAAA,UAC/D,CAAC,UACC,MAAM,WAAW,QAAQ,SAAS,OAClC;AAAA,YACE,MAAM,eAAe;AAAA,YACrB,QAAQ,SAAS;AAAA,YACjB;AAAA,UACF;AAAA,QACJ;AACA,YAAI,CAAC,QAAQ;AACX,gBAAM,IAAI,MAAM,8BAA8B;AAAA,QAChD;AACA,QAAC,OAA6B,QAAQ,OAAO;AAC7C,eAAO,WAAW;AAClB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,UAAU,qCAAqC,MAAM;AAAA,YACrD,OAAQ,OAA6B;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,WAAW;AACd,cAAM,UAAU,cAAc;AAC9B,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AACA,cAAM,QAAQ,sCAAsC,SAAS,SAAS;AACtE,cAAM,UAAU;AAChB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,WAAW,QAAQ;AAAA,UACnB,OAAO;AAAA,YACL,SAAS,MAAM;AAAA,YACf,UAAU,qCAAqC,KAAK;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,sDAA8C,QAAQ,QAAQ,MAAM;AACpE,YACE,CAAC,QAAQ,YACT,CAAC,QAAQ,UACT,CAAC,QAAQ,QACT,CAAC,QAAQ,OACT,CAAC,QAAQ,UACT,OAAO,QAAQ,cAAc,YAC7B,OAAO,SAAS,QAAQ,SAAS,GACjC;AACA,gBAAM,WAAW,KAAK,IAAI,GAAG,QAAQ,SAAS;AAC9C,gBAAM,MAAM,QAAQ;AACpB,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,OAAO,EAAE,SAAS;AAAA,UACpB;AAAA,QACF;AACA,cAAM,YACJ,OAAO,QAAQ,cAAc,YAC7B,OAAO,SAAS,QAAQ,SAAS,IAC7B,KAAK,IAAI,KAAK,QAAQ,SAAS,IAC/B;AACN,cAAM,WAAW,KAAK,IAAI,IAAI;AAE9B,eAAO,KAAK,IAAI,KAAK,UAAU;AAC7B,gBAAM,2CAA2C,GAAG;AACpD,gBAAM,aAAa,0BAA0B,GAAG;AAChD,gBAAM,kBAAkB,WAAW,OAAO;AAE1C,gBAAM,kBAAkB,QAAQ,UAAU,KAAK,KAC1C,MAAM;AACL,kBAAM,QAAQ;AAAA,cACZ;AAAA,cACA,QAAQ;AAAA,cACR;AAAA,cACA;AAAA,YACF;AACA,gBAAI,QAAQ,UAAU,UAAU;AAC9B,qBAAO,CAAC,SAAS,CAAC,iCAAiC,KAAK;AAAA,YAC1D;AACA,mBAAO,QAAQ,iCAAiC,KAAK,IAAI;AAAA,UAC3D,GAAG,IACH;AACJ,gBAAM,cAAc,QAAQ,UACvB,MAAM;AACL,kBAAM,QAAQ;AAAA,cACZ;AAAA,cACA;AAAA,YACF;AACA,mBAAO,QAAQ,UAAU,WAAW,CAAC,QAAQ,QAAQ,KAAK;AAAA,UAC5D,GAAG,IACH;AACJ,gBAAM,cAAc,QAAQ,MAAM,KAAK,IACnC;AAAA,YACE,gBAAgB,MAAM;AAAA,UACxB,EAAE,SAAS,QAAQ,KAAK,KAAK,CAAC,IAC9B;AACJ,gBAAM,aAAa,QAAQ,KAAK,KAAK,IACjC,IAAI,IAAI,SAAS,QAAQ,IAAI,KAAK,CAAC,IACnC;AAEJ,cACE,mBACA,eACA,eACA,cACC,CAAC,QAAQ,YACR,CAAC,QAAQ,UACT,CAAC,QAAQ,QACT,CAAC,QAAQ,KACX;AACA,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,QAAQ;AAAA,cACnB,OAAO;AAAA,gBACL,QAAQ,QAAQ,UAAU;AAAA,gBAC1B,UAAU,QAAQ,YAAY;AAAA,gBAC9B,OAAO,QAAQ,SAAS;AAAA,gBACxB,MAAM,QAAQ,QAAQ;AAAA,gBACtB,KAAK,IAAI;AAAA,cACX;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,MAAM,wBAAwB;AAAA,QACtC;AAEA,cAAM,IAAI,MAAM,oDAAoD;AAAA,MACtE;AAAA,MACA;AACE,cAAM,IAAI;AAAA,UACR,gDAAgD,QAAQ,SAAS;AAAA,QACnE;AAAA,IACJ;AAAA,EACF,CAAC;AACH;","names":["target","baseline","filePath","payload"]}
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
*
|
|
16
16
|
* This file re-exports every public symbol so external consumers are unaffected.
|
|
17
17
|
*/
|
|
18
|
-
export { BROWSER_WORKSPACE_CONNECTOR_AUTH_STATES } from "./browser-workspace-types.js";
|
|
19
18
|
export type { AcquireBrowserWorkspaceConnectorSessionRequest, BrowserWorkspaceBridgeConfig, BrowserWorkspaceClipboardAction, BrowserWorkspaceCommand, BrowserWorkspaceCommandResult, BrowserWorkspaceConnectorAuthState, BrowserWorkspaceConnectorCompanionRef, BrowserWorkspaceConnectorSessionHandle, BrowserWorkspaceConnectorSessionKind, BrowserWorkspaceConnectorSessionRef, BrowserWorkspaceConsoleAction, BrowserWorkspaceCookieAction, BrowserWorkspaceDialogAction, BrowserWorkspaceDiffAction, BrowserWorkspaceDomElementSummary, BrowserWorkspaceFindAction, BrowserWorkspaceFindBy, BrowserWorkspaceFrameAction, BrowserWorkspaceGetMode, BrowserWorkspaceMode, BrowserWorkspaceMouseAction, BrowserWorkspaceMouseButton, BrowserWorkspaceNetworkAction, BrowserWorkspaceOperation, BrowserWorkspaceProfilerAction, BrowserWorkspaceScrollDirection, BrowserWorkspaceSetAction, BrowserWorkspaceSnapshot, BrowserWorkspaceStateAction, BrowserWorkspaceStorageAction, BrowserWorkspaceStorageArea, BrowserWorkspaceSubaction, BrowserWorkspaceTab, BrowserWorkspaceTabAction, BrowserWorkspaceTabKind, BrowserWorkspaceTraceAction, BrowserWorkspaceWaitState, BrowserWorkspaceWindowAction, EvaluateBrowserWorkspaceTabRequest, NavigateBrowserWorkspaceTabRequest, OpenBrowserWorkspaceTabRequest, } from "./browser-workspace-types.js";
|
|
19
|
+
export { BROWSER_WORKSPACE_CONNECTOR_AUTH_STATES } from "./browser-workspace-types.js";
|
|
20
20
|
import type { AcquireBrowserWorkspaceConnectorSessionRequest, BrowserWorkspaceCommand, BrowserWorkspaceCommandResult, BrowserWorkspaceConnectorSessionHandle, BrowserWorkspaceMode, BrowserWorkspaceSnapshot, BrowserWorkspaceTab, EvaluateBrowserWorkspaceTabRequest, NavigateBrowserWorkspaceTabRequest, OpenBrowserWorkspaceTabRequest } from "./browser-workspace-types.js";
|
|
21
21
|
export { __resetBrowserWorkspaceStateForTests } from "./browser-workspace-state.js";
|
|
22
22
|
import { getBrowserWorkspaceUnavailableMessage, isBrowserWorkspaceBridgeConfigured, resolveBrowserWorkspaceBridgeConfig } from "./browser-workspace-desktop.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-workspace.d.ts","sourceRoot":"","sources":["../../src/workspace/browser-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"browser-workspace.d.ts","sourceRoot":"","sources":["../../src/workspace/browser-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,YAAY,EACV,8CAA8C,EAC9C,4BAA4B,EAC5B,+BAA+B,EAC/B,uBAAuB,EACvB,6BAA6B,EAC7B,kCAAkC,EAClC,qCAAqC,EACrC,sCAAsC,EACtC,oCAAoC,EACpC,mCAAmC,EACnC,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,0BAA0B,EAC1B,iCAAiC,EACjC,0BAA0B,EAC1B,sBAAsB,EACtB,2BAA2B,EAC3B,uBAAuB,EACvB,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,6BAA6B,EAC7B,yBAAyB,EACzB,8BAA8B,EAC9B,+BAA+B,EAC/B,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,EAC3B,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC3B,yBAAyB,EACzB,4BAA4B,EAC5B,kCAAkC,EAClC,kCAAkC,EAClC,8BAA8B,GAC/B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,uCAAuC,EAAE,MAAM,8BAA8B,CAAC;AAEvF,OAAO,KAAK,EACV,8CAA8C,EAC9C,uBAAuB,EACvB,6BAA6B,EAG7B,sCAAsC,EAEtC,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EAEnB,kCAAkC,EAClC,kCAAkC,EAClC,8BAA8B,EAC/B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,oCAAoC,EAAE,MAAM,8BAA8B,CAAC;AAGpF,OAAO,EAIL,qCAAqC,EAGrC,kCAAkC,EAGlC,mCAAmC,EAGpC,MAAM,gCAAgC,CAAC;AAgBxC,OAAO,EACL,qCAAqC,EACrC,kCAAkC,EAClC,mCAAmC,GACpC,CAAC;AAoDF,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,oBAAoB,CAEtB;AAED,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAkHD,wBAAsB,uCAAuC,CAC3D,OAAO,EAAE,8CAA8C,EACvD,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,sCAAsC,CAAC,CAqGjD;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,wBAAwB,CAAC,CAKnC;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAmBhC;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,EACvC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,mBAAmB,CAAC,CAqD9B;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,EAC3C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,mBAAmB,CAAC,CAkD9B;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,MAAM,EACV,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,mBAAmB,CAAC,CAuB9B;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,MAAM,EACV,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,mBAAmB,CAAC,CAyB9B;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,MAAM,EACV,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,kCAAkC,EAC3C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,MAAM,EACV,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAE3B;AAMD,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,uBAAuB,EAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,6BAA6B,CAAC,CAuhBxC"}
|