visionclaw 0.1.195-dev.feat-e2e-test-system.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.
@@ -1 +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,QAkD1B,CAAC"}
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"}
@@ -18,27 +18,37 @@ export const browserSuite = {
18
18
  }));
19
19
  tests.push(await runTest("browser", "browser.local_page", "Local page interaction", async () => {
20
20
  const browser = await chromium.connectOverCDP(getCdpEndpoint());
21
- const contextObj = browser.contexts()[0] ?? await browser.newContext();
22
- const page = contextObj.pages()[0] ?? await contextObj.newPage();
23
- await page.goto(`${localServer.baseUrl}/e2e/browser?runId=${context.runId}`);
24
- await page.fill("#text-input", `VisionClaw E2E ${context.runId}`);
25
- await page.click("#click-button");
26
- await page.check("#checkbox");
27
- const result = await page.locator("#result").textContent();
28
- if (result !== "checked")
29
- throw new Error(`Unexpected result: ${result ?? "null"}`);
30
- return ok("Local page interactions succeeded");
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
+ }
31
36
  }));
32
37
  tests.push(await runTest("browser", "browser.screenshot", "Screenshot", async () => {
33
38
  const browser = await chromium.connectOverCDP(getCdpEndpoint());
34
- const page = browser.contexts()[0].pages().at(0);
35
- if (page === undefined)
36
- return skipped("No Playwright page available");
37
- const screenshotPath = path.join(context.artifactsDir, "browser-screenshot.png");
38
- await page.screenshot({ path: screenshotPath });
39
- if (!fs.existsSync(screenshotPath))
40
- throw new Error("Screenshot not saved");
41
- return ok("Screenshot captured", { screenshotPath });
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
+ }
42
52
  }));
43
53
  if (context.mode === "full") {
44
54
  tests.push(await runTest("browser", "browser.network", "Network capture", async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/e2e/suites/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/e2e/suites/browser.ts"],"names":[],"mappings":"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"}
@@ -1 +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,QA2DtB,CAAC"}
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"}
@@ -35,28 +35,38 @@ export const cuaSuite = {
35
35
  tests.push(await runTest("cua", "cua.open_local_page", "Open local page", async () => {
36
36
  await ensureBrowser();
37
37
  const browser = await chromium.connectOverCDP(getCdpEndpoint());
38
- const contextObj = browser.contexts()[0] ?? await browser.newContext();
39
- const page = contextObj.pages()[0] ?? await contextObj.newPage();
40
- await page.goto(`${localServer.baseUrl}/e2e/cua?runId=${context.runId}`);
41
- return ok("Local CUA page opened");
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
+ }
42
47
  }));
43
48
  tests.push(await runTest("cua", "cua.click_and_type", "Click and type", async () => {
44
49
  if (!isDisplaySizeInitialized()) {
45
50
  return skipped("Display size not initialized; grant Accessibility and Screen Recording permissions");
46
51
  }
47
52
  const browser = await chromium.connectOverCDP(getCdpEndpoint());
48
- const page = browser.contexts()[0]?.pages().find((p) => p.url().includes("/e2e/cua"));
49
- if (!page)
50
- return skipped("CUA test page not open");
51
- const box = await page.locator("#text-input").boundingBox();
52
- if (!box)
53
- return warning("Could not resolve input bounding box");
54
- await click(Math.round(box.x + box.width / 2), Math.round(box.y + box.height / 2));
55
- await typeText(`VisionClaw E2E ${context.runId}`);
56
- const value = await page.inputValue("#text-input");
57
- if (!value.includes(context.runId))
58
- throw new Error("Typed value not reflected in page");
59
- return ok("CUA click/type verified via Playwright");
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
+ }
60
70
  }));
61
71
  }
62
72
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"cua.js","sourceRoot":"","sources":["../../../src/e2e/suites/cua.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cua.js","sourceRoot":"","sources":["../../../src/e2e/suites/cua.ts"],"names":[],"mappings":"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"}
@@ -20510,7 +20510,7 @@ var require_prompts3 = __commonJS({
20510
20510
 
20511
20511
  // dist/utils/version-check.js
20512
20512
  function isBundled() {
20513
- const v15 = "0.1.195-dev.feat-e2e-test-system.1";
20513
+ const v15 = "0.1.195-dev.feat-e2e-test-system.2";
20514
20514
  return typeof v15 === "string" && v15 !== "undefined";
20515
20515
  }
20516
20516
  function getPackageRoot() {
@@ -20527,7 +20527,7 @@ function getInstallationInfo() {
20527
20527
  };
20528
20528
  }
20529
20529
  function getCurrentVersion() {
20530
- const bundledVersion = "0.1.195-dev.feat-e2e-test-system.1";
20530
+ const bundledVersion = "0.1.195-dev.feat-e2e-test-system.2";
20531
20531
  if (bundledVersion && bundledVersion !== "undefined") {
20532
20532
  return bundledVersion;
20533
20533
  }
@@ -1030416,27 +1030416,35 @@ var init_browser = __esm({
1030416
1030416
  }));
1030417
1030417
  tests.push(await runTest("browser", "browser.local_page", "Local page interaction", async () => {
1030418
1030418
  const browser = await import_playwright2.chromium.connectOverCDP(getCdpEndpoint());
1030419
- const contextObj = browser.contexts()[0] ?? await browser.newContext();
1030420
- const page = contextObj.pages()[0] ?? await contextObj.newPage();
1030421
- await page.goto(`${localServer.baseUrl}/e2e/browser?runId=${context.runId}`);
1030422
- await page.fill("#text-input", `VisionClaw E2E ${context.runId}`);
1030423
- await page.click("#click-button");
1030424
- await page.check("#checkbox");
1030425
- const result = await page.locator("#result").textContent();
1030426
- if (result !== "checked")
1030427
- throw new Error(`Unexpected result: ${result ?? "null"}`);
1030428
- return ok11("Local page interactions succeeded");
1030419
+ try {
1030420
+ const contextObj = browser.contexts()[0] ?? await browser.newContext();
1030421
+ const page = contextObj.pages()[0] ?? await contextObj.newPage();
1030422
+ await page.goto(`${localServer.baseUrl}/e2e/browser?runId=${context.runId}`);
1030423
+ await page.fill("#text-input", `VisionClaw E2E ${context.runId}`);
1030424
+ await page.click("#click-button");
1030425
+ await page.check("#checkbox");
1030426
+ const result = await page.locator("#result").textContent();
1030427
+ if (result !== "checked")
1030428
+ throw new Error(`Unexpected result: ${result ?? "null"}`);
1030429
+ return ok11("Local page interactions succeeded");
1030430
+ } finally {
1030431
+ await browser.close();
1030432
+ }
1030429
1030433
  }));
1030430
1030434
  tests.push(await runTest("browser", "browser.screenshot", "Screenshot", async () => {
1030431
1030435
  const browser = await import_playwright2.chromium.connectOverCDP(getCdpEndpoint());
1030432
- const page = browser.contexts()[0].pages().at(0);
1030433
- if (page === void 0)
1030434
- return skipped("No Playwright page available");
1030435
- const screenshotPath = import_node_path61.default.join(context.artifactsDir, "browser-screenshot.png");
1030436
- await page.screenshot({ path: screenshotPath });
1030437
- if (!import_node_fs61.default.existsSync(screenshotPath))
1030438
- throw new Error("Screenshot not saved");
1030439
- return ok11("Screenshot captured", { screenshotPath });
1030436
+ try {
1030437
+ const page = browser.contexts()[0].pages().at(0);
1030438
+ if (page === void 0)
1030439
+ return skipped("No Playwright page available");
1030440
+ const screenshotPath = import_node_path61.default.join(context.artifactsDir, "browser-screenshot.png");
1030441
+ await page.screenshot({ path: screenshotPath });
1030442
+ if (!import_node_fs61.default.existsSync(screenshotPath))
1030443
+ throw new Error("Screenshot not saved");
1030444
+ return ok11("Screenshot captured", { screenshotPath });
1030445
+ } finally {
1030446
+ await browser.close();
1030447
+ }
1030440
1030448
  }));
1030441
1030449
  if (context.mode === "full") {
1030442
1030450
  tests.push(await runTest("browser", "browser.network", "Network capture", async () => {
@@ -1030496,28 +1030504,36 @@ var init_cua = __esm({
1030496
1030504
  tests.push(await runTest("cua", "cua.open_local_page", "Open local page", async () => {
1030497
1030505
  await ensureBrowser();
1030498
1030506
  const browser = await import_playwright3.chromium.connectOverCDP(getCdpEndpoint());
1030499
- const contextObj = browser.contexts()[0] ?? await browser.newContext();
1030500
- const page = contextObj.pages()[0] ?? await contextObj.newPage();
1030501
- await page.goto(`${localServer.baseUrl}/e2e/cua?runId=${context.runId}`);
1030502
- return ok11("Local CUA page opened");
1030507
+ try {
1030508
+ const contextObj = browser.contexts()[0] ?? await browser.newContext();
1030509
+ const page = contextObj.pages()[0] ?? await contextObj.newPage();
1030510
+ await page.goto(`${localServer.baseUrl}/e2e/cua?runId=${context.runId}`);
1030511
+ return ok11("Local CUA page opened");
1030512
+ } finally {
1030513
+ await browser.close();
1030514
+ }
1030503
1030515
  }));
1030504
1030516
  tests.push(await runTest("cua", "cua.click_and_type", "Click and type", async () => {
1030505
1030517
  if (!isDisplaySizeInitialized3()) {
1030506
1030518
  return skipped("Display size not initialized; grant Accessibility and Screen Recording permissions");
1030507
1030519
  }
1030508
1030520
  const browser = await import_playwright3.chromium.connectOverCDP(getCdpEndpoint());
1030509
- const page = browser.contexts()[0]?.pages().find((p10) => p10.url().includes("/e2e/cua"));
1030510
- if (!page)
1030511
- return skipped("CUA test page not open");
1030512
- const box = await page.locator("#text-input").boundingBox();
1030513
- if (!box)
1030514
- return warning("Could not resolve input bounding box");
1030515
- await click3(Math.round(box.x + box.width / 2), Math.round(box.y + box.height / 2));
1030516
- await typeText3(`VisionClaw E2E ${context.runId}`);
1030517
- const value = await page.inputValue("#text-input");
1030518
- if (!value.includes(context.runId))
1030519
- throw new Error("Typed value not reflected in page");
1030520
- return ok11("CUA click/type verified via Playwright");
1030521
+ try {
1030522
+ const page = browser.contexts()[0]?.pages().find((p10) => p10.url().includes("/e2e/cua"));
1030523
+ if (!page)
1030524
+ return skipped("CUA test page not open");
1030525
+ const box = await page.locator("#text-input").boundingBox();
1030526
+ if (!box)
1030527
+ return warning("Could not resolve input bounding box");
1030528
+ await click3(Math.round(box.x + box.width / 2), Math.round(box.y + box.height / 2));
1030529
+ await typeText3(`VisionClaw E2E ${context.runId}`);
1030530
+ const value = await page.inputValue("#text-input");
1030531
+ if (!value.includes(context.runId))
1030532
+ throw new Error("Typed value not reflected in page");
1030533
+ return ok11("CUA click/type verified via Playwright");
1030534
+ } finally {
1030535
+ await browser.close();
1030536
+ }
1030521
1030537
  }));
1030522
1030538
  } finally {
1030523
1030539
  await localServer.close();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "visionclaw",
3
- "version": "0.1.195-dev.feat-e2e-test-system.1",
3
+ "version": "0.1.195-dev.feat-e2e-test-system.2",
4
4
  "description": "A personal assistant agent that runs on your desktop, receives commands from messaging channels, and executes tasks autonomously.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",