visionclaw 0.1.195-beta.1 → 0.1.195-dev.feat-e2e-test-system.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/command-handlers.d.ts.map +1 -1
- package/dist/agent/command-handlers.js +17 -0
- package/dist/agent/command-handlers.js.map +1 -1
- package/dist/builtin-skills/catalog/equity-research/SKILL.md +256 -0
- package/dist/builtin-skills/catalog/financial-modeling/SKILL.md +186 -0
- package/dist/builtin-skills/catalog/investment-banking/SKILL.md +213 -0
- package/dist/builtin-skills/catalog/private-equity/SKILL.md +282 -0
- package/dist/builtin-skills/catalog/wealth-management/SKILL.md +252 -0
- package/dist/channels/interface.d.ts +9 -0
- package/dist/channels/interface.d.ts.map +1 -1
- package/dist/channels/manager.d.ts.map +1 -1
- package/dist/channels/manager.js +3 -0
- package/dist/channels/manager.js.map +1 -1
- package/dist/channels/telegram.d.ts.map +1 -1
- package/dist/channels/telegram.js +7 -1
- package/dist/channels/telegram.js.map +1 -1
- package/dist/config/types.d.ts +6 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +10 -0
- package/dist/config/types.js.map +1 -1
- package/dist/e2e/artifacts.d.ts +8 -0
- package/dist/e2e/artifacts.d.ts.map +1 -0
- package/dist/e2e/artifacts.js +35 -0
- package/dist/e2e/artifacts.js.map +1 -0
- package/dist/e2e/cleanup.d.ts +8 -0
- package/dist/e2e/cleanup.d.ts.map +1 -0
- package/dist/e2e/cleanup.js +108 -0
- package/dist/e2e/cleanup.js.map +1 -0
- package/dist/e2e/cli.d.ts +4 -0
- package/dist/e2e/cli.d.ts.map +1 -0
- package/dist/e2e/cli.js +16 -0
- package/dist/e2e/cli.js.map +1 -0
- package/dist/e2e/index.d.ts +5 -0
- package/dist/e2e/index.d.ts.map +1 -0
- package/dist/e2e/index.js +4 -0
- package/dist/e2e/index.js.map +1 -0
- package/dist/e2e/local-test-server.d.ts +7 -0
- package/dist/e2e/local-test-server.d.ts.map +1 -0
- package/dist/e2e/local-test-server.js +75 -0
- package/dist/e2e/local-test-server.js.map +1 -0
- package/dist/e2e/oauth-setup-store.d.ts +28 -0
- package/dist/e2e/oauth-setup-store.d.ts.map +1 -0
- package/dist/e2e/oauth-setup-store.js +56 -0
- package/dist/e2e/oauth-setup-store.js.map +1 -0
- package/dist/e2e/parser.d.ts +4 -0
- package/dist/e2e/parser.d.ts.map +1 -0
- package/dist/e2e/parser.js +52 -0
- package/dist/e2e/parser.js.map +1 -0
- package/dist/e2e/registry.d.ts +3 -0
- package/dist/e2e/registry.d.ts.map +1 -0
- package/dist/e2e/registry.js +44 -0
- package/dist/e2e/registry.js.map +1 -0
- package/dist/e2e/reporter.d.ts +6 -0
- package/dist/e2e/reporter.d.ts.map +1 -0
- package/dist/e2e/reporter.js +56 -0
- package/dist/e2e/reporter.js.map +1 -0
- package/dist/e2e/runner.d.ts +4 -0
- package/dist/e2e/runner.d.ts.map +1 -0
- package/dist/e2e/runner.js +116 -0
- package/dist/e2e/runner.js.map +1 -0
- package/dist/e2e/setup-google-guest.d.ts +19 -0
- package/dist/e2e/setup-google-guest.d.ts.map +1 -0
- package/dist/e2e/setup-google-guest.js +205 -0
- package/dist/e2e/setup-google-guest.js.map +1 -0
- package/dist/e2e/suite-utils.d.ts +19 -0
- package/dist/e2e/suite-utils.d.ts.map +1 -0
- package/dist/e2e/suite-utils.js +60 -0
- package/dist/e2e/suite-utils.js.map +1 -0
- package/dist/e2e/suites/agent.d.ts +3 -0
- package/dist/e2e/suites/agent.d.ts.map +1 -0
- package/dist/e2e/suites/agent.js +33 -0
- package/dist/e2e/suites/agent.js.map +1 -0
- package/dist/e2e/suites/browser.d.ts +3 -0
- package/dist/e2e/suites/browser.d.ts.map +1 -0
- package/dist/e2e/suites/browser.js +68 -0
- package/dist/e2e/suites/browser.js.map +1 -0
- package/dist/e2e/suites/cua.d.ts +3 -0
- package/dist/e2e/suites/cua.d.ts.map +1 -0
- package/dist/e2e/suites/cua.js +78 -0
- package/dist/e2e/suites/cua.js.map +1 -0
- package/dist/e2e/suites/google.d.ts +3 -0
- package/dist/e2e/suites/google.d.ts.map +1 -0
- package/dist/e2e/suites/google.js +145 -0
- package/dist/e2e/suites/google.js.map +1 -0
- package/dist/e2e/suites/memory.d.ts +3 -0
- package/dist/e2e/suites/memory.d.ts.map +1 -0
- package/dist/e2e/suites/memory.js +50 -0
- package/dist/e2e/suites/memory.js.map +1 -0
- package/dist/e2e/suites/obs.d.ts +3 -0
- package/dist/e2e/suites/obs.d.ts.map +1 -0
- package/dist/e2e/suites/obs.js +29 -0
- package/dist/e2e/suites/obs.js.map +1 -0
- package/dist/e2e/suites/self.d.ts +3 -0
- package/dist/e2e/suites/self.d.ts.map +1 -0
- package/dist/e2e/suites/self.js +65 -0
- package/dist/e2e/suites/self.js.map +1 -0
- package/dist/e2e/suites/upgrade.d.ts +3 -0
- package/dist/e2e/suites/upgrade.d.ts.map +1 -0
- package/dist/e2e/suites/upgrade.js +31 -0
- package/dist/e2e/suites/upgrade.js.map +1 -0
- package/dist/e2e/types.d.ts +91 -0
- package/dist/e2e/types.d.ts.map +1 -0
- package/dist/e2e/types.js +2 -0
- package/dist/e2e/types.js.map +1 -0
- package/dist/index.js.map +1 -1
- package/dist-agent/bundle.cjs +31839 -30032
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/e2e/suites/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,CAAC,MAAM,UAAU,GAAa;IAClC,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,OAAO;IACb,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG;YACZ,MAAM,OAAO,CAAC,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,GAAG,EAAE;gBACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACzC,MAAM,QAAQ,GACZ,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;oBAC9D,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;oBACtD,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;oBACxD,CAAC,QAAQ,KAAK,cAAc,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACtE,IAAI,CAAC,QAAQ;oBAAE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACnG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,QAAQ,aAAa,CAAC,CAAC,CAAC;YAChE,CAAC,CAAC;YACF,MAAM,OAAO,CAAC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,GAAG,EAAE;gBACvE,gBAAgB,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC;YACF,MAAM,OAAO,CAAC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,GAAG,EAAE;gBACtE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC7D,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,CAAC;gBAC5F,CAAC;gBACD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC,CAAC;YAC7F,CAAC,CAAC;SACH,CAAC;QACF,OAAO,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/browser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,YAAY,EAAE,QA0D1B,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { chromium } from "playwright";
|
|
4
|
+
import { ensureBrowser, getCdpEndpoint } from "../../agent/browser-launcher.js";
|
|
5
|
+
import { startLocalTestServer } from "../local-test-server.js";
|
|
6
|
+
import { buildSuiteResult, ok, runTest, skipped } from "../suite-utils.js";
|
|
7
|
+
export const browserSuite = {
|
|
8
|
+
id: "browser",
|
|
9
|
+
name: "Browser",
|
|
10
|
+
run: async (context) => {
|
|
11
|
+
const started = Date.now();
|
|
12
|
+
const localServer = await startLocalTestServer();
|
|
13
|
+
const tests = [];
|
|
14
|
+
try {
|
|
15
|
+
tests.push(await runTest("browser", "browser.ensure_browser", "Ensure browser", async () => {
|
|
16
|
+
await ensureBrowser();
|
|
17
|
+
return ok("Browser ensured");
|
|
18
|
+
}));
|
|
19
|
+
tests.push(await runTest("browser", "browser.local_page", "Local page interaction", async () => {
|
|
20
|
+
const browser = await chromium.connectOverCDP(getCdpEndpoint());
|
|
21
|
+
try {
|
|
22
|
+
const contextObj = browser.contexts()[0] ?? await browser.newContext();
|
|
23
|
+
const page = contextObj.pages()[0] ?? await contextObj.newPage();
|
|
24
|
+
await page.goto(`${localServer.baseUrl}/e2e/browser?runId=${context.runId}`);
|
|
25
|
+
await page.fill("#text-input", `VisionClaw E2E ${context.runId}`);
|
|
26
|
+
await page.click("#click-button");
|
|
27
|
+
await page.check("#checkbox");
|
|
28
|
+
const result = await page.locator("#result").textContent();
|
|
29
|
+
if (result !== "checked")
|
|
30
|
+
throw new Error(`Unexpected result: ${result ?? "null"}`);
|
|
31
|
+
return ok("Local page interactions succeeded");
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
await browser.close();
|
|
35
|
+
}
|
|
36
|
+
}));
|
|
37
|
+
tests.push(await runTest("browser", "browser.screenshot", "Screenshot", async () => {
|
|
38
|
+
const browser = await chromium.connectOverCDP(getCdpEndpoint());
|
|
39
|
+
try {
|
|
40
|
+
const page = browser.contexts()[0].pages().at(0);
|
|
41
|
+
if (page === undefined)
|
|
42
|
+
return skipped("No Playwright page available");
|
|
43
|
+
const screenshotPath = path.join(context.artifactsDir, "browser-screenshot.png");
|
|
44
|
+
await page.screenshot({ path: screenshotPath });
|
|
45
|
+
if (!fs.existsSync(screenshotPath))
|
|
46
|
+
throw new Error("Screenshot not saved");
|
|
47
|
+
return ok("Screenshot captured", { screenshotPath });
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
await browser.close();
|
|
51
|
+
}
|
|
52
|
+
}));
|
|
53
|
+
if (context.mode === "full") {
|
|
54
|
+
tests.push(await runTest("browser", "browser.network", "Network capture", async () => {
|
|
55
|
+
const resp = await fetch(`${localServer.baseUrl}/api/echo?runId=${context.runId}`);
|
|
56
|
+
if (!resp.ok)
|
|
57
|
+
throw new Error(`Echo endpoint failed: ${resp.status}`);
|
|
58
|
+
return ok("Network request succeeded");
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
await localServer.close();
|
|
64
|
+
}
|
|
65
|
+
return buildSuiteResult("browser", "Browser", started, tests);
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/e2e/suites/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cua.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/cua.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,QAAQ,EAAE,QAmEtB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { chromium } from "playwright";
|
|
4
|
+
import { ensureBrowser, getCdpEndpoint } from "../../agent/browser-launcher.js";
|
|
5
|
+
import { captureScreen, click, initDisplaySize, isDisplaySizeInitialized, typeText, } from "../../tools/desktop-executor-factory.js";
|
|
6
|
+
import { startLocalTestServer } from "../local-test-server.js";
|
|
7
|
+
import { buildSuiteResult, ok, runTest, skipped, warning } from "../suite-utils.js";
|
|
8
|
+
export const cuaSuite = {
|
|
9
|
+
id: "cua",
|
|
10
|
+
name: "CUA",
|
|
11
|
+
run: async (context) => {
|
|
12
|
+
const started = Date.now();
|
|
13
|
+
const localServer = await startLocalTestServer();
|
|
14
|
+
const tests = [];
|
|
15
|
+
try {
|
|
16
|
+
tests.push(await runTest("cua", "cua.display_size", "Display size", async () => {
|
|
17
|
+
if (!isDisplaySizeInitialized()) {
|
|
18
|
+
try {
|
|
19
|
+
await initDisplaySize();
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
return skipped(`Display size unavailable: ${err instanceof Error ? err.message : String(err)}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return ok("Display size ready");
|
|
26
|
+
}));
|
|
27
|
+
tests.push(await runTest("cua", "cua.screenshot", "Screenshot", async () => {
|
|
28
|
+
const shot = await captureScreen();
|
|
29
|
+
if (!shot.base64)
|
|
30
|
+
throw new Error("Screenshot empty");
|
|
31
|
+
const screenshotPath = path.join(context.artifactsDir, "cua-screenshot.png");
|
|
32
|
+
fs.writeFileSync(screenshotPath, Buffer.from(shot.base64, "base64"));
|
|
33
|
+
return ok("Screenshot captured", { screenshotPath });
|
|
34
|
+
}));
|
|
35
|
+
tests.push(await runTest("cua", "cua.open_local_page", "Open local page", async () => {
|
|
36
|
+
await ensureBrowser();
|
|
37
|
+
const browser = await chromium.connectOverCDP(getCdpEndpoint());
|
|
38
|
+
try {
|
|
39
|
+
const contextObj = browser.contexts()[0] ?? await browser.newContext();
|
|
40
|
+
const page = contextObj.pages()[0] ?? await contextObj.newPage();
|
|
41
|
+
await page.goto(`${localServer.baseUrl}/e2e/cua?runId=${context.runId}`);
|
|
42
|
+
return ok("Local CUA page opened");
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
await browser.close();
|
|
46
|
+
}
|
|
47
|
+
}));
|
|
48
|
+
tests.push(await runTest("cua", "cua.click_and_type", "Click and type", async () => {
|
|
49
|
+
if (!isDisplaySizeInitialized()) {
|
|
50
|
+
return skipped("Display size not initialized; grant Accessibility and Screen Recording permissions");
|
|
51
|
+
}
|
|
52
|
+
const browser = await chromium.connectOverCDP(getCdpEndpoint());
|
|
53
|
+
try {
|
|
54
|
+
const page = browser.contexts()[0]?.pages().find((p) => p.url().includes("/e2e/cua"));
|
|
55
|
+
if (!page)
|
|
56
|
+
return skipped("CUA test page not open");
|
|
57
|
+
const box = await page.locator("#text-input").boundingBox();
|
|
58
|
+
if (!box)
|
|
59
|
+
return warning("Could not resolve input bounding box");
|
|
60
|
+
await click(Math.round(box.x + box.width / 2), Math.round(box.y + box.height / 2));
|
|
61
|
+
await typeText(`VisionClaw E2E ${context.runId}`);
|
|
62
|
+
const value = await page.inputValue("#text-input");
|
|
63
|
+
if (!value.includes(context.runId))
|
|
64
|
+
throw new Error("Typed value not reflected in page");
|
|
65
|
+
return ok("CUA click/type verified via Playwright");
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
await browser.close();
|
|
69
|
+
}
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
await localServer.close();
|
|
74
|
+
}
|
|
75
|
+
return buildSuiteResult("cua", "CUA", started, tests);
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=cua.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cua.js","sourceRoot":"","sources":["../../../src/e2e/suites/cua.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/google.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAc,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOxD,eAAO,MAAM,WAAW,EAAE,QAmIzB,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import { GoogleCalendarClient } from "../../calendar/google-calendar.js";
|
|
5
|
+
import { GmailEmailClient } from "../../email/gmail-email.js";
|
|
6
|
+
import { GoogleDriveClient } from "../../drive/google-drive.js";
|
|
7
|
+
import { hasLocalGoogleRefreshToken } from "../../google/token-file.js";
|
|
8
|
+
import { createGuestCalendarClient, loadE2EGuestTokens } from "../setup-google-guest.js";
|
|
9
|
+
import { buildSuiteResult, ok, runTest, skipped, warning } from "../suite-utils.js";
|
|
10
|
+
function guestEmail(context) {
|
|
11
|
+
return context.config.e2e?.google?.meetGuestEmail ?? process.env.E2E_GOOGLE_MEET_GUEST_EMAIL;
|
|
12
|
+
}
|
|
13
|
+
export const googleSuite = {
|
|
14
|
+
id: "google",
|
|
15
|
+
name: "Google Workspace",
|
|
16
|
+
run: async (context) => {
|
|
17
|
+
const started = Date.now();
|
|
18
|
+
const full = context.mode === "full" || context.mode === "google";
|
|
19
|
+
const marker = `VisionClaw E2E ${context.runId}`;
|
|
20
|
+
const tests = [];
|
|
21
|
+
if (!hasLocalGoogleRefreshToken()) {
|
|
22
|
+
tests.push(await runTest("google", "google.auth", "Google auth", () => Promise.resolve(skipped("Google tokens missing"))));
|
|
23
|
+
return buildSuiteResult("google", "Google Workspace", started, tests);
|
|
24
|
+
}
|
|
25
|
+
tests.push(await runTest("google", "google.gmail.list", "Gmail list", async () => {
|
|
26
|
+
const client = new GmailEmailClient(context.config);
|
|
27
|
+
const emails = await client.listEmails({ maxResults: 1 });
|
|
28
|
+
return ok(`Listed ${emails.length} email(s)`);
|
|
29
|
+
}));
|
|
30
|
+
tests.push(await runTest("google", "google.calendar.list", "Calendar list", async () => {
|
|
31
|
+
const client = new GoogleCalendarClient(context.config);
|
|
32
|
+
const now = new Date();
|
|
33
|
+
const events = await client.listUpcomingEvents(now, new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000), 5);
|
|
34
|
+
return ok(`Listed ${events.length} event(s)`);
|
|
35
|
+
}));
|
|
36
|
+
tests.push(await runTest("google", "google.drive.list", "Drive list", async () => {
|
|
37
|
+
const client = new GoogleDriveClient(context.config);
|
|
38
|
+
const files = await client.listFiles({ maxResults: 5 });
|
|
39
|
+
return ok(`Listed ${files.length} file(s)`);
|
|
40
|
+
}));
|
|
41
|
+
if (full) {
|
|
42
|
+
let messageId;
|
|
43
|
+
tests.push(await runTest("google", "google.gmail.send_search_read", "Gmail send/search/read", async () => {
|
|
44
|
+
const client = new GmailEmailClient(context.config);
|
|
45
|
+
const sent = await client.sendEmail({
|
|
46
|
+
to: context.config.gmail,
|
|
47
|
+
subject: marker,
|
|
48
|
+
body: `${marker}\nPlease ignore.`,
|
|
49
|
+
});
|
|
50
|
+
messageId = sent.id;
|
|
51
|
+
if (!messageId)
|
|
52
|
+
throw new Error("Send did not return message id");
|
|
53
|
+
context.addCleanupItem({ type: "gmail_message", id: messageId, suite: "google" });
|
|
54
|
+
const found = await client.listEmails({ query: `subject:"${marker}"`, maxResults: 5 });
|
|
55
|
+
if (found.length === 0)
|
|
56
|
+
throw new Error("Sent email not found");
|
|
57
|
+
const detail = await client.getEmail(found[0].id);
|
|
58
|
+
if (!detail.bodyText?.includes(marker))
|
|
59
|
+
throw new Error("Email body mismatch");
|
|
60
|
+
return ok("Gmail roundtrip succeeded");
|
|
61
|
+
}));
|
|
62
|
+
let eventId;
|
|
63
|
+
let hangoutLink;
|
|
64
|
+
tests.push(await runTest("google", "google.calendar.create_update_delete", "Calendar CRUD", async () => {
|
|
65
|
+
const client = new GoogleCalendarClient(context.config);
|
|
66
|
+
const start = new Date(Date.now() + 10 * 60 * 1000);
|
|
67
|
+
const end = new Date(start.getTime() + 15 * 60 * 1000);
|
|
68
|
+
const created = await client.createEvent({
|
|
69
|
+
summary: marker,
|
|
70
|
+
description: marker,
|
|
71
|
+
start,
|
|
72
|
+
end,
|
|
73
|
+
});
|
|
74
|
+
eventId = created.id ?? undefined;
|
|
75
|
+
if (!eventId)
|
|
76
|
+
throw new Error("Calendar event id missing");
|
|
77
|
+
context.addCleanupItem({ type: "calendar_event", id: eventId, suite: "google" });
|
|
78
|
+
await client.updateEvent(eventId, { summary: `${marker} updated` });
|
|
79
|
+
return ok("Calendar create/update succeeded", { eventId });
|
|
80
|
+
}));
|
|
81
|
+
tests.push(await runTest("google", "google.calendar.guest_can_see_event", "Guest can see meeting", async () => {
|
|
82
|
+
const email = guestEmail(context);
|
|
83
|
+
if (!email)
|
|
84
|
+
return skipped("Guest email not configured");
|
|
85
|
+
if (!loadE2EGuestTokens())
|
|
86
|
+
return skipped("Guest OAuth token missing; run e2e setup google-guest");
|
|
87
|
+
const owner = new GoogleCalendarClient(context.config);
|
|
88
|
+
const start = new Date(Date.now() + 20 * 60 * 1000);
|
|
89
|
+
const end = new Date(start.getTime() + 15 * 60 * 1000);
|
|
90
|
+
const created = await owner.createEvent({
|
|
91
|
+
summary: `${marker} Meeting`,
|
|
92
|
+
description: marker,
|
|
93
|
+
start,
|
|
94
|
+
end,
|
|
95
|
+
attendees: [email],
|
|
96
|
+
});
|
|
97
|
+
eventId = created.id ?? eventId;
|
|
98
|
+
hangoutLink = created.hangoutLink ?? undefined;
|
|
99
|
+
if (eventId)
|
|
100
|
+
context.addCleanupItem({ type: "calendar_event", id: eventId, suite: "google" });
|
|
101
|
+
if (!hangoutLink)
|
|
102
|
+
throw new Error("Meet link not generated");
|
|
103
|
+
const guestCalendar = createGuestCalendarClient(context.config);
|
|
104
|
+
if (!guestCalendar)
|
|
105
|
+
return skipped("Guest calendar client unavailable");
|
|
106
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
107
|
+
const res = await guestCalendar.events.list({
|
|
108
|
+
calendarId: "primary",
|
|
109
|
+
timeMin: start.toISOString(),
|
|
110
|
+
timeMax: new Date(end.getTime() + 60 * 60 * 1000).toISOString(),
|
|
111
|
+
q: marker,
|
|
112
|
+
singleEvents: true,
|
|
113
|
+
});
|
|
114
|
+
const guestEvents = res.data.items ?? [];
|
|
115
|
+
if (guestEvents.length === 0)
|
|
116
|
+
throw new Error("Guest cannot see invited event");
|
|
117
|
+
return ok("Guest can see invited event", { eventId, hasMeetLink: !!hangoutLink });
|
|
118
|
+
}));
|
|
119
|
+
tests.push(await runTest("google", "google.meet.guest_can_open_join_page", "Guest Meet page", () => {
|
|
120
|
+
if (!hangoutLink)
|
|
121
|
+
return Promise.resolve(skipped("Meet link unavailable from previous test"));
|
|
122
|
+
const profileDir = context.config.e2e?.google?.meetGuestBrowserProfileDir;
|
|
123
|
+
if (!profileDir)
|
|
124
|
+
return Promise.resolve(warning("Guest browser profile not configured; skipping Meet page verification"));
|
|
125
|
+
return Promise.resolve(warning("Guest browser profile verification not automated in v1"));
|
|
126
|
+
}));
|
|
127
|
+
tests.push(await runTest("google", "google.drive.crud", "Drive CRUD", async () => {
|
|
128
|
+
const client = new GoogleDriveClient(context.config);
|
|
129
|
+
const folder = await client.createFolder({ name: marker });
|
|
130
|
+
const tmpFile = path.join(os.tmpdir(), `${context.runId}.txt`);
|
|
131
|
+
fs.writeFileSync(tmpFile, marker, "utf-8");
|
|
132
|
+
context.addCleanupItem({ type: "local_file", id: tmpFile, suite: "google" });
|
|
133
|
+
context.addCleanupItem({ type: "drive_file", id: folder.id, suite: "google", details: { role: "folder" } });
|
|
134
|
+
const uploaded = await client.uploadFile({ localPath: tmpFile, folderId: folder.id, name: `${marker}.txt` });
|
|
135
|
+
context.addCleanupItem({ type: "drive_file", id: uploaded.id, suite: "google", details: { role: "file" } });
|
|
136
|
+
const listed = await client.listFiles({ query: `name contains '${marker}'` });
|
|
137
|
+
if (listed.length === 0)
|
|
138
|
+
throw new Error("Uploaded file not found");
|
|
139
|
+
return ok("Drive CRUD succeeded");
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
142
|
+
return buildSuiteResult("google", "Google Workspace", started, tests);
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=google.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../../src/e2e/suites/google.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/memory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,WAAW,EAAE,QA2CzB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { executeMemoryCommand } from "../../tools/memory.js";
|
|
2
|
+
import { buildSuiteResult, ok, runTest } from "../suite-utils.js";
|
|
3
|
+
export const memorySuite = {
|
|
4
|
+
id: "memory",
|
|
5
|
+
name: "Memory",
|
|
6
|
+
run: async (context) => {
|
|
7
|
+
const started = Date.now();
|
|
8
|
+
const memoryPath = `/memories/e2e-${context.runId}.txt`;
|
|
9
|
+
const marker = `VisionClaw E2E ${context.runId}`;
|
|
10
|
+
const tests = [
|
|
11
|
+
await runTest("memory", "memory.create", "Create memory file", () => {
|
|
12
|
+
const result = executeMemoryCommand({ command: "create", path: memoryPath, file_text: marker });
|
|
13
|
+
if (result.isError)
|
|
14
|
+
throw new Error(result.content[0]?.type === "text" ? result.content[0].text : "create failed");
|
|
15
|
+
return Promise.resolve(ok("Memory file created"));
|
|
16
|
+
}),
|
|
17
|
+
await runTest("memory", "memory.view", "View memory file", () => {
|
|
18
|
+
const result = executeMemoryCommand({ command: "view", path: memoryPath });
|
|
19
|
+
const text = result.content[0]?.type === "text" ? result.content[0].text : "";
|
|
20
|
+
if (!text.includes(marker))
|
|
21
|
+
throw new Error("Memory view mismatch");
|
|
22
|
+
return Promise.resolve(ok("Memory view succeeded"));
|
|
23
|
+
}),
|
|
24
|
+
await runTest("memory", "memory.str_replace", "Replace memory content", () => {
|
|
25
|
+
const updated = `${marker} updated`;
|
|
26
|
+
const result = executeMemoryCommand({
|
|
27
|
+
command: "str_replace",
|
|
28
|
+
path: memoryPath,
|
|
29
|
+
old_str: marker,
|
|
30
|
+
new_str: updated,
|
|
31
|
+
});
|
|
32
|
+
if (result.isError)
|
|
33
|
+
throw new Error("str_replace failed");
|
|
34
|
+
const view = executeMemoryCommand({ command: "view", path: memoryPath });
|
|
35
|
+
const text = view.content[0]?.type === "text" ? view.content[0].text : "";
|
|
36
|
+
if (!text.includes("updated"))
|
|
37
|
+
throw new Error("Updated content not found");
|
|
38
|
+
return Promise.resolve(ok("Memory replace succeeded"));
|
|
39
|
+
}),
|
|
40
|
+
await runTest("memory", "memory.delete", "Delete memory file", () => {
|
|
41
|
+
const result = executeMemoryCommand({ command: "delete", path: memoryPath });
|
|
42
|
+
if (result.isError)
|
|
43
|
+
throw new Error("delete failed");
|
|
44
|
+
return Promise.resolve(ok("Memory delete succeeded"));
|
|
45
|
+
}),
|
|
46
|
+
];
|
|
47
|
+
return buildSuiteResult("memory", "Memory", started, tests);
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/e2e/suites/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obs.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/obs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,QAAQ,EAAE,QAuBtB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { startObsServer } from "../../obs/server.js";
|
|
2
|
+
import { buildSuiteResult, ok, runTest } from "../suite-utils.js";
|
|
3
|
+
export const obsSuite = {
|
|
4
|
+
id: "obs",
|
|
5
|
+
name: "Observability",
|
|
6
|
+
run: async (context) => {
|
|
7
|
+
const started = Date.now();
|
|
8
|
+
const tests = [
|
|
9
|
+
await runTest("obs", "obs.local_health", "OBS local health", async () => {
|
|
10
|
+
const server = startObsServer({
|
|
11
|
+
host: "127.0.0.1",
|
|
12
|
+
port: 0,
|
|
13
|
+
config: context.config,
|
|
14
|
+
});
|
|
15
|
+
try {
|
|
16
|
+
const resp = await fetch(`http://127.0.0.1:${server.port}/obs/status`);
|
|
17
|
+
if (!resp.ok)
|
|
18
|
+
throw new Error(`OBS status failed: ${resp.status}`);
|
|
19
|
+
return ok("OBS local health endpoint reachable", { port: server.port });
|
|
20
|
+
}
|
|
21
|
+
finally {
|
|
22
|
+
await server.close();
|
|
23
|
+
}
|
|
24
|
+
}),
|
|
25
|
+
];
|
|
26
|
+
return buildSuiteResult("obs", "Observability", started, tests);
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=obs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obs.js","sourceRoot":"","sources":["../../../src/e2e/suites/obs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,EAAE,EAAE,KAAK;IACT,IAAI,EAAE,eAAe;IACrB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG;YACZ,MAAM,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,KAAK,IAAI,EAAE;gBACtE,MAAM,MAAM,GAAG,cAAc,CAAC;oBAC5B,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,CAAC;oBACP,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB,CAAC,CAAC;gBACH,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,oBAAoB,MAAM,CAAC,IAAI,aAAa,CAAC,CAAC;oBACvE,IAAI,CAAC,IAAI,CAAC,EAAE;wBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBACnE,OAAO,EAAE,CAAC,qCAAqC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC1E,CAAC;wBAAS,CAAC;oBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC;SACH,CAAC;QACF,OAAO,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/self.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,SAAS,EAAE,QAoDvB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { createToolServer } from "../../tools/index.js";
|
|
3
|
+
import { loadConfig, loadOwnerConfig, getConfigDir, getMemoriesDir, getTokensFile } from "../../config/index.js";
|
|
4
|
+
import { hasLocalGoogleRefreshToken } from "../../google/token-file.js";
|
|
5
|
+
import { isDisplaySizeInitialized } from "../../tools/desktop-executor-factory.js";
|
|
6
|
+
import { ensureBrowser, getCdpEndpoint } from "../../agent/browser-launcher.js";
|
|
7
|
+
import { buildSuiteResult, ok, runTest, skipped } from "../suite-utils.js";
|
|
8
|
+
export const selfSuite = {
|
|
9
|
+
id: "self",
|
|
10
|
+
name: "Self check",
|
|
11
|
+
run: async (context) => {
|
|
12
|
+
const started = Date.now();
|
|
13
|
+
const tests = await Promise.all([
|
|
14
|
+
runTest("self", "self.config_load", "Config load", () => {
|
|
15
|
+
loadConfig();
|
|
16
|
+
return Promise.resolve(ok("Config loaded"));
|
|
17
|
+
}),
|
|
18
|
+
runTest("self", "self.owner_config_load", "Owner config load", () => {
|
|
19
|
+
try {
|
|
20
|
+
loadOwnerConfig();
|
|
21
|
+
return Promise.resolve(ok("Owner config loaded"));
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return Promise.resolve(skipped("Owner config not available"));
|
|
25
|
+
}
|
|
26
|
+
}),
|
|
27
|
+
runTest("self", "self.required_directories", "Required directories", () => {
|
|
28
|
+
for (const dir of [getConfigDir(), getMemoriesDir()]) {
|
|
29
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
30
|
+
fs.accessSync(dir, fs.constants.W_OK);
|
|
31
|
+
}
|
|
32
|
+
return Promise.resolve(ok("Required directories writable"));
|
|
33
|
+
}),
|
|
34
|
+
runTest("self", "self.tool_server", "Tool server construction", () => {
|
|
35
|
+
createToolServer();
|
|
36
|
+
return Promise.resolve(ok("Tool server created"));
|
|
37
|
+
}),
|
|
38
|
+
runTest("self", "self.secrets_presence", "Secrets presence", () => Promise.resolve(ok("Secret presence checked", {
|
|
39
|
+
googleTokens: hasLocalGoogleRefreshToken() ? "present" : "missing",
|
|
40
|
+
anthropicApiKey: context.config.anthropicApiKey ? "present" : "missing",
|
|
41
|
+
telegramBotToken: context.config.channels.telegram?.botToken ? "present" : "missing",
|
|
42
|
+
}))),
|
|
43
|
+
runTest("self", "self.display_size", "Display size status", () => {
|
|
44
|
+
if (isDisplaySizeInitialized())
|
|
45
|
+
return Promise.resolve(ok("Display size initialized"));
|
|
46
|
+
return Promise.resolve(skipped("Display size not initialized; CUA tests may be limited"));
|
|
47
|
+
}),
|
|
48
|
+
runTest("self", "self.chrome_cdp", "Chrome/CDP status", async () => {
|
|
49
|
+
await ensureBrowser();
|
|
50
|
+
const endpoint = getCdpEndpoint();
|
|
51
|
+
const resp = await fetch(`${endpoint}/json/version`).catch(() => null);
|
|
52
|
+
if (resp?.ok)
|
|
53
|
+
return ok("CDP endpoint reachable", { endpoint });
|
|
54
|
+
return skipped("Chrome/CDP not reachable");
|
|
55
|
+
}),
|
|
56
|
+
runTest("self", "self.google_tokens_file", "Google tokens file", () => {
|
|
57
|
+
if (fs.existsSync(getTokensFile()))
|
|
58
|
+
return Promise.resolve(ok("Google tokens file present"));
|
|
59
|
+
return Promise.resolve(skipped("Google tokens file missing"));
|
|
60
|
+
}),
|
|
61
|
+
]);
|
|
62
|
+
return buildSuiteResult("self", "Self check", started, tests);
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=self.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self.js","sourceRoot":"","sources":["../../../src/e2e/suites/self.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/e2e/suites/upgrade.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,eAAO,MAAM,YAAY,EAAE,QAyB1B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { getCurrentVersion, getNpmVersionByTag } from "../../utils/version-check.js";
|
|
2
|
+
import { resolvePnpmCommand } from "../../tools/upgrade.js";
|
|
3
|
+
import { buildSuiteResult, ok, runTest, skipped } from "../suite-utils.js";
|
|
4
|
+
export const upgradeSuite = {
|
|
5
|
+
id: "upgrade",
|
|
6
|
+
name: "Upgrade",
|
|
7
|
+
run: async (context) => {
|
|
8
|
+
const started = Date.now();
|
|
9
|
+
const tests = [
|
|
10
|
+
await runTest("upgrade", "upgrade.current_version", "Current version", () => Promise.resolve(ok(`Current version ${getCurrentVersion()}`))),
|
|
11
|
+
await runTest("upgrade", "upgrade.npm_metadata", "NPM metadata", async () => ok(`Latest npm version ${await getNpmVersionByTag("latest")}`)),
|
|
12
|
+
await runTest("upgrade", "upgrade.pnpm_preflight", "pnpm preflight", async () => {
|
|
13
|
+
try {
|
|
14
|
+
const pnpm = await resolvePnpmCommand();
|
|
15
|
+
return ok(`pnpm available (${pnpm.version})`);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
return skipped(err instanceof Error ? err.message : String(err));
|
|
19
|
+
}
|
|
20
|
+
}),
|
|
21
|
+
await runTest("upgrade", "upgrade.apply", "Apply upgrade", () => {
|
|
22
|
+
if (!context.options.includeDestructive) {
|
|
23
|
+
return Promise.resolve(skipped("Upgrade apply skipped unless --include-destructive is set"));
|
|
24
|
+
}
|
|
25
|
+
return Promise.resolve(skipped("Destructive upgrade not executed in automated e2e v1"));
|
|
26
|
+
}),
|
|
27
|
+
];
|
|
28
|
+
return buildSuiteResult("upgrade", "Upgrade", started, tests);
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/e2e/suites/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,CAAC,MAAM,YAAY,GAAa;IACpC,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG;YACZ,MAAM,OAAO,CAAC,SAAS,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,mBAAmB,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3I,MAAM,OAAO,CAAC,SAAS,EAAE,sBAAsB,EAAE,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,sBAAsB,MAAM,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC5I,MAAM,OAAO,CAAC,SAAS,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,KAAK,IAAI,EAAE;gBAC9E,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,EAAE,CAAC;oBACxC,OAAO,EAAE,CAAC,mBAAmB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;gBAChD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC,CAAC;YACF,MAAM,OAAO,CAAC,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,EAAE;gBAC9D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;oBACxC,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC,CAAC;gBAC/F,CAAC;gBACD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC,CAAC;YAC1F,CAAC,CAAC;SACH,CAAC;QACF,OAAO,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;CACF,CAAC"}
|