visionclaw 0.1.195-dev.feat-e2e-test-system.2 → 0.1.195-dev.feat-e2e-test-system.4

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,QA0D1B,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,QAqD1B,CAAC"}
@@ -16,9 +16,9 @@ export const browserSuite = {
16
16
  await ensureBrowser();
17
17
  return ok("Browser ensured");
18
18
  }));
19
- tests.push(await runTest("browser", "browser.local_page", "Local page interaction", async () => {
20
- const browser = await chromium.connectOverCDP(getCdpEndpoint());
21
- try {
19
+ const browser = await chromium.connectOverCDP(getCdpEndpoint());
20
+ try {
21
+ tests.push(await runTest("browser", "browser.local_page", "Local page interaction", async () => {
22
22
  const contextObj = browser.contexts()[0] ?? await browser.newContext();
23
23
  const page = contextObj.pages()[0] ?? await contextObj.newPage();
24
24
  await page.goto(`${localServer.baseUrl}/e2e/browser?runId=${context.runId}`);
@@ -29,14 +29,8 @@ export const browserSuite = {
29
29
  if (result !== "checked")
30
30
  throw new Error(`Unexpected result: ${result ?? "null"}`);
31
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 {
32
+ }));
33
+ tests.push(await runTest("browser", "browser.screenshot", "Screenshot", async () => {
40
34
  const page = browser.contexts()[0].pages().at(0);
41
35
  if (page === undefined)
42
36
  return skipped("No Playwright page available");
@@ -45,18 +39,18 @@ export const browserSuite = {
45
39
  if (!fs.existsSync(screenshotPath))
46
40
  throw new Error("Screenshot not saved");
47
41
  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
42
  }));
43
+ if (context.mode === "full") {
44
+ tests.push(await runTest("browser", "browser.network", "Network capture", async () => {
45
+ const resp = await fetch(`${localServer.baseUrl}/api/echo?runId=${context.runId}`);
46
+ if (!resp.ok)
47
+ throw new Error(`Echo endpoint failed: ${resp.status}`);
48
+ return ok("Network request succeeded");
49
+ }));
50
+ }
51
+ }
52
+ finally {
53
+ await browser.close();
60
54
  }
61
55
  }
62
56
  finally {
@@ -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":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,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,WAAW,GAAG,MAAM,oBAAoB,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,KAAK,IAAI,EAAE;gBACzF,MAAM,aAAa,EAAE,CAAC;gBACtB,OAAO,EAAE,CAAC,iBAAiB,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC,CAAC;YAEJ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,KAAK,IAAI,EAAE;oBAC7F,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;oBACvE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;oBACjE,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,OAAO,sBAAsB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC7E,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBAClE,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;oBAClC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC3D,IAAI,MAAM,KAAK,SAAS;wBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;oBACpF,OAAO,EAAE,CAAC,mCAAmC,CAAC,CAAC;gBACjD,CAAC,CAAC,CAAC,CAAC;gBAEJ,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,oBAAoB,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE;oBACjF,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACjD,IAAI,IAAI,KAAK,SAAS;wBAAE,OAAO,OAAO,CAAC,8BAA8B,CAAC,CAAC;oBACvE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;oBACjF,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;oBAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;wBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBAC5E,OAAO,EAAE,CAAC,qBAAqB,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC,CAAC;gBAEJ,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,IAAI,EAAE;wBACnF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,CAAC,OAAO,mBAAmB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;wBACnF,IAAI,CAAC,IAAI,CAAC,EAAE;4BAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;wBACtE,OAAO,EAAE,CAAC,2BAA2B,CAAC,CAAC;oBACzC,CAAC,CAAC,CAAC,CAAC;gBACN,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,OAAO,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;CACF,CAAC"}
@@ -32,42 +32,39 @@ export const cuaSuite = {
32
32
  fs.writeFileSync(screenshotPath, Buffer.from(shot.base64, "base64"));
33
33
  return ok("Screenshot captured", { screenshotPath });
34
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 {
35
+ await ensureBrowser();
36
+ const browser = await chromium.connectOverCDP(getCdpEndpoint());
37
+ try {
38
+ tests.push(await runTest("cua", "cua.open_local_page", "Open local page", async () => {
39
39
  const contextObj = browser.contexts()[0] ?? await browser.newContext();
40
40
  const page = contextObj.pages()[0] ?? await contextObj.newPage();
41
41
  await page.goto(`${localServer.baseUrl}/e2e/cua?runId=${context.runId}`);
42
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 {
43
+ }));
44
+ tests.push(await runTest("cua", "cua.click_and_type", "Click and type", async () => {
45
+ if (!isDisplaySizeInitialized()) {
46
+ return skipped("Display size not initialized; grant Accessibility and Screen Recording permissions");
47
+ }
54
48
  const page = browser.contexts()[0]?.pages().find((p) => p.url().includes("/e2e/cua"));
55
49
  if (!page)
56
50
  return skipped("CUA test page not open");
57
51
  const box = await page.locator("#text-input").boundingBox();
58
52
  if (!box)
59
53
  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));
54
+ const winBounds = await page.evaluate("({ screenX: window.screenX, screenY: window.screenY, chromeHeight: window.outerHeight - window.innerHeight })");
55
+ const screenX = Math.round(box.x + box.width / 2 + winBounds.screenX);
56
+ const screenY = Math.round(box.y + box.height / 2 + winBounds.screenY + winBounds.chromeHeight);
57
+ await click(screenX, screenY);
61
58
  await typeText(`VisionClaw E2E ${context.runId}`);
62
59
  const value = await page.inputValue("#text-input");
63
60
  if (!value.includes(context.runId))
64
61
  throw new Error("Typed value not reflected in page");
65
62
  return ok("CUA click/type verified via Playwright");
66
- }
67
- finally {
68
- await browser.close();
69
- }
70
- }));
63
+ }));
64
+ }
65
+ finally {
66
+ await browser.close();
67
+ }
71
68
  }
72
69
  finally {
73
70
  await localServer.close();
@@ -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.2";
20513
+ const v15 = "0.1.195-dev.feat-e2e-test-system.4";
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.2";
20530
+ const bundledVersion = "0.1.195-dev.feat-e2e-test-system.4";
20531
20531
  if (bundledVersion && bundledVersion !== "undefined") {
20532
20532
  return bundledVersion;
20533
20533
  }
@@ -1030414,9 +1030414,9 @@ var init_browser = __esm({
1030414
1030414
  await ensureBrowser();
1030415
1030415
  return ok11("Browser ensured");
1030416
1030416
  }));
1030417
- tests.push(await runTest("browser", "browser.local_page", "Local page interaction", async () => {
1030418
- const browser = await import_playwright2.chromium.connectOverCDP(getCdpEndpoint());
1030419
- try {
1030417
+ const browser = await import_playwright2.chromium.connectOverCDP(getCdpEndpoint());
1030418
+ try {
1030419
+ tests.push(await runTest("browser", "browser.local_page", "Local page interaction", async () => {
1030420
1030420
  const contextObj = browser.contexts()[0] ?? await browser.newContext();
1030421
1030421
  const page = contextObj.pages()[0] ?? await contextObj.newPage();
1030422
1030422
  await page.goto(`${localServer.baseUrl}/e2e/browser?runId=${context.runId}`);
@@ -1030427,13 +1030427,8 @@ var init_browser = __esm({
1030427
1030427
  if (result !== "checked")
1030428
1030428
  throw new Error(`Unexpected result: ${result ?? "null"}`);
1030429
1030429
  return ok11("Local page interactions succeeded");
1030430
- } finally {
1030431
- await browser.close();
1030432
- }
1030433
- }));
1030434
- tests.push(await runTest("browser", "browser.screenshot", "Screenshot", async () => {
1030435
- const browser = await import_playwright2.chromium.connectOverCDP(getCdpEndpoint());
1030436
- try {
1030430
+ }));
1030431
+ tests.push(await runTest("browser", "browser.screenshot", "Screenshot", async () => {
1030437
1030432
  const page = browser.contexts()[0].pages().at(0);
1030438
1030433
  if (page === void 0)
1030439
1030434
  return skipped("No Playwright page available");
@@ -1030442,17 +1030437,17 @@ var init_browser = __esm({
1030442
1030437
  if (!import_node_fs61.default.existsSync(screenshotPath))
1030443
1030438
  throw new Error("Screenshot not saved");
1030444
1030439
  return ok11("Screenshot captured", { screenshotPath });
1030445
- } finally {
1030446
- await browser.close();
1030447
- }
1030448
- }));
1030449
- if (context.mode === "full") {
1030450
- tests.push(await runTest("browser", "browser.network", "Network capture", async () => {
1030451
- const resp = await fetch(`${localServer.baseUrl}/api/echo?runId=${context.runId}`);
1030452
- if (!resp.ok)
1030453
- throw new Error(`Echo endpoint failed: ${resp.status}`);
1030454
- return ok11("Network request succeeded");
1030455
1030440
  }));
1030441
+ if (context.mode === "full") {
1030442
+ tests.push(await runTest("browser", "browser.network", "Network capture", async () => {
1030443
+ const resp = await fetch(`${localServer.baseUrl}/api/echo?runId=${context.runId}`);
1030444
+ if (!resp.ok)
1030445
+ throw new Error(`Echo endpoint failed: ${resp.status}`);
1030446
+ return ok11("Network request succeeded");
1030447
+ }));
1030448
+ }
1030449
+ } finally {
1030450
+ await browser.close();
1030456
1030451
  }
1030457
1030452
  } finally {
1030458
1030453
  await localServer.close();
@@ -1030501,40 +1030496,38 @@ var init_cua = __esm({
1030501
1030496
  import_node_fs62.default.writeFileSync(screenshotPath, Buffer.from(shot.base64, "base64"));
1030502
1030497
  return ok11("Screenshot captured", { screenshotPath });
1030503
1030498
  }));
1030504
- tests.push(await runTest("cua", "cua.open_local_page", "Open local page", async () => {
1030505
- await ensureBrowser();
1030506
- const browser = await import_playwright3.chromium.connectOverCDP(getCdpEndpoint());
1030507
- try {
1030499
+ await ensureBrowser();
1030500
+ const browser = await import_playwright3.chromium.connectOverCDP(getCdpEndpoint());
1030501
+ try {
1030502
+ tests.push(await runTest("cua", "cua.open_local_page", "Open local page", async () => {
1030508
1030503
  const contextObj = browser.contexts()[0] ?? await browser.newContext();
1030509
1030504
  const page = contextObj.pages()[0] ?? await contextObj.newPage();
1030510
1030505
  await page.goto(`${localServer.baseUrl}/e2e/cua?runId=${context.runId}`);
1030511
1030506
  return ok11("Local CUA page opened");
1030512
- } finally {
1030513
- await browser.close();
1030514
- }
1030515
- }));
1030516
- tests.push(await runTest("cua", "cua.click_and_type", "Click and type", async () => {
1030517
- if (!isDisplaySizeInitialized3()) {
1030518
- return skipped("Display size not initialized; grant Accessibility and Screen Recording permissions");
1030519
- }
1030520
- const browser = await import_playwright3.chromium.connectOverCDP(getCdpEndpoint());
1030521
- try {
1030507
+ }));
1030508
+ tests.push(await runTest("cua", "cua.click_and_type", "Click and type", async () => {
1030509
+ if (!isDisplaySizeInitialized3()) {
1030510
+ return skipped("Display size not initialized; grant Accessibility and Screen Recording permissions");
1030511
+ }
1030522
1030512
  const page = browser.contexts()[0]?.pages().find((p10) => p10.url().includes("/e2e/cua"));
1030523
1030513
  if (!page)
1030524
1030514
  return skipped("CUA test page not open");
1030525
1030515
  const box = await page.locator("#text-input").boundingBox();
1030526
1030516
  if (!box)
1030527
1030517
  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));
1030518
+ const winBounds = await page.evaluate("({ screenX: window.screenX, screenY: window.screenY, chromeHeight: window.outerHeight - window.innerHeight })");
1030519
+ const screenX = Math.round(box.x + box.width / 2 + winBounds.screenX);
1030520
+ const screenY = Math.round(box.y + box.height / 2 + winBounds.screenY + winBounds.chromeHeight);
1030521
+ await click3(screenX, screenY);
1030529
1030522
  await typeText3(`VisionClaw E2E ${context.runId}`);
1030530
1030523
  const value = await page.inputValue("#text-input");
1030531
1030524
  if (!value.includes(context.runId))
1030532
1030525
  throw new Error("Typed value not reflected in page");
1030533
1030526
  return ok11("CUA click/type verified via Playwright");
1030534
- } finally {
1030535
- await browser.close();
1030536
- }
1030537
- }));
1030527
+ }));
1030528
+ } finally {
1030529
+ await browser.close();
1030530
+ }
1030538
1030531
  } finally {
1030539
1030532
  await localServer.close();
1030540
1030533
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "visionclaw",
3
- "version": "0.1.195-dev.feat-e2e-test-system.2",
3
+ "version": "0.1.195-dev.feat-e2e-test-system.4",
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",