@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.
- package/dist/es/agent.js +34 -24
- package/dist/es/agent.js.map +1 -1
- package/dist/es/bridge-mode-browser.js +3 -3
- package/dist/es/bridge-mode-browser.js.map +1 -1
- package/dist/es/bridge-mode.js +36 -26
- package/dist/es/bridge-mode.js.map +1 -1
- package/dist/es/chrome-extension.js +35 -25
- package/dist/es/chrome-extension.js.map +1 -1
- package/dist/es/index.js +55 -40
- package/dist/es/index.js.map +1 -1
- package/dist/es/midscene-playground.js +34 -24
- package/dist/es/midscene-playground.js.map +1 -1
- package/dist/es/midscene-server.js +2 -0
- package/dist/es/midscene-server.js.map +1 -1
- package/dist/es/playground.js +34 -24
- package/dist/es/playground.js.map +1 -1
- package/dist/es/playwright-report.js +2 -0
- package/dist/es/playwright-report.js.map +1 -1
- package/dist/es/playwright-reporter.js +2 -0
- package/dist/es/playwright-reporter.js.map +1 -1
- package/dist/es/playwright.js +52 -37
- package/dist/es/playwright.js.map +1 -1
- package/dist/es/puppeteer-agent-launcher.js +52 -37
- package/dist/es/puppeteer-agent-launcher.js.map +1 -1
- package/dist/es/puppeteer.js +50 -35
- package/dist/es/puppeteer.js.map +1 -1
- package/dist/es/utils.js +20 -5
- package/dist/es/utils.js.map +1 -1
- package/dist/lib/agent.js +34 -24
- package/dist/lib/agent.js.map +1 -1
- package/dist/lib/bridge-mode-browser.js +3 -3
- package/dist/lib/bridge-mode-browser.js.map +1 -1
- package/dist/lib/bridge-mode.js +36 -26
- package/dist/lib/bridge-mode.js.map +1 -1
- package/dist/lib/chrome-extension.js +35 -25
- package/dist/lib/chrome-extension.js.map +1 -1
- package/dist/lib/index.js +55 -40
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/midscene-playground.js +34 -24
- package/dist/lib/midscene-playground.js.map +1 -1
- package/dist/lib/midscene-server.js +2 -0
- package/dist/lib/midscene-server.js.map +1 -1
- package/dist/lib/playground.js +34 -24
- package/dist/lib/playground.js.map +1 -1
- package/dist/lib/playwright-report.js +2 -0
- package/dist/lib/playwright-report.js.map +1 -1
- package/dist/lib/playwright-reporter.js +2 -0
- package/dist/lib/playwright-reporter.js.map +1 -1
- package/dist/lib/playwright.js +52 -37
- package/dist/lib/playwright.js.map +1 -1
- package/dist/lib/puppeteer-agent-launcher.js +52 -37
- package/dist/lib/puppeteer-agent-launcher.js.map +1 -1
- package/dist/lib/puppeteer.js +50 -35
- package/dist/lib/puppeteer.js.map +1 -1
- package/dist/lib/utils.js +20 -5
- package/dist/lib/utils.js.map +1 -1
- package/dist/types/agent.d.ts +1 -1
- package/dist/types/bridge-mode-browser.d.ts +2 -2
- package/dist/types/bridge-mode.d.ts +2 -2
- package/dist/types/{browser-2777ed61.d.ts → browser-223174c6.d.ts} +1 -1
- package/dist/types/chrome-extension.d.ts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/midscene-server.d.ts +1 -1
- package/dist/types/{page-7aeb250e.d.ts → page-6ab61285.d.ts} +0 -1
- package/dist/types/playground.d.ts +2 -2
- package/dist/types/playwright.d.ts +1 -1
- package/dist/types/puppeteer-agent-launcher.d.ts +1 -1
- package/dist/types/puppeteer.d.ts +2 -2
- package/dist/types/{utils-54b48285.d.ts → utils-b29a5d99.d.ts} +1 -1
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/yaml.d.ts +2 -2
- 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
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
|
2073
|
+
import { getDebug as getDebug4 } from "@midscene/shared/logger";
|
|
2059
2074
|
import { assert as assert6 } from "@midscene/shared/utils";
|
|
2060
|
-
var
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2518
|
+
debug5("aiDescribe verifyResult", verifyResult);
|
|
2509
2519
|
return verifyResult;
|
|
2510
2520
|
}
|
|
2511
2521
|
async aiLocate(prompt, opt) {
|