@midscene/web 0.24.2-beta-20250801111909.0 → 0.25.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.
Files changed (72) hide show
  1. package/dist/es/agent.js +34 -24
  2. package/dist/es/agent.js.map +1 -1
  3. package/dist/es/bridge-mode-browser.js +3 -3
  4. package/dist/es/bridge-mode-browser.js.map +1 -1
  5. package/dist/es/bridge-mode.js +36 -26
  6. package/dist/es/bridge-mode.js.map +1 -1
  7. package/dist/es/chrome-extension.js +35 -25
  8. package/dist/es/chrome-extension.js.map +1 -1
  9. package/dist/es/index.js +55 -40
  10. package/dist/es/index.js.map +1 -1
  11. package/dist/es/midscene-playground.js +34 -24
  12. package/dist/es/midscene-playground.js.map +1 -1
  13. package/dist/es/midscene-server.js +2 -0
  14. package/dist/es/midscene-server.js.map +1 -1
  15. package/dist/es/playground.js +34 -24
  16. package/dist/es/playground.js.map +1 -1
  17. package/dist/es/playwright-report.js +2 -0
  18. package/dist/es/playwright-report.js.map +1 -1
  19. package/dist/es/playwright-reporter.js +2 -0
  20. package/dist/es/playwright-reporter.js.map +1 -1
  21. package/dist/es/playwright.js +52 -37
  22. package/dist/es/playwright.js.map +1 -1
  23. package/dist/es/puppeteer-agent-launcher.js +52 -37
  24. package/dist/es/puppeteer-agent-launcher.js.map +1 -1
  25. package/dist/es/puppeteer.js +50 -35
  26. package/dist/es/puppeteer.js.map +1 -1
  27. package/dist/es/utils.js +20 -5
  28. package/dist/es/utils.js.map +1 -1
  29. package/dist/lib/agent.js +34 -24
  30. package/dist/lib/agent.js.map +1 -1
  31. package/dist/lib/bridge-mode-browser.js +3 -3
  32. package/dist/lib/bridge-mode-browser.js.map +1 -1
  33. package/dist/lib/bridge-mode.js +36 -26
  34. package/dist/lib/bridge-mode.js.map +1 -1
  35. package/dist/lib/chrome-extension.js +35 -25
  36. package/dist/lib/chrome-extension.js.map +1 -1
  37. package/dist/lib/index.js +55 -40
  38. package/dist/lib/index.js.map +1 -1
  39. package/dist/lib/midscene-playground.js +34 -24
  40. package/dist/lib/midscene-playground.js.map +1 -1
  41. package/dist/lib/midscene-server.js +2 -0
  42. package/dist/lib/midscene-server.js.map +1 -1
  43. package/dist/lib/playground.js +34 -24
  44. package/dist/lib/playground.js.map +1 -1
  45. package/dist/lib/playwright-report.js +2 -0
  46. package/dist/lib/playwright-report.js.map +1 -1
  47. package/dist/lib/playwright-reporter.js +2 -0
  48. package/dist/lib/playwright-reporter.js.map +1 -1
  49. package/dist/lib/playwright.js +52 -37
  50. package/dist/lib/playwright.js.map +1 -1
  51. package/dist/lib/puppeteer-agent-launcher.js +52 -37
  52. package/dist/lib/puppeteer-agent-launcher.js.map +1 -1
  53. package/dist/lib/puppeteer.js +50 -35
  54. package/dist/lib/puppeteer.js.map +1 -1
  55. package/dist/lib/utils.js +20 -5
  56. package/dist/lib/utils.js.map +1 -1
  57. package/dist/types/agent.d.ts +1 -1
  58. package/dist/types/bridge-mode-browser.d.ts +2 -2
  59. package/dist/types/bridge-mode.d.ts +2 -2
  60. package/dist/types/{browser-2777ed61.d.ts → browser-223174c6.d.ts} +1 -1
  61. package/dist/types/chrome-extension.d.ts +2 -2
  62. package/dist/types/index.d.ts +2 -2
  63. package/dist/types/midscene-server.d.ts +1 -1
  64. package/dist/types/{page-7aeb250e.d.ts → page-6ab61285.d.ts} +0 -1
  65. package/dist/types/playground.d.ts +2 -2
  66. package/dist/types/playwright.d.ts +1 -1
  67. package/dist/types/puppeteer-agent-launcher.d.ts +1 -1
  68. package/dist/types/puppeteer.d.ts +2 -2
  69. package/dist/types/{utils-54b48285.d.ts → utils-b29a5d99.d.ts} +1 -1
  70. package/dist/types/utils.d.ts +1 -1
  71. package/dist/types/yaml.d.ts +2 -2
  72. package/package.json +3 -3
package/dist/es/agent.js CHANGED
@@ -415,7 +415,7 @@ import {
415
415
  DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT
416
416
  } from "@midscene/shared/constants";
417
417
  import { getAIConfigInBoolean, vlLocateMode } from "@midscene/shared/env";
418
- import { getDebug as getDebug4 } from "@midscene/shared/logger";
418
+ import { getDebug as getDebug5 } from "@midscene/shared/logger";
419
419
  import { assert as assert7 } from "@midscene/shared/utils";
420
420
 
421
421
  // src/common/tasks.ts
@@ -434,7 +434,7 @@ import {
434
434
  MIDSCENE_REPLANNING_CYCLE_LIMIT,
435
435
  getAIConfigInNumber as getAIConfigInNumber2
436
436
  } from "@midscene/shared/env";
437
- import { getDebug as getDebug2 } from "@midscene/shared/logger";
437
+ import { getDebug as getDebug3 } from "@midscene/shared/logger";
438
438
  import { assert as assert5 } from "@midscene/shared/utils";
439
439
 
440
440
  // src/common/ui-utils.ts
@@ -539,6 +539,7 @@ import {
539
539
  traverseTree
540
540
  } from "@midscene/shared/extractor";
541
541
  import { resizeImgBase64 } from "@midscene/shared/img";
542
+ import { getDebug as getDebug2 } from "@midscene/shared/logger";
542
543
  import { assert as assert4, logMsg, uuid } from "@midscene/shared/utils";
543
544
  import dayjs from "dayjs";
544
545
 
@@ -584,7 +585,7 @@ import yaml3 from "js-yaml";
584
585
  import semver from "semver";
585
586
 
586
587
  // package.json
587
- var version = "0.24.2-beta-20250801111909.0";
588
+ var version = "0.25.0";
588
589
 
589
590
  // src/common/task-cache.ts
590
591
  var DEFAULT_CACHE_MAX_FILENAME_LENGTH = 200;
@@ -769,23 +770,33 @@ cache file: ${cacheFile}`
769
770
  };
770
771
 
771
772
  // src/common/utils.ts
773
+ var debug2 = getDebug2("tool:profile");
772
774
  async function parseContextFromWebPage(page, _opt) {
773
775
  assert4(page, "page is required");
774
776
  if (page._forceUsePageContext) {
775
777
  return await page._forceUsePageContext();
776
778
  }
779
+ debug2("Getting page URL");
777
780
  const url = await page.url();
781
+ debug2("URL end");
782
+ debug2("Uploading test info to server");
778
783
  uploadTestInfoToServer({ testUrl: url });
784
+ debug2("UploadTestInfoToServer end");
779
785
  let screenshotBase64;
780
786
  let tree;
787
+ debug2("Starting parallel operations: screenshot and element tree");
781
788
  await Promise.all([
782
789
  page.screenshotBase64().then((base64) => {
783
790
  screenshotBase64 = base64;
791
+ debug2("ScreenshotBase64 end");
784
792
  }),
785
793
  page.getElementsNodeTree().then(async (treeRoot) => {
786
794
  tree = treeRoot;
795
+ debug2("GetElementsNodeTree end");
787
796
  })
788
797
  ]);
798
+ debug2("ParseContextFromWebPage end");
799
+ debug2("Traversing element tree");
789
800
  const webTree = traverseTree(tree, (elementInfo) => {
790
801
  const { rect, id, content, attributes, indexId, isVisible } = elementInfo;
791
802
  return new WebElementInfo({
@@ -797,13 +808,17 @@ async function parseContextFromWebPage(page, _opt) {
797
808
  isVisible
798
809
  });
799
810
  });
811
+ debug2("TraverseTree end");
800
812
  assert4(screenshotBase64, "screenshotBase64 is required");
801
813
  const size = await page.size();
814
+ debug2(`size: ${size.width}x${size.height} dpr: ${size.dpr}`);
802
815
  if (size.dpr && size.dpr > 1) {
816
+ debug2("Resizing screenshot for high DPR display");
803
817
  screenshotBase64 = await resizeImgBase64(screenshotBase64, {
804
818
  width: size.width,
805
819
  height: size.height
806
820
  });
821
+ debug2("ResizeImgBase64 end");
807
822
  }
808
823
  return {
809
824
  tree: webTree,
@@ -919,7 +934,7 @@ var parsePrompt = (prompt) => {
919
934
  };
920
935
 
921
936
  // src/common/tasks.ts
922
- var debug2 = getDebug2("page-task-executor");
937
+ var debug3 = getDebug3("page-task-executor");
923
938
  var defaultReplanningCycleLimit = 10;
924
939
  var isAndroidPage = (page) => {
925
940
  return page.pageType === "android";
@@ -970,7 +985,7 @@ var PageTaskExecutor = class {
970
985
  if (info?.id) {
971
986
  elementId = info.id;
972
987
  } else {
973
- debug2(
988
+ debug3(
974
989
  "no element id found for position node, will not update cache",
975
990
  element
976
991
  );
@@ -983,7 +998,7 @@ var PageTaskExecutor = class {
983
998
  const result = await this.page.getXpathsById(elementId);
984
999
  return result;
985
1000
  } catch (error) {
986
- debug2("getXpathsById error: ", error);
1001
+ debug3("getXpathsById error: ", error);
987
1002
  }
988
1003
  }
989
1004
  prependExecutorWithScreenshot(taskApply, appendAfterExecution = false) {
@@ -1053,7 +1068,7 @@ var PageTaskExecutor = class {
1053
1068
  };
1054
1069
  this.insight.onceDumpUpdatedFn = dumpCollector;
1055
1070
  const shotTime = Date.now();
1056
- const pageContext = param?._forceContext || await this.insight.contextRetrieverFn("locate");
1071
+ const pageContext = await this.insight.contextRetrieverFn("locate");
1057
1072
  task.pageContext = pageContext;
1058
1073
  const recordItem = {
1059
1074
  type: "screenshot",
@@ -1102,7 +1117,7 @@ var PageTaskExecutor = class {
1102
1117
  locateCacheRecord
1103
1118
  );
1104
1119
  } else {
1105
- debug2(
1120
+ debug3(
1106
1121
  "no xpaths found, will not update cache",
1107
1122
  cachePrompt,
1108
1123
  elementXpaths
@@ -2055,9 +2070,9 @@ var PageTaskExecutor = class {
2055
2070
  };
2056
2071
 
2057
2072
  // src/common/plan-builder.ts
2058
- import { getDebug as getDebug3 } from "@midscene/shared/logger";
2073
+ import { getDebug as getDebug4 } from "@midscene/shared/logger";
2059
2074
  import { assert as assert6 } from "@midscene/shared/utils";
2060
- var debug3 = getDebug3("plan-builder");
2075
+ var debug4 = getDebug4("plan-builder");
2061
2076
  function buildPlans(type, locateParam, param) {
2062
2077
  let returnPlans = [];
2063
2078
  const locatePlan = locateParam ? {
@@ -2129,14 +2144,14 @@ function buildPlans(type, locateParam, param) {
2129
2144
  returnPlans = [locatePlan2];
2130
2145
  }
2131
2146
  if (returnPlans) {
2132
- debug3("buildPlans", returnPlans);
2147
+ debug4("buildPlans", returnPlans);
2133
2148
  return returnPlans;
2134
2149
  }
2135
2150
  throw new Error(`Not supported type: ${type}`);
2136
2151
  }
2137
2152
 
2138
2153
  // src/common/agent.ts
2139
- var debug4 = getDebug4("web-integration");
2154
+ var debug5 = getDebug5("web-integration");
2140
2155
  var distanceOfTwoPoints = (p1, p2) => {
2141
2156
  const [x1, y1] = p1;
2142
2157
  const [x2, y2] = p2;
@@ -2204,9 +2219,6 @@ var PageAgent = class {
2204
2219
  ignoreMarker: !!vlLocateMode()
2205
2220
  });
2206
2221
  }
2207
- async _snapshotContext() {
2208
- return await this.getUIContext("locate");
2209
- }
2210
2222
  async setAIActionContext(prompt) {
2211
2223
  this.opts.aiActionContext = prompt;
2212
2224
  }
@@ -2245,7 +2257,7 @@ var PageAgent = class {
2245
2257
  type: "dump",
2246
2258
  generateReport
2247
2259
  });
2248
- debug4("writeOutActionDumps", this.reportFile);
2260
+ debug5("writeOutActionDumps", this.reportFile);
2249
2261
  if (generateReport && autoPrintReportMsg && this.reportFile) {
2250
2262
  printReportMsg(this.reportFile);
2251
2263
  }
@@ -2280,13 +2292,11 @@ ${errorTask?.errorStack}`, {
2280
2292
  const deepThink = opt.deepThink ?? false;
2281
2293
  const cacheable = opt.cacheable ?? true;
2282
2294
  const xpath = opt.xpath;
2283
- const _forceContext = opt._forceContext;
2284
2295
  return {
2285
2296
  prompt,
2286
2297
  deepThink,
2287
2298
  cacheable,
2288
- xpath,
2289
- _forceContext
2299
+ xpath
2290
2300
  };
2291
2301
  }
2292
2302
  return {
@@ -2395,7 +2405,7 @@ ${errorTask?.errorStack}`, {
2395
2405
  matchedCache.cacheContent?.yamlWorkflow
2396
2406
  );
2397
2407
  await await this.afterTaskRunning(executor2);
2398
- debug4("matched cache, will call .runYaml to run the action");
2408
+ debug5("matched cache, will call .runYaml to run the action");
2399
2409
  const yaml5 = matchedCache.cacheContent?.yamlWorkflow;
2400
2410
  return this.runYaml(yaml5);
2401
2411
  }
@@ -2458,7 +2468,7 @@ ${errorTask?.errorStack}`, {
2458
2468
  if (retryCount >= 2) {
2459
2469
  deepThink = true;
2460
2470
  }
2461
- debug4(
2471
+ debug5(
2462
2472
  "aiDescribe",
2463
2473
  center,
2464
2474
  "verifyPrompt",
@@ -2469,7 +2479,7 @@ ${errorTask?.errorStack}`, {
2469
2479
  deepThink
2470
2480
  );
2471
2481
  const text = await this.insight.describe(center, { deepThink });
2472
- debug4("aiDescribe text", text);
2482
+ debug5("aiDescribe text", text);
2473
2483
  assert7(text.description, `failed to describe element at [${center}]`);
2474
2484
  resultPrompt = text.description;
2475
2485
  verifyResult = await this.verifyLocator(
@@ -2491,7 +2501,7 @@ ${errorTask?.errorStack}`, {
2491
2501
  };
2492
2502
  }
2493
2503
  async verifyLocator(prompt, locateOpt, expectCenter, verifyLocateOption) {
2494
- debug4("verifyLocator", prompt, locateOpt, expectCenter, verifyLocateOption);
2504
+ debug5("verifyLocator", prompt, locateOpt, expectCenter, verifyLocateOption);
2495
2505
  const { center: verifyCenter, rect: verifyRect } = await this.aiLocate(
2496
2506
  prompt,
2497
2507
  locateOpt
@@ -2505,7 +2515,7 @@ ${errorTask?.errorStack}`, {
2505
2515
  center: verifyCenter,
2506
2516
  centerDistance: distance
2507
2517
  };
2508
- debug4("aiDescribe verifyResult", verifyResult);
2518
+ debug5("aiDescribe verifyResult", verifyResult);
2509
2519
  return verifyResult;
2510
2520
  }
2511
2521
  async aiLocate(prompt, opt) {