@midscene/cli 0.9.0 → 0.9.1-beta-20250111045755.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.
package/dist/es/index.js CHANGED
@@ -12137,7 +12137,7 @@ var require_package2 = __commonJS({
12137
12137
  module.exports = {
12138
12138
  name: "@midscene/cli",
12139
12139
  description: "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
12140
- version: "0.9.0",
12140
+ version: "0.9.1-beta-20250111045755.0",
12141
12141
  repository: "https://github.com/web-infra-dev/midscene",
12142
12142
  homepage: "https://midscenejs.com/",
12143
12143
  "jsnext:source": "./src/index.ts",
@@ -13382,7 +13382,8 @@ import { readFileSync } from "fs";
13382
13382
  import { basename as basename2, extname } from "path";
13383
13383
  import { ScriptPlayer, parseYamlScript } from "@midscene/web/yaml";
13384
13384
  import { createServer } from "http-server";
13385
- import { assert } from "console";
13385
+ import assert from "assert";
13386
+ import { AgentOverChromeBridge } from "@midscene/web/bridge-mode";
13386
13387
  import { puppeteerAgentForTarget } from "@midscene/web/puppeteer";
13387
13388
  function playYamlFiles(files, options) {
13388
13389
  return __async(this, null, function* () {
@@ -13395,40 +13396,60 @@ function playYamlFiles(files, options) {
13395
13396
  keepWindow: options == null ? void 0 : options.keepWindow,
13396
13397
  testId: fileName
13397
13398
  };
13398
- const player = new ScriptPlayer(
13399
- script,
13400
- (target) => __async(this, null, function* () {
13401
- const freeFn = [];
13402
- let localServer;
13403
- let urlToVisit;
13404
- assert(typeof target.url === "string", "url is required");
13405
- if (target.serve) {
13406
- localServer = yield launchServer(target.serve);
13407
- const serverAddress = localServer.server.address();
13408
- freeFn.push({
13409
- name: "local_server",
13410
- fn: () => localServer == null ? void 0 : localServer.server.close()
13411
- });
13412
- if (target.url.startsWith("/")) {
13413
- urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}${target.url}`;
13414
- } else {
13415
- urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}/${target.url}`;
13416
- }
13417
- target.url = urlToVisit;
13399
+ const player = new ScriptPlayer(script, (target) => __async(this, null, function* () {
13400
+ const freeFn = [];
13401
+ let localServer;
13402
+ let urlToVisit;
13403
+ if (target.serve) {
13404
+ assert(typeof target.url === "string", "url is required in serve mode");
13405
+ localServer = yield launchServer(target.serve);
13406
+ const serverAddress = localServer.server.address();
13407
+ freeFn.push({
13408
+ name: "local_server",
13409
+ fn: () => localServer == null ? void 0 : localServer.server.close()
13410
+ });
13411
+ if (target.url.startsWith("/")) {
13412
+ urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}${target.url}`;
13413
+ } else {
13414
+ urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}/${target.url}`;
13418
13415
  }
13419
- const { agent, freeFn: newFreeFn } = yield puppeteerAgentForTarget(
13416
+ target.url = urlToVisit;
13417
+ }
13418
+ if (!target.bridgeMode) {
13419
+ const { agent: agent2, freeFn: newFreeFn } = yield puppeteerAgentForTarget(
13420
13420
  target,
13421
13421
  preference
13422
13422
  );
13423
13423
  freeFn.push(...newFreeFn);
13424
- return { agent, freeFn };
13425
- }),
13426
- (taskStatus) => {
13427
- if (!isTTY) {
13428
- const { nameText } = singleTaskInfo(taskStatus);
13424
+ return { agent: agent2, freeFn };
13425
+ }
13426
+ assert(
13427
+ target.bridgeMode === "newTabWithUrl" || target.bridgeMode === "currentTab",
13428
+ `bridgeMode config value must be either "newTabWithUrl" or "currentTab", but got ${target.bridgeMode}`
13429
+ );
13430
+ if (target.userAgent || target.viewportWidth || target.viewportHeight || target.viewportScale || target.waitForNetworkIdle || target.cookie) {
13431
+ console.warn(
13432
+ "puppeteer options (userAgent, viewportWidth, viewportHeight, viewportScale, waitForNetworkIdle, cookie) are not supported in bridge mode, will be ignored"
13433
+ );
13434
+ }
13435
+ const agent = new AgentOverChromeBridge();
13436
+ if (target.bridgeMode === "newTabWithUrl") {
13437
+ yield agent.connectNewTabWithUrl(target.url);
13438
+ } else {
13439
+ if (target.url) {
13440
+ console.warn('url will be ignored in bridge mode with "currentTab"');
13429
13441
  }
13442
+ yield agent.connectCurrentTab();
13430
13443
  }
13431
- );
13444
+ freeFn.push({
13445
+ name: "destroy_agent_over_chrome_bridge",
13446
+ fn: () => agent.destroy()
13447
+ });
13448
+ return {
13449
+ agent,
13450
+ freeFn
13451
+ };
13452
+ }));
13432
13453
  fileContextList.push({ file, player });
13433
13454
  }
13434
13455
  if (isTTY) {
package/dist/lib/index.js CHANGED
@@ -5351,7 +5351,7 @@ var require_package2 = __commonJS({
5351
5351
  module2.exports = {
5352
5352
  name: "@midscene/cli",
5353
5353
  description: "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
5354
- version: "0.9.0",
5354
+ version: "0.9.1-beta-20250111045755.0",
5355
5355
  repository: "https://github.com/web-infra-dev/midscene",
5356
5356
  homepage: "https://midscenejs.com/",
5357
5357
  "jsnext:source": "./src/index.ts",
@@ -13198,7 +13198,8 @@ function getRenderedRowCount(contents, stream2) {
13198
13198
  }
13199
13199
 
13200
13200
  // src/yaml-runner.ts
13201
- var import_node_console = require("console");
13201
+ var import_node_assert = __toESM(require("assert"));
13202
+ var import_bridge_mode = require("@midscene/web/bridge-mode");
13202
13203
  var import_puppeteer = require("@midscene/web/puppeteer");
13203
13204
  var launchServer = (dir) => __async(void 0, null, function* () {
13204
13205
  return new Promise((resolve, reject) => {
@@ -13222,40 +13223,60 @@ function playYamlFiles(files, options) {
13222
13223
  keepWindow: options == null ? void 0 : options.keepWindow,
13223
13224
  testId: fileName
13224
13225
  };
13225
- const player = new import_yaml2.ScriptPlayer(
13226
- script,
13227
- (target) => __async(this, null, function* () {
13228
- const freeFn = [];
13229
- let localServer;
13230
- let urlToVisit;
13231
- (0, import_node_console.assert)(typeof target.url === "string", "url is required");
13232
- if (target.serve) {
13233
- localServer = yield launchServer(target.serve);
13234
- const serverAddress = localServer.server.address();
13235
- freeFn.push({
13236
- name: "local_server",
13237
- fn: () => localServer == null ? void 0 : localServer.server.close()
13238
- });
13239
- if (target.url.startsWith("/")) {
13240
- urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}${target.url}`;
13241
- } else {
13242
- urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}/${target.url}`;
13243
- }
13244
- target.url = urlToVisit;
13226
+ const player = new import_yaml2.ScriptPlayer(script, (target) => __async(this, null, function* () {
13227
+ const freeFn = [];
13228
+ let localServer;
13229
+ let urlToVisit;
13230
+ if (target.serve) {
13231
+ (0, import_node_assert.default)(typeof target.url === "string", "url is required in serve mode");
13232
+ localServer = yield launchServer(target.serve);
13233
+ const serverAddress = localServer.server.address();
13234
+ freeFn.push({
13235
+ name: "local_server",
13236
+ fn: () => localServer == null ? void 0 : localServer.server.close()
13237
+ });
13238
+ if (target.url.startsWith("/")) {
13239
+ urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}${target.url}`;
13240
+ } else {
13241
+ urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}/${target.url}`;
13245
13242
  }
13246
- const { agent, freeFn: newFreeFn } = yield (0, import_puppeteer.puppeteerAgentForTarget)(
13243
+ target.url = urlToVisit;
13244
+ }
13245
+ if (!target.bridgeMode) {
13246
+ const { agent: agent2, freeFn: newFreeFn } = yield (0, import_puppeteer.puppeteerAgentForTarget)(
13247
13247
  target,
13248
13248
  preference
13249
13249
  );
13250
13250
  freeFn.push(...newFreeFn);
13251
- return { agent, freeFn };
13252
- }),
13253
- (taskStatus) => {
13254
- if (!isTTY) {
13255
- const { nameText } = singleTaskInfo(taskStatus);
13251
+ return { agent: agent2, freeFn };
13252
+ }
13253
+ (0, import_node_assert.default)(
13254
+ target.bridgeMode === "newTabWithUrl" || target.bridgeMode === "currentTab",
13255
+ `bridgeMode config value must be either "newTabWithUrl" or "currentTab", but got ${target.bridgeMode}`
13256
+ );
13257
+ if (target.userAgent || target.viewportWidth || target.viewportHeight || target.viewportScale || target.waitForNetworkIdle || target.cookie) {
13258
+ console.warn(
13259
+ "puppeteer options (userAgent, viewportWidth, viewportHeight, viewportScale, waitForNetworkIdle, cookie) are not supported in bridge mode, will be ignored"
13260
+ );
13261
+ }
13262
+ const agent = new import_bridge_mode.AgentOverChromeBridge();
13263
+ if (target.bridgeMode === "newTabWithUrl") {
13264
+ yield agent.connectNewTabWithUrl(target.url);
13265
+ } else {
13266
+ if (target.url) {
13267
+ console.warn('url will be ignored in bridge mode with "currentTab"');
13256
13268
  }
13269
+ yield agent.connectCurrentTab();
13257
13270
  }
13258
- );
13271
+ freeFn.push({
13272
+ name: "destroy_agent_over_chrome_bridge",
13273
+ fn: () => agent.destroy()
13274
+ });
13275
+ return {
13276
+ agent,
13277
+ freeFn
13278
+ };
13279
+ }));
13259
13280
  fileContextList.push({ file, player });
13260
13281
  }
13261
13282
  if (isTTY) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@midscene/cli",
3
3
  "description": "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
4
- "version": "0.9.0",
4
+ "version": "0.9.1-beta-20250111045755.0",
5
5
  "repository": "https://github.com/web-infra-dev/midscene",
6
6
  "homepage": "https://midscenejs.com/",
7
7
  "jsnext:source": "./src/index.ts",
@@ -17,8 +17,8 @@
17
17
  "dependencies": {
18
18
  "puppeteer": "23.0.2",
19
19
  "http-server": "14.1.1",
20
- "@midscene/core": "0.9.0",
21
- "@midscene/web": "0.9.0"
20
+ "@midscene/core": "0.9.1-beta-20250111045755.0",
21
+ "@midscene/web": "0.9.1-beta-20250111045755.0"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@modern-js/module-tools": "2.60.6",