@midscene/web 0.19.1 → 0.20.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 +299 -247
- package/dist/es/agent.js.map +1 -1
- package/dist/es/bridge-mode-browser.js +3 -3
- package/dist/es/bridge-mode.js +301 -249
- package/dist/es/bridge-mode.js.map +1 -1
- package/dist/es/chrome-extension.js +342 -290
- package/dist/es/chrome-extension.js.map +1 -1
- package/dist/es/index.js +307 -247
- package/dist/es/index.js.map +1 -1
- package/dist/es/midscene-playground.js +341 -289
- package/dist/es/midscene-playground.js.map +1 -1
- package/dist/es/midscene-server.js +25 -12
- package/dist/es/midscene-server.js.map +1 -1
- package/dist/es/playground.js +341 -289
- package/dist/es/playground.js.map +1 -1
- package/dist/es/playwright-report.js +14 -1
- package/dist/es/playwright-report.js.map +1 -1
- package/dist/es/playwright-reporter.js +14 -1
- package/dist/es/playwright-reporter.js.map +1 -1
- package/dist/es/playwright.js +307 -247
- package/dist/es/playwright.js.map +1 -1
- package/dist/es/puppeteer-agent-launcher.js +299 -247
- package/dist/es/puppeteer-agent-launcher.js.map +1 -1
- package/dist/es/puppeteer.js +299 -247
- package/dist/es/puppeteer.js.map +1 -1
- package/dist/es/utils.js +42 -8
- package/dist/es/utils.js.map +1 -1
- package/dist/es/yaml.js +11 -4
- package/dist/es/yaml.js.map +1 -1
- package/dist/lib/agent.js +308 -256
- package/dist/lib/agent.js.map +1 -1
- package/dist/lib/bridge-mode-browser.js +3 -3
- package/dist/lib/bridge-mode.js +310 -258
- package/dist/lib/bridge-mode.js.map +1 -1
- package/dist/lib/chrome-extension.js +355 -303
- package/dist/lib/chrome-extension.js.map +1 -1
- package/dist/lib/index.js +316 -256
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/midscene-playground.js +354 -302
- package/dist/lib/midscene-playground.js.map +1 -1
- package/dist/lib/midscene-server.js +28 -15
- package/dist/lib/midscene-server.js.map +1 -1
- package/dist/lib/playground.js +354 -302
- package/dist/lib/playground.js.map +1 -1
- package/dist/lib/playwright-report.js +20 -7
- package/dist/lib/playwright-report.js.map +1 -1
- package/dist/lib/playwright-reporter.js +20 -7
- package/dist/lib/playwright-reporter.js.map +1 -1
- package/dist/lib/playwright.js +316 -256
- package/dist/lib/playwright.js.map +1 -1
- package/dist/lib/puppeteer-agent-launcher.js +308 -256
- package/dist/lib/puppeteer-agent-launcher.js.map +1 -1
- package/dist/lib/puppeteer.js +308 -256
- package/dist/lib/puppeteer.js.map +1 -1
- package/dist/lib/utils.js +48 -13
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/yaml.js +11 -4
- package/dist/lib/yaml.js.map +1 -1
- package/dist/types/agent.d.ts +6 -102
- package/dist/types/bridge-mode-browser.d.ts +3 -2
- package/dist/types/bridge-mode.d.ts +4 -4
- package/dist/types/{browser-5dbb4bfb.d.ts → browser-118d886d.d.ts} +1 -1
- package/dist/types/chrome-extension.d.ts +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/midscene-server.d.ts +2 -2
- package/dist/types/{page-90e9f9a7.d.ts → page-471361cd.d.ts} +102 -3
- package/dist/types/playground.d.ts +2 -2
- package/dist/types/playwright.d.ts +6 -2
- package/dist/types/puppeteer-agent-launcher.d.ts +1 -1
- package/dist/types/puppeteer.d.ts +3 -3
- package/dist/types/utils.d.ts +2 -1
- package/dist/types/yaml.d.ts +1 -1
- package/package.json +3 -3
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Page as Page$2 } from 'playwright';
|
|
2
2
|
import * as _midscene_core from '@midscene/core';
|
|
3
|
-
import { BaseElement, Rect, UIContext, PlaywrightParserOpt, PlanningLocateParam, ElementTreeNode, ExecutionDump, Size, Point, PageType } from '@midscene/core';
|
|
3
|
+
import { BaseElement, Rect, Insight, ExecutionTaskProgressOptions, PlanningAction, ExecutionTaskApply, Executor, MidsceneYamlFlowItem, InsightExtractParam, InsightExtractOption, InsightAssertionResponse, PlanningActionParamWaitFor, UIContext, PlaywrightParserOpt, PlanningLocateParam, ElementTreeNode, ExecutionDump, Size, Point, PageType } from '@midscene/core';
|
|
4
4
|
import { ElementInfo, ElementNode } from '@midscene/shared/extractor';
|
|
5
5
|
import { Page as Page$1, KeyInput } from 'puppeteer';
|
|
6
6
|
import { DebugFunction } from '@midscene/shared/logger';
|
|
7
7
|
import { NodeType } from '@midscene/shared/constants';
|
|
8
|
+
import { ChatCompletionMessageParam } from '@midscene/core/ai-model';
|
|
8
9
|
|
|
9
10
|
declare class WebElementInfo implements BaseElement {
|
|
10
11
|
content: string;
|
|
@@ -32,6 +33,103 @@ declare class WebElementInfo implements BaseElement {
|
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
interface PlanningCache {
|
|
37
|
+
type: 'plan';
|
|
38
|
+
prompt: string;
|
|
39
|
+
yamlWorkflow: string;
|
|
40
|
+
}
|
|
41
|
+
interface LocateCache {
|
|
42
|
+
type: 'locate';
|
|
43
|
+
prompt: string;
|
|
44
|
+
xpaths: string[];
|
|
45
|
+
}
|
|
46
|
+
interface MatchCacheResult<T extends PlanningCache | LocateCache> {
|
|
47
|
+
cacheContent: T;
|
|
48
|
+
updateFn: (cb: (cache: T) => void) => void;
|
|
49
|
+
}
|
|
50
|
+
type CacheFileContent = {
|
|
51
|
+
midsceneVersion: string;
|
|
52
|
+
cacheId: string;
|
|
53
|
+
caches: Array<PlanningCache | LocateCache>;
|
|
54
|
+
};
|
|
55
|
+
declare class TaskCache {
|
|
56
|
+
cacheId: string;
|
|
57
|
+
cacheFilePath?: string;
|
|
58
|
+
cache: CacheFileContent;
|
|
59
|
+
isCacheResultUsed: boolean;
|
|
60
|
+
cacheOriginalLength: number;
|
|
61
|
+
private matchedCacheIndices;
|
|
62
|
+
constructor(cacheId: string, isCacheResultUsed: boolean, cacheFilePath?: string);
|
|
63
|
+
matchCache(prompt: string, type: 'plan' | 'locate'): MatchCacheResult<PlanningCache | LocateCache> | undefined;
|
|
64
|
+
matchPlanCache(prompt: string): MatchCacheResult<PlanningCache> | undefined;
|
|
65
|
+
matchLocateCache(prompt: string): MatchCacheResult<LocateCache> | undefined;
|
|
66
|
+
appendCache(cache: PlanningCache | LocateCache): void;
|
|
67
|
+
loadCacheFromFile(): CacheFileContent | undefined;
|
|
68
|
+
flushCacheToFile(): void;
|
|
69
|
+
updateOrAppendCacheRecord(newRecord: PlanningCache | LocateCache, cachedRecord?: MatchCacheResult<PlanningCache | LocateCache>): void;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
interface ExecutionResult<OutputType = any> {
|
|
73
|
+
output: OutputType;
|
|
74
|
+
executor: Executor;
|
|
75
|
+
}
|
|
76
|
+
declare class PageTaskExecutor {
|
|
77
|
+
page: WebPage$1;
|
|
78
|
+
insight: Insight<WebElementInfo, WebUIContext>;
|
|
79
|
+
taskCache?: TaskCache;
|
|
80
|
+
conversationHistory: ChatCompletionMessageParam[];
|
|
81
|
+
onTaskStartCallback?: ExecutionTaskProgressOptions['onTaskStart'];
|
|
82
|
+
constructor(page: WebPage$1, insight: Insight<WebElementInfo, WebUIContext>, opts: {
|
|
83
|
+
taskCache?: TaskCache;
|
|
84
|
+
onTaskStart?: ExecutionTaskProgressOptions['onTaskStart'];
|
|
85
|
+
});
|
|
86
|
+
private recordScreenshot;
|
|
87
|
+
private getElementXpath;
|
|
88
|
+
private prependExecutorWithScreenshot;
|
|
89
|
+
convertPlanToExecutable(plans: PlanningAction[], opts?: {
|
|
90
|
+
cacheable?: boolean;
|
|
91
|
+
}): Promise<{
|
|
92
|
+
tasks: ExecutionTaskApply<any, any, any, any>[];
|
|
93
|
+
}>;
|
|
94
|
+
private setupPlanningContext;
|
|
95
|
+
loadYamlFlowAsPlanning(userInstruction: string, yamlString: string): Promise<{
|
|
96
|
+
executor: Executor;
|
|
97
|
+
}>;
|
|
98
|
+
private planningTaskFromPrompt;
|
|
99
|
+
private planningTaskToGoal;
|
|
100
|
+
runPlans(title: string, plans: PlanningAction[], opts?: {
|
|
101
|
+
cacheable?: boolean;
|
|
102
|
+
}): Promise<ExecutionResult>;
|
|
103
|
+
action(userPrompt: string, actionContext?: string, opts?: {
|
|
104
|
+
cacheable?: boolean;
|
|
105
|
+
}): Promise<ExecutionResult<{
|
|
106
|
+
yamlFlow?: MidsceneYamlFlowItem[];
|
|
107
|
+
} | undefined>>;
|
|
108
|
+
actionToGoal(userPrompt: string, opts?: {
|
|
109
|
+
cacheable?: boolean;
|
|
110
|
+
}): Promise<ExecutionResult<{
|
|
111
|
+
yamlFlow?: MidsceneYamlFlowItem[];
|
|
112
|
+
} | undefined>>;
|
|
113
|
+
private createTypeQueryTask;
|
|
114
|
+
query(demand: InsightExtractParam, opt?: InsightExtractOption): Promise<ExecutionResult>;
|
|
115
|
+
boolean(prompt: string, opt?: InsightExtractOption): Promise<ExecutionResult<boolean>>;
|
|
116
|
+
number(prompt: string, opt?: InsightExtractOption): Promise<ExecutionResult<number>>;
|
|
117
|
+
string(prompt: string, opt?: InsightExtractOption): Promise<ExecutionResult<string>>;
|
|
118
|
+
assert(assertion: string): Promise<ExecutionResult<InsightAssertionResponse>>;
|
|
119
|
+
/**
|
|
120
|
+
* Append a message to the conversation history
|
|
121
|
+
* For user messages with images:
|
|
122
|
+
* - Keep max 4 user image messages in history
|
|
123
|
+
* - Remove oldest user image message when limit reached
|
|
124
|
+
* For assistant messages:
|
|
125
|
+
* - Simply append to history
|
|
126
|
+
* @param conversationHistory Message to append
|
|
127
|
+
*/
|
|
128
|
+
private appendConversationHistory;
|
|
129
|
+
private appendErrorPlan;
|
|
130
|
+
waitFor(assertion: string, opt: PlanningActionParamWaitFor): Promise<ExecutionResult<void>>;
|
|
131
|
+
}
|
|
132
|
+
|
|
35
133
|
type WebUIContext = UIContext<WebElementInfo> & {
|
|
36
134
|
url: string;
|
|
37
135
|
};
|
|
@@ -48,6 +146,7 @@ declare const ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED = "NOT_IMPLEMENTED_AS_DESIG
|
|
|
48
146
|
declare function replaceIllegalPathCharsAndSpace(str: string): string;
|
|
49
147
|
declare function forceClosePopup(page: Page$1 | Page$2, debug: DebugFunction): void;
|
|
50
148
|
declare function matchElementFromPlan(planLocateParam: PlanningLocateParam, tree: ElementTreeNode<BaseElement>): any;
|
|
149
|
+
declare function matchElementFromCache(taskExecutor: PageTaskExecutor, xpaths: string[] | undefined, cachePrompt: string, cacheable: boolean | undefined): Promise<any>;
|
|
51
150
|
declare function trimContextByViewport(execution: ExecutionDump): {
|
|
52
151
|
tasks: {
|
|
53
152
|
type: any;
|
|
@@ -60,7 +159,7 @@ declare function trimContextByViewport(execution: ExecutionDump): {
|
|
|
60
159
|
output?: any;
|
|
61
160
|
log?: any;
|
|
62
161
|
recorder?: _midscene_core.ExecutionRecorderItem[];
|
|
63
|
-
|
|
162
|
+
hitBy?: _midscene_core.ExecutionTaskHitBy;
|
|
64
163
|
status: "pending" | "running" | "finished" | "failed" | "cancelled";
|
|
65
164
|
error?: string;
|
|
66
165
|
errorStack?: string;
|
|
@@ -368,4 +467,4 @@ declare class WebPage extends Page<'playwright', Page$2> {
|
|
|
368
467
|
constructor(page: Page$2);
|
|
369
468
|
}
|
|
370
469
|
|
|
371
|
-
export { type AndroidDevicePage as A, ChromeExtensionProxyPage as C, ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED as E, type PuppeteerPageOpt as P, StaticPage as S, type WebPage$1 as W, type AndroidDeviceInputOpt as a, AbstractPage as b, WebPage$2 as c,
|
|
470
|
+
export { type AndroidDevicePage as A, ChromeExtensionProxyPage as C, ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED as E, type PuppeteerPageOpt as P, StaticPage as S, TaskCache as T, type WebPage$1 as W, type AndroidDeviceInputOpt as a, AbstractPage as b, WebPage$2 as c, WebElementInfo as d, type WebUIContext as e, PageTaskExecutor as f, WebPage as g, type ChromePageDestroyOptions as h, printReportMsg as i, getCurrentExecutionFile as j, generateCacheId as k, replaceIllegalPathCharsAndSpace as l, forceClosePopup as m, matchElementFromPlan as n, matchElementFromCache as o, parseContextFromWebPage as p, reportFileName as r, trimContextByViewport as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as StaticPage } from './page-
|
|
2
|
-
export { E as ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED } from './page-
|
|
1
|
+
import { S as StaticPage } from './page-471361cd.js';
|
|
2
|
+
export { E as ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED } from './page-471361cd.js';
|
|
3
3
|
import { PageAgent } from './agent.js';
|
|
4
4
|
import 'playwright';
|
|
5
5
|
import '@midscene/core';
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { PageAgent, PageAgentOpt } from './agent.js';
|
|
2
2
|
import { Page } from 'playwright';
|
|
3
|
-
import {
|
|
3
|
+
import { g as WebPage } from './page-471361cd.js';
|
|
4
4
|
import { AgentWaitForOpt } from '@midscene/core';
|
|
5
5
|
import { TestInfo } from '@playwright/test';
|
|
6
6
|
export { overrideAIConfig } from '@midscene/shared/env';
|
|
7
|
-
import '@midscene/core/ai-model';
|
|
8
7
|
import '@midscene/shared/extractor';
|
|
9
8
|
import 'puppeteer';
|
|
10
9
|
import '@midscene/shared/logger';
|
|
11
10
|
import '@midscene/shared/constants';
|
|
11
|
+
import '@midscene/core/ai-model';
|
|
12
12
|
|
|
13
13
|
declare const PlaywrightAiFixture: (options?: {
|
|
14
14
|
forceSameTabNavigation?: boolean;
|
|
@@ -62,6 +62,9 @@ declare const PlaywrightAiFixture: (options?: {
|
|
|
62
62
|
aiBoolean: ({ page }: {
|
|
63
63
|
page: Page;
|
|
64
64
|
}, use: any, testInfo: TestInfo) => Promise<void>;
|
|
65
|
+
aiAsk: ({ page }: {
|
|
66
|
+
page: Page;
|
|
67
|
+
}, use: any, testInfo: TestInfo) => Promise<void>;
|
|
65
68
|
};
|
|
66
69
|
type PlayWrightAiFixtureType = {
|
|
67
70
|
agentForPage: (page?: any, opts?: any) => Promise<PageAgent>;
|
|
@@ -80,6 +83,7 @@ type PlayWrightAiFixtureType = {
|
|
|
80
83
|
aiNumber: (...args: Parameters<PageAgent['aiNumber']>) => ReturnType<PageAgent['aiNumber']>;
|
|
81
84
|
aiString: (...args: Parameters<PageAgent['aiString']>) => ReturnType<PageAgent['aiString']>;
|
|
82
85
|
aiBoolean: (...args: Parameters<PageAgent['aiBoolean']>) => ReturnType<PageAgent['aiBoolean']>;
|
|
86
|
+
aiAsk: (...args: Parameters<PageAgent['aiAsk']>) => ReturnType<PageAgent['aiAsk']>;
|
|
83
87
|
};
|
|
84
88
|
|
|
85
89
|
declare class PlaywrightAgent extends PageAgent<WebPage> {
|
|
@@ -2,7 +2,7 @@ import * as puppeteer from 'puppeteer';
|
|
|
2
2
|
import { PuppeteerAgent } from './puppeteer.js';
|
|
3
3
|
import { MidsceneYamlScriptWebEnv } from '@midscene/core';
|
|
4
4
|
import './agent.js';
|
|
5
|
-
import './page-
|
|
5
|
+
import './page-471361cd.js';
|
|
6
6
|
import 'playwright';
|
|
7
7
|
import '@midscene/shared/extractor';
|
|
8
8
|
import '@midscene/shared/logger';
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { PageAgentOpt, PageAgent } from './agent.js';
|
|
2
2
|
import { Page } from 'puppeteer';
|
|
3
|
-
import { P as PuppeteerPageOpt, c as WebPage } from './page-
|
|
4
|
-
export { a as AndroidDeviceInputOpt } from './page-
|
|
3
|
+
import { P as PuppeteerPageOpt, c as WebPage } from './page-471361cd.js';
|
|
4
|
+
export { a as AndroidDeviceInputOpt } from './page-471361cd.js';
|
|
5
5
|
export { overrideAIConfig } from '@midscene/shared/env';
|
|
6
6
|
import '@midscene/core';
|
|
7
|
-
import '@midscene/core/ai-model';
|
|
8
7
|
import 'playwright';
|
|
9
8
|
import '@midscene/shared/extractor';
|
|
10
9
|
import '@midscene/shared/logger';
|
|
11
10
|
import '@midscene/shared/constants';
|
|
11
|
+
import '@midscene/core/ai-model';
|
|
12
12
|
|
|
13
13
|
type PuppeteerAgentOpt = PageAgentOpt & PuppeteerPageOpt;
|
|
14
14
|
declare class PuppeteerAgent extends PageAgent<WebPage> {
|
package/dist/types/utils.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import '@midscene/core';
|
|
|
2
2
|
import '@midscene/shared/logger';
|
|
3
3
|
import 'playwright';
|
|
4
4
|
import 'puppeteer';
|
|
5
|
-
export { E as ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED,
|
|
5
|
+
export { E as ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED, e as WebUIContext, m as forceClosePopup, k as generateCacheId, j as getCurrentExecutionFile, o as matchElementFromCache, n as matchElementFromPlan, p as parseContextFromWebPage, i as printReportMsg, l as replaceIllegalPathCharsAndSpace, r as reportFileName, t as trimContextByViewport } from './page-471361cd.js';
|
|
6
6
|
import '@midscene/shared/extractor';
|
|
7
7
|
import '@midscene/shared/constants';
|
|
8
|
+
import '@midscene/core/ai-model';
|
package/dist/types/yaml.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { S as ScriptPlayer, p as parseYamlScript } from './utils-399ab32c.js';
|
|
2
2
|
import { MidsceneYamlScriptWebEnv, MidsceneYamlTask } from '@midscene/core';
|
|
3
3
|
import './agent.js';
|
|
4
|
-
import './page-
|
|
4
|
+
import './page-471361cd.js';
|
|
5
5
|
import 'playwright';
|
|
6
6
|
import '@midscene/shared/extractor';
|
|
7
7
|
import 'puppeteer';
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"Browser use",
|
|
9
9
|
"Android use"
|
|
10
10
|
],
|
|
11
|
-
"version": "0.
|
|
11
|
+
"version": "0.20.0",
|
|
12
12
|
"repository": "https://github.com/web-infra-dev/midscene",
|
|
13
13
|
"homepage": "https://midscenejs.com/",
|
|
14
14
|
"jsnext:source": "./src/index.ts",
|
|
@@ -167,8 +167,8 @@
|
|
|
167
167
|
"semver": "7.5.2",
|
|
168
168
|
"socket.io": "^4.8.1",
|
|
169
169
|
"socket.io-client": "4.8.1",
|
|
170
|
-
"@midscene/core": "0.
|
|
171
|
-
"@midscene/shared": "0.
|
|
170
|
+
"@midscene/core": "0.20.0",
|
|
171
|
+
"@midscene/shared": "0.20.0"
|
|
172
172
|
},
|
|
173
173
|
"devDependencies": {
|
|
174
174
|
"@modern-js/module-tools": "2.60.6",
|