@midscene/web 0.10.1 → 0.10.2-beta-20250123090318.0

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.
@@ -1004,7 +1004,7 @@ var BridgeClient = class {
1004
1004
  this.socket = (0, import_socket.io)(this.endpoint, {
1005
1005
  reconnection: false,
1006
1006
  query: {
1007
- version: "0.10.1"
1007
+ version: "0.10.2-beta-20250123090318.0"
1008
1008
  }
1009
1009
  });
1010
1010
  const timeout = setTimeout(() => {
@@ -1120,7 +1120,7 @@ var ChromeExtensionPageBrowserSide = class extends ChromeExtensionProxyPage {
1120
1120
  );
1121
1121
  await this.bridgeClient.connect();
1122
1122
  this.onLogMessage(
1123
- `Bridge connected, cli-side version v${this.bridgeClient.serverVersion}, browser-side version v${"0.10.1"}`,
1123
+ `Bridge connected, cli-side version v${this.bridgeClient.serverVersion}, browser-side version v${"0.10.2-beta-20250123090318.0"}`,
1124
1124
  "log"
1125
1125
  );
1126
1126
  }
@@ -1649,7 +1649,7 @@ var BridgeServer = class {
1649
1649
  this.socket = socket;
1650
1650
  const clientVersion = socket.handshake.query.version;
1651
1651
  console.log(
1652
- `Bridge connected, cli-side version v${"0.10.1"}, browser-side version v${clientVersion}`
1652
+ `Bridge connected, cli-side version v${"0.10.2-beta-20250123090318.0"}, browser-side version v${clientVersion}`
1653
1653
  );
1654
1654
  socket.on("bridge-call-response" /* CallResponse */, (params) => {
1655
1655
  const id = params.id;
@@ -1682,7 +1682,7 @@ var BridgeServer = class {
1682
1682
  var _a;
1683
1683
  (_a = this.onConnect) == null ? void 0 : _a.call(this);
1684
1684
  const payload = {
1685
- version: "0.10.1"
1685
+ version: "0.10.2-beta-20250123090318.0"
1686
1686
  };
1687
1687
  socket.emit("bridge-connected" /* Connected */, payload);
1688
1688
  Promise.resolve().then(() => {
package/dist/es/index.js CHANGED
@@ -1946,6 +1946,23 @@ var PuppeteerAgent = class extends PageAgent {
1946
1946
  constructor(page, opts) {
1947
1947
  const webPage = new WebPage2(page);
1948
1948
  super(webPage, opts);
1949
+ if (opts == null ? void 0 : opts.trackingActiveTab) {
1950
+ const browser = this.page.underlyingPage.browser();
1951
+ browser.on("targetcreated", async (target) => {
1952
+ if (target.type() === "page") {
1953
+ const targetPage = await target.page();
1954
+ if (!targetPage) {
1955
+ console.warn(
1956
+ "got a targetPage event, but the page is not ready yet, skip"
1957
+ );
1958
+ return;
1959
+ }
1960
+ const midscenePage = new WebPage2(targetPage);
1961
+ this.page = midscenePage;
1962
+ this.taskExecutor.page = midscenePage;
1963
+ }
1964
+ });
1965
+ }
1949
1966
  }
1950
1967
  };
1951
1968
 
@@ -1772,7 +1772,7 @@ var defaultViewportWidth = 1440;
1772
1772
  var defaultViewportHeight = 900;
1773
1773
  var defaultViewportScale = process.platform === "darwin" ? 2 : 1;
1774
1774
  var defaultWaitForNetworkIdleTimeout = 10 * 1e3;
1775
- async function puppeteerAgentForTarget(target, preference) {
1775
+ async function launchPuppeteerPage(target, preference) {
1776
1776
  var _a, _b, _c;
1777
1777
  (0, import_node_assert3.default)(target.url, "url is required");
1778
1778
  const freeFn = [];
@@ -1827,10 +1827,12 @@ async function puppeteerAgentForTarget(target, preference) {
1827
1827
  const isWindows = process.platform === "win32";
1828
1828
  const browser = await puppeteer.launch({
1829
1829
  headless: !headed,
1830
+ defaultViewport: viewportConfig,
1830
1831
  args: [
1831
1832
  ...isWindows ? [] : ["--no-sandbox", "--disable-setuid-sandbox"],
1832
1833
  "--disable-features=PasswordLeakDetection",
1833
1834
  "--disable-save-password-bubble",
1835
+ `--user-agent="${ua}"`,
1834
1836
  preferMaximizedWindow ? "--start-maximized" : `--window-size=${width},${height}`
1835
1837
  ]
1836
1838
  });
@@ -1850,15 +1852,13 @@ async function puppeteerAgentForTarget(target, preference) {
1850
1852
  });
1851
1853
  const pages = await browser.pages();
1852
1854
  const page = pages[0];
1853
- await page.setUserAgent(ua);
1854
- await page.setViewport(viewportConfig);
1855
1855
  if (target.cookie) {
1856
1856
  const cookieFileContent = (0, import_node_fs3.readFileSync)(target.cookie, "utf-8");
1857
1857
  await page.setCookie(...JSON.parse(cookieFileContent));
1858
1858
  }
1859
- await page.goto(target.url);
1860
1859
  const waitForNetworkIdleTimeout = typeof ((_a = target.waitForNetworkIdle) == null ? void 0 : _a.timeout) === "number" ? target.waitForNetworkIdle.timeout : defaultWaitForNetworkIdleTimeout;
1861
1860
  try {
1861
+ await page.goto(target.url);
1862
1862
  if (waitForNetworkIdleTimeout > 0) {
1863
1863
  await page.waitForNetworkIdle({
1864
1864
  timeout: waitForNetworkIdleTimeout
@@ -1874,9 +1874,15 @@ async function puppeteerAgentForTarget(target, preference) {
1874
1874
  const newMessage = `failed to wait for network idle after ${waitForNetworkIdleTimeout}ms, but the script will continue.`;
1875
1875
  console.warn(newMessage);
1876
1876
  }
1877
+ return { page, freeFn };
1878
+ }
1879
+ async function puppeteerAgentForTarget(target, preference) {
1880
+ const { page, freeFn } = await launchPuppeteerPage(target, preference);
1877
1881
  const agent = new PuppeteerAgent(page, {
1878
1882
  autoPrintReportMsg: false,
1879
- testId: preference == null ? void 0 : preference.testId
1883
+ testId: preference == null ? void 0 : preference.testId,
1884
+ trackingActiveTab: typeof target.trackingActiveTab !== "undefined" ? target.trackingActiveTab : true
1885
+ // true for default in yaml script
1880
1886
  });
1881
1887
  freeFn.push({
1882
1888
  name: "midscene_puppeteer_agent",
@@ -1890,6 +1896,23 @@ var PuppeteerAgent = class extends PageAgent {
1890
1896
  constructor(page, opts) {
1891
1897
  const webPage = new WebPage(page);
1892
1898
  super(webPage, opts);
1899
+ if (opts == null ? void 0 : opts.trackingActiveTab) {
1900
+ const browser = this.page.underlyingPage.browser();
1901
+ browser.on("targetcreated", async (target) => {
1902
+ if (target.type() === "page") {
1903
+ const targetPage = await target.page();
1904
+ if (!targetPage) {
1905
+ console.warn(
1906
+ "got a targetPage event, but the page is not ready yet, skip"
1907
+ );
1908
+ return;
1909
+ }
1910
+ const midscenePage = new WebPage(targetPage);
1911
+ this.page = midscenePage;
1912
+ this.taskExecutor.page = midscenePage;
1913
+ }
1914
+ });
1915
+ }
1893
1916
  }
1894
1917
  };
1895
1918
  // Annotate the CommonJS export names for ESM import in node:
@@ -1004,7 +1004,7 @@ var BridgeClient = class {
1004
1004
  this.socket = (0, import_socket.io)(this.endpoint, {
1005
1005
  reconnection: false,
1006
1006
  query: {
1007
- version: "0.10.1"
1007
+ version: "0.10.2-beta-20250123090318.0"
1008
1008
  }
1009
1009
  });
1010
1010
  const timeout = setTimeout(() => {
@@ -1120,7 +1120,7 @@ var ChromeExtensionPageBrowserSide = class extends ChromeExtensionProxyPage {
1120
1120
  );
1121
1121
  await this.bridgeClient.connect();
1122
1122
  this.onLogMessage(
1123
- `Bridge connected, cli-side version v${this.bridgeClient.serverVersion}, browser-side version v${"0.10.1"}`,
1123
+ `Bridge connected, cli-side version v${this.bridgeClient.serverVersion}, browser-side version v${"0.10.2-beta-20250123090318.0"}`,
1124
1124
  "log"
1125
1125
  );
1126
1126
  }
@@ -1649,7 +1649,7 @@ var BridgeServer = class {
1649
1649
  this.socket = socket;
1650
1650
  const clientVersion = socket.handshake.query.version;
1651
1651
  console.log(
1652
- `Bridge connected, cli-side version v${"0.10.1"}, browser-side version v${clientVersion}`
1652
+ `Bridge connected, cli-side version v${"0.10.2-beta-20250123090318.0"}, browser-side version v${clientVersion}`
1653
1653
  );
1654
1654
  socket.on("bridge-call-response" /* CallResponse */, (params) => {
1655
1655
  const id = params.id;
@@ -1682,7 +1682,7 @@ var BridgeServer = class {
1682
1682
  var _a;
1683
1683
  (_a = this.onConnect) == null ? void 0 : _a.call(this);
1684
1684
  const payload = {
1685
- version: "0.10.1"
1685
+ version: "0.10.2-beta-20250123090318.0"
1686
1686
  };
1687
1687
  socket.emit("bridge-connected" /* Connected */, payload);
1688
1688
  Promise.resolve().then(() => {
package/dist/lib/index.js CHANGED
@@ -1946,6 +1946,23 @@ var PuppeteerAgent = class extends PageAgent {
1946
1946
  constructor(page, opts) {
1947
1947
  const webPage = new WebPage2(page);
1948
1948
  super(webPage, opts);
1949
+ if (opts == null ? void 0 : opts.trackingActiveTab) {
1950
+ const browser = this.page.underlyingPage.browser();
1951
+ browser.on("targetcreated", async (target) => {
1952
+ if (target.type() === "page") {
1953
+ const targetPage = await target.page();
1954
+ if (!targetPage) {
1955
+ console.warn(
1956
+ "got a targetPage event, but the page is not ready yet, skip"
1957
+ );
1958
+ return;
1959
+ }
1960
+ const midscenePage = new WebPage2(targetPage);
1961
+ this.page = midscenePage;
1962
+ this.taskExecutor.page = midscenePage;
1963
+ }
1964
+ });
1965
+ }
1949
1966
  }
1950
1967
  };
1951
1968
 
@@ -1772,7 +1772,7 @@ var defaultViewportWidth = 1440;
1772
1772
  var defaultViewportHeight = 900;
1773
1773
  var defaultViewportScale = process.platform === "darwin" ? 2 : 1;
1774
1774
  var defaultWaitForNetworkIdleTimeout = 10 * 1e3;
1775
- async function puppeteerAgentForTarget(target, preference) {
1775
+ async function launchPuppeteerPage(target, preference) {
1776
1776
  var _a, _b, _c;
1777
1777
  (0, import_node_assert3.default)(target.url, "url is required");
1778
1778
  const freeFn = [];
@@ -1827,10 +1827,12 @@ async function puppeteerAgentForTarget(target, preference) {
1827
1827
  const isWindows = process.platform === "win32";
1828
1828
  const browser = await puppeteer.launch({
1829
1829
  headless: !headed,
1830
+ defaultViewport: viewportConfig,
1830
1831
  args: [
1831
1832
  ...isWindows ? [] : ["--no-sandbox", "--disable-setuid-sandbox"],
1832
1833
  "--disable-features=PasswordLeakDetection",
1833
1834
  "--disable-save-password-bubble",
1835
+ `--user-agent="${ua}"`,
1834
1836
  preferMaximizedWindow ? "--start-maximized" : `--window-size=${width},${height}`
1835
1837
  ]
1836
1838
  });
@@ -1850,15 +1852,13 @@ async function puppeteerAgentForTarget(target, preference) {
1850
1852
  });
1851
1853
  const pages = await browser.pages();
1852
1854
  const page = pages[0];
1853
- await page.setUserAgent(ua);
1854
- await page.setViewport(viewportConfig);
1855
1855
  if (target.cookie) {
1856
1856
  const cookieFileContent = (0, import_node_fs3.readFileSync)(target.cookie, "utf-8");
1857
1857
  await page.setCookie(...JSON.parse(cookieFileContent));
1858
1858
  }
1859
- await page.goto(target.url);
1860
1859
  const waitForNetworkIdleTimeout = typeof ((_a = target.waitForNetworkIdle) == null ? void 0 : _a.timeout) === "number" ? target.waitForNetworkIdle.timeout : defaultWaitForNetworkIdleTimeout;
1861
1860
  try {
1861
+ await page.goto(target.url);
1862
1862
  if (waitForNetworkIdleTimeout > 0) {
1863
1863
  await page.waitForNetworkIdle({
1864
1864
  timeout: waitForNetworkIdleTimeout
@@ -1874,9 +1874,15 @@ async function puppeteerAgentForTarget(target, preference) {
1874
1874
  const newMessage = `failed to wait for network idle after ${waitForNetworkIdleTimeout}ms, but the script will continue.`;
1875
1875
  console.warn(newMessage);
1876
1876
  }
1877
+ return { page, freeFn };
1878
+ }
1879
+ async function puppeteerAgentForTarget(target, preference) {
1880
+ const { page, freeFn } = await launchPuppeteerPage(target, preference);
1877
1881
  const agent = new PuppeteerAgent(page, {
1878
1882
  autoPrintReportMsg: false,
1879
- testId: preference == null ? void 0 : preference.testId
1883
+ testId: preference == null ? void 0 : preference.testId,
1884
+ trackingActiveTab: typeof target.trackingActiveTab !== "undefined" ? target.trackingActiveTab : true
1885
+ // true for default in yaml script
1880
1886
  });
1881
1887
  freeFn.push({
1882
1888
  name: "midscene_puppeteer_agent",
@@ -1890,6 +1896,23 @@ var PuppeteerAgent = class extends PageAgent {
1890
1896
  constructor(page, opts) {
1891
1897
  const webPage = new WebPage(page);
1892
1898
  super(webPage, opts);
1899
+ if (opts == null ? void 0 : opts.trackingActiveTab) {
1900
+ const browser = this.page.underlyingPage.browser();
1901
+ browser.on("targetcreated", async (target) => {
1902
+ if (target.type() === "page") {
1903
+ const targetPage = await target.page();
1904
+ if (!targetPage) {
1905
+ console.warn(
1906
+ "got a targetPage event, but the page is not ready yet, skip"
1907
+ );
1908
+ return;
1909
+ }
1910
+ const midscenePage = new WebPage(targetPage);
1911
+ this.page = midscenePage;
1912
+ this.taskExecutor.page = midscenePage;
1913
+ }
1914
+ });
1915
+ }
1893
1916
  }
1894
1917
  };
1895
1918
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,4 +1,4 @@
1
- export { P as AppiumAgent } from './tasks-f2973dd7.js';
1
+ export { P as AppiumAgent } from './tasks-c46ef21f.js';
2
2
  export { P as AppiumPage } from './page-fc3be0ec.js';
3
3
  import '@midscene/core/dist/lib/types/types-64c4d87b';
4
4
  import '@midscene/core';
@@ -1,4 +1,4 @@
1
- import { P as PageAgent } from './tasks-f2973dd7.js';
1
+ import { P as PageAgent } from './tasks-c46ef21f.js';
2
2
  import { B as BridgeConnectTabOptions, C as ChromeExtensionPageBrowserSide } from './browser-fd2e9b68.js';
3
3
  import '@midscene/core/dist/lib/types/types-64c4d87b';
4
4
  import './page-fc3be0ec.js';
@@ -1,6 +1,6 @@
1
1
  import { C as ChromeExtensionProxyPage } from './page-fc3be0ec.js';
2
2
  export { a as ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED } from './page-fc3be0ec.js';
3
- import { P as PageAgent } from './tasks-f2973dd7.js';
3
+ import { P as PageAgent } from './tasks-c46ef21f.js';
4
4
  import 'playwright';
5
5
  import '@midscene/core';
6
6
  import 'puppeteer';
@@ -1,10 +1,10 @@
1
1
  export { PlayWrightAiFixtureType, PlaywrightAiFixture } from './playwright.js';
2
- export { P as AppiumAgent, P as PlaywrightAgent } from './tasks-f2973dd7.js';
2
+ export { P as AppiumAgent, P as PlaywrightAgent } from './tasks-c46ef21f.js';
3
3
  export { P as AppiumPage } from './page-fc3be0ec.js';
4
4
  export { StaticPageAgent } from './playground.js';
5
5
  export { PuppeteerAgent } from './puppeteer.js';
6
6
  export { generateExtractData } from './debug.js';
7
- export { S as ScriptPlayer, f as flowItemBrief, p as parseYamlScript } from './utils-ccbb6ff6.js';
7
+ export { S as ScriptPlayer, f as flowItemBrief, p as parseYamlScript } from './utils-292d153d.js';
8
8
  import '@midscene/core';
9
9
  import '@playwright/test';
10
10
  import 'playwright';
@@ -1,6 +1,6 @@
1
1
  import { S as StaticPage } from './page-fc3be0ec.js';
2
2
  export { a as ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED } from './page-fc3be0ec.js';
3
- import { P as PageAgent } from './tasks-f2973dd7.js';
3
+ import { P as PageAgent } from './tasks-c46ef21f.js';
4
4
  import 'playwright';
5
5
  import '@midscene/core';
6
6
  import 'puppeteer';
@@ -1,8 +1,8 @@
1
1
  import { AgentWaitForOpt } from '@midscene/core';
2
2
  import { TestInfo } from '@playwright/test';
3
3
  import { Page } from 'playwright';
4
- import { b as PageTaskExecutor } from './tasks-f2973dd7.js';
5
- export { P as PlaywrightAgent } from './tasks-f2973dd7.js';
4
+ import { b as PageTaskExecutor } from './tasks-c46ef21f.js';
5
+ export { P as PlaywrightAgent } from './tasks-c46ef21f.js';
6
6
  export { c as PlaywrightWebPage } from './page-fc3be0ec.js';
7
7
  export { overrideAIConfig } from '@midscene/core/env';
8
8
  import '@midscene/core/dist/lib/types/types-64c4d87b';
@@ -1,4 +1,4 @@
1
- import { P as PageAgent, a as PageAgentOpt } from './tasks-f2973dd7.js';
1
+ import { P as PageAgent, a as PageAgentOpt } from './tasks-c46ef21f.js';
2
2
  import { Page } from 'puppeteer';
3
3
  export { b as PuppeteerWebPage } from './page-fc3be0ec.js';
4
4
  export { overrideAIConfig } from '@midscene/core/env';
@@ -10,16 +10,17 @@ import 'playwright';
10
10
  import '@midscene/shared/constants';
11
11
  import 'webdriverio';
12
12
 
13
+ interface FreeFn {
14
+ name: string;
15
+ fn: () => void;
16
+ }
13
17
  declare function puppeteerAgentForTarget(target: MidsceneYamlScriptEnv, preference?: {
14
18
  headed?: boolean;
15
19
  keepWindow?: boolean;
16
20
  testId?: string;
17
21
  }): Promise<{
18
22
  agent: PuppeteerAgent;
19
- freeFn: {
20
- name: string;
21
- fn: () => void;
22
- }[];
23
+ freeFn: FreeFn[];
23
24
  }>;
24
25
 
25
26
  declare class PuppeteerAgent extends PageAgent {
@@ -79,6 +79,7 @@ declare class TaskCache {
79
79
  }
80
80
 
81
81
  interface PageAgentOpt {
82
+ trackingActiveTab?: boolean;
82
83
  testId?: string;
83
84
  cacheId?: string;
84
85
  groupName?: string;
@@ -1,4 +1,4 @@
1
- import { P as PageAgent } from './tasks-f2973dd7.js';
1
+ import { P as PageAgent } from './tasks-c46ef21f.js';
2
2
  import { ScriptPlayerTaskStatus, ScriptPlayerStatusValue, MidsceneYamlScript, MidsceneYamlScriptEnv, FreeFn, MidsceneYamlFlowItem } from '@midscene/core';
3
3
 
4
4
  declare class ScriptPlayer {
@@ -1,6 +1,6 @@
1
- export { S as ScriptPlayer, f as flowItemBrief, p as parseYamlScript } from './utils-ccbb6ff6.js';
1
+ export { S as ScriptPlayer, f as flowItemBrief, p as parseYamlScript } from './utils-292d153d.js';
2
2
  import { MidsceneYamlScriptEnv, MidsceneYamlTask } from '@midscene/core';
3
- import './tasks-f2973dd7.js';
3
+ import './tasks-c46ef21f.js';
4
4
  import '@midscene/core/dist/lib/types/types-64c4d87b';
5
5
  import './page-fc3be0ec.js';
6
6
  import 'playwright';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@midscene/web",
3
3
  "description": "Automate browser actions, extract data, and perform assertions using AI. It offers JavaScript SDK, Chrome extension, and support for scripting in YAML. See https://midscenejs.com/ for details.",
4
- "version": "0.10.1",
4
+ "version": "0.10.2-beta-20250123090318.0",
5
5
  "repository": "https://github.com/web-infra-dev/midscene",
6
6
  "homepage": "https://midscenejs.com/",
7
7
  "jsnext:source": "./src/index.ts",
@@ -139,8 +139,8 @@
139
139
  "openai": "4.57.1",
140
140
  "socket.io": "4.8.1",
141
141
  "socket.io-client": "4.8.1",
142
- "@midscene/core": "0.10.1",
143
- "@midscene/shared": "0.10.1"
142
+ "@midscene/shared": "0.10.2-beta-20250123090318.0",
143
+ "@midscene/core": "0.10.2-beta-20250123090318.0"
144
144
  },
145
145
  "devDependencies": {
146
146
  "@modern-js/module-tools": "2.60.6",