@midscene/core 0.26.5-beta-20250814095614.0 → 0.26.5-beta-20250814125155.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/ai-model/action-executor.mjs +139 -0
- package/dist/es/ai-model/action-executor.mjs.map +1 -0
- package/dist/es/ai-model/common.mjs +219 -0
- package/dist/es/ai-model/common.mjs.map +1 -0
- package/dist/es/ai-model/index.mjs +10 -0
- package/dist/es/ai-model/inspect.mjs +317 -0
- package/dist/es/ai-model/inspect.mjs.map +1 -0
- package/dist/es/ai-model/llm-planning.mjs +85 -0
- package/dist/es/ai-model/llm-planning.mjs.map +1 -0
- package/dist/es/ai-model/prompt/assertion.mjs +55 -0
- package/dist/es/ai-model/prompt/assertion.mjs.map +1 -0
- package/dist/es/ai-model/prompt/common.mjs +7 -0
- package/dist/es/ai-model/prompt/common.mjs.map +1 -0
- package/dist/es/ai-model/prompt/describe.mjs +44 -0
- package/dist/es/ai-model/prompt/describe.mjs.map +1 -0
- package/dist/es/ai-model/prompt/extraction.mjs +137 -0
- package/dist/es/ai-model/prompt/extraction.mjs.map +1 -0
- package/dist/es/ai-model/prompt/llm-locator.mjs +275 -0
- package/dist/es/ai-model/prompt/llm-locator.mjs.map +1 -0
- package/dist/es/ai-model/prompt/llm-planning.mjs +359 -0
- package/dist/es/ai-model/prompt/llm-planning.mjs.map +1 -0
- package/dist/es/ai-model/prompt/llm-section-locator.mjs +47 -0
- package/dist/es/ai-model/prompt/llm-section-locator.mjs.map +1 -0
- package/dist/es/ai-model/prompt/playwright-generator.mjs +117 -0
- package/dist/es/ai-model/prompt/playwright-generator.mjs.map +1 -0
- package/dist/es/ai-model/prompt/ui-tars-locator.mjs +34 -0
- package/dist/es/ai-model/prompt/ui-tars-locator.mjs.map +1 -0
- package/dist/es/ai-model/prompt/ui-tars-planning.mjs +36 -0
- package/dist/es/ai-model/prompt/ui-tars-planning.mjs.map +1 -0
- package/dist/es/ai-model/prompt/util.mjs +123 -0
- package/dist/es/ai-model/prompt/util.mjs.map +1 -0
- package/dist/es/ai-model/prompt/yaml-generator.mjs +219 -0
- package/dist/es/ai-model/prompt/yaml-generator.mjs.map +1 -0
- package/dist/es/ai-model/service-caller/index.mjs +413 -0
- package/dist/es/ai-model/service-caller/index.mjs.map +1 -0
- package/dist/es/ai-model/ui-tars-planning.mjs +235 -0
- package/dist/es/ai-model/ui-tars-planning.mjs.map +1 -0
- package/dist/es/image/index.mjs +2 -0
- package/dist/es/index.mjs +7 -2360
- package/dist/es/index.mjs.map +1 -1
- package/dist/es/insight/index.mjs +261 -0
- package/dist/es/insight/index.mjs.map +1 -0
- package/dist/es/insight/utils.mjs +19 -0
- package/dist/es/insight/utils.mjs.map +1 -0
- package/dist/es/types.mjs +11 -0
- package/dist/es/types.mjs.map +1 -0
- package/dist/es/utils.mjs +2 -2
- package/dist/es/yaml.mjs +0 -0
- package/dist/lib/ai-model/action-executor.js +173 -0
- package/dist/lib/ai-model/action-executor.js.map +1 -0
- package/dist/lib/ai-model/common.js +289 -0
- package/dist/lib/ai-model/common.js.map +1 -0
- package/dist/lib/ai-model/index.js +103 -0
- package/dist/lib/ai-model/index.js.map +1 -0
- package/dist/lib/ai-model/inspect.js +360 -0
- package/dist/lib/ai-model/inspect.js.map +1 -0
- package/dist/lib/ai-model/llm-planning.js +119 -0
- package/dist/lib/ai-model/llm-planning.js.map +1 -0
- package/dist/lib/ai-model/prompt/assertion.js +92 -0
- package/dist/lib/ai-model/prompt/assertion.js.map +1 -0
- package/dist/lib/ai-model/prompt/common.js +41 -0
- package/dist/lib/ai-model/prompt/common.js.map +1 -0
- package/dist/lib/ai-model/prompt/describe.js +78 -0
- package/dist/lib/ai-model/prompt/describe.js.map +1 -0
- package/dist/lib/ai-model/prompt/extraction.js +177 -0
- package/dist/lib/ai-model/prompt/extraction.js.map +1 -0
- package/dist/lib/ai-model/prompt/llm-locator.js +315 -0
- package/dist/lib/ai-model/prompt/llm-locator.js.map +1 -0
- package/dist/lib/ai-model/prompt/llm-planning.js +415 -0
- package/dist/lib/ai-model/prompt/llm-planning.js.map +1 -0
- package/dist/lib/ai-model/prompt/llm-section-locator.js +84 -0
- package/dist/lib/ai-model/prompt/llm-section-locator.js.map +1 -0
- package/dist/lib/ai-model/prompt/playwright-generator.js +178 -0
- package/dist/lib/ai-model/prompt/playwright-generator.js.map +1 -0
- package/dist/lib/ai-model/prompt/ui-tars-locator.js +68 -0
- package/dist/lib/ai-model/prompt/ui-tars-locator.js.map +1 -0
- package/dist/lib/ai-model/prompt/ui-tars-planning.js +73 -0
- package/dist/lib/ai-model/prompt/ui-tars-planning.js.map +1 -0
- package/dist/lib/ai-model/prompt/util.js +175 -0
- package/dist/lib/ai-model/prompt/util.js.map +1 -0
- package/dist/lib/ai-model/prompt/yaml-generator.js +280 -0
- package/dist/lib/ai-model/prompt/yaml-generator.js.map +1 -0
- package/dist/lib/ai-model/service-caller/index.js +496 -0
- package/dist/lib/ai-model/service-caller/index.js.map +1 -0
- package/dist/lib/ai-model/ui-tars-planning.js +272 -0
- package/dist/lib/ai-model/ui-tars-planning.js.map +1 -0
- package/dist/lib/image/index.js +56 -0
- package/dist/lib/image/index.js.map +1 -0
- package/dist/lib/index.js +21 -2393
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/insight/index.js +295 -0
- package/dist/lib/insight/index.js.map +1 -0
- package/dist/lib/insight/utils.js +53 -0
- package/dist/lib/insight/utils.js.map +1 -0
- package/dist/lib/types.js +82 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.js +2 -2
- package/dist/lib/yaml.js +20 -0
- package/dist/lib/yaml.js.map +1 -0
- package/dist/types/ai-model/action-executor.d.ts +19 -0
- package/dist/types/ai-model/common.d.ts +34 -0
- package/dist/types/ai-model/index.d.ts +11 -0
- package/dist/types/ai-model/inspect.d.ts +49 -0
- package/dist/types/ai-model/llm-planning.d.ts +10 -0
- package/dist/types/ai-model/prompt/assertion.d.ts +5 -0
- package/dist/types/ai-model/prompt/common.d.ts +2 -0
- package/dist/types/ai-model/prompt/describe.d.ts +1 -0
- package/dist/types/ai-model/prompt/extraction.d.ts +4 -0
- package/dist/types/ai-model/prompt/llm-locator.d.ts +9 -0
- package/dist/types/ai-model/prompt/llm-planning.d.ts +15 -0
- package/dist/types/ai-model/prompt/llm-section-locator.d.ts +6 -0
- package/dist/types/ai-model/prompt/playwright-generator.d.ts +25 -0
- package/dist/types/ai-model/prompt/ui-tars-locator.d.ts +1 -0
- package/dist/types/ai-model/prompt/ui-tars-planning.d.ts +2 -0
- package/dist/types/ai-model/prompt/util.d.ts +45 -0
- package/dist/types/ai-model/prompt/yaml-generator.d.ts +99 -0
- package/dist/types/ai-model/service-caller/index.d.ts +26 -0
- package/dist/types/ai-model/ui-tars-planning.d.ts +76 -0
- package/dist/types/image/index.d.ts +1 -0
- package/dist/types/index.d.ts +9 -1289
- package/dist/types/insight/index.d.ts +26 -0
- package/dist/types/insight/utils.d.ts +2 -0
- package/dist/types/tree.d.ts +1 -11
- package/dist/types/types.d.ts +399 -0
- package/dist/types/utils.d.ts +27 -47
- package/dist/types/yaml.d.ts +172 -0
- package/package.json +6 -6
- package/dist/es/ai-model.mjs +0 -2502
- package/dist/es/ai-model.mjs.map +0 -1
- package/dist/lib/ai-model.js +0 -2622
- package/dist/lib/ai-model.js.map +0 -1
- package/dist/types/ai-model.d.ts +0 -596
package/dist/es/yaml.mjs
ADDED
|
File without changes
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
Executor: ()=>Executor
|
|
28
|
+
});
|
|
29
|
+
const external_utils_js_namespaceObject = require("../utils.js");
|
|
30
|
+
const env_namespaceObject = require("@midscene/shared/env");
|
|
31
|
+
const utils_namespaceObject = require("@midscene/shared/utils");
|
|
32
|
+
function _define_property(obj, key, value) {
|
|
33
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
34
|
+
value: value,
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
writable: true
|
|
38
|
+
});
|
|
39
|
+
else obj[key] = value;
|
|
40
|
+
return obj;
|
|
41
|
+
}
|
|
42
|
+
class Executor {
|
|
43
|
+
markTaskAsPending(task) {
|
|
44
|
+
return {
|
|
45
|
+
status: 'pending',
|
|
46
|
+
...task
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async append(task) {
|
|
50
|
+
var _this_latestErrorTask, _this_latestErrorTask1;
|
|
51
|
+
(0, utils_namespaceObject.assert)('error' !== this.status, `executor is in error state, cannot append task\nerror=${null == (_this_latestErrorTask = this.latestErrorTask()) ? void 0 : _this_latestErrorTask.error}\n${null == (_this_latestErrorTask1 = this.latestErrorTask()) ? void 0 : _this_latestErrorTask1.errorStack}`);
|
|
52
|
+
if (Array.isArray(task)) this.tasks.push(...task.map((item)=>this.markTaskAsPending(item)));
|
|
53
|
+
else this.tasks.push(this.markTaskAsPending(task));
|
|
54
|
+
if ('running' !== this.status) this.status = 'pending';
|
|
55
|
+
}
|
|
56
|
+
async flush() {
|
|
57
|
+
if ('init' === this.status && this.tasks.length > 0) console.warn('illegal state for executor, status is init but tasks are not empty');
|
|
58
|
+
(0, utils_namespaceObject.assert)('running' !== this.status, 'executor is already running');
|
|
59
|
+
(0, utils_namespaceObject.assert)('completed' !== this.status, 'executor is already completed');
|
|
60
|
+
(0, utils_namespaceObject.assert)('error' !== this.status, 'executor is in error state');
|
|
61
|
+
const nextPendingIndex = this.tasks.findIndex((task)=>'pending' === task.status);
|
|
62
|
+
if (nextPendingIndex < 0) return;
|
|
63
|
+
this.status = 'running';
|
|
64
|
+
let taskIndex = nextPendingIndex;
|
|
65
|
+
let successfullyCompleted = true;
|
|
66
|
+
let previousFindOutput;
|
|
67
|
+
while(taskIndex < this.tasks.length){
|
|
68
|
+
const task = this.tasks[taskIndex];
|
|
69
|
+
(0, utils_namespaceObject.assert)('pending' === task.status, `task status should be pending, but got: ${task.status}`);
|
|
70
|
+
task.timing = {
|
|
71
|
+
start: Date.now()
|
|
72
|
+
};
|
|
73
|
+
try {
|
|
74
|
+
task.status = 'running';
|
|
75
|
+
try {
|
|
76
|
+
if (this.onTaskStart) await this.onTaskStart(task);
|
|
77
|
+
} catch (e) {
|
|
78
|
+
console.error('error in onTaskStart', e);
|
|
79
|
+
}
|
|
80
|
+
(0, utils_namespaceObject.assert)([
|
|
81
|
+
'Insight',
|
|
82
|
+
'Action',
|
|
83
|
+
'Planning'
|
|
84
|
+
].indexOf(task.type) >= 0, `unsupported task type: ${task.type}`);
|
|
85
|
+
const { executor, param } = task;
|
|
86
|
+
(0, utils_namespaceObject.assert)(executor, `executor is required for task type: ${task.type}`);
|
|
87
|
+
let returnValue;
|
|
88
|
+
const executorContext = {
|
|
89
|
+
task,
|
|
90
|
+
element: null == previousFindOutput ? void 0 : previousFindOutput.element
|
|
91
|
+
};
|
|
92
|
+
if ('Insight' === task.type) {
|
|
93
|
+
(0, utils_namespaceObject.assert)('Locate' === task.subType || 'Query' === task.subType || 'Assert' === task.subType || 'Boolean' === task.subType || 'Number' === task.subType || 'String' === task.subType, `unsupported insight subType: ${task.subType}`);
|
|
94
|
+
returnValue = await task.executor(param, executorContext);
|
|
95
|
+
if ('Locate' === task.subType) previousFindOutput = null == returnValue ? void 0 : returnValue.output;
|
|
96
|
+
} else if ('Action' === task.type || 'Planning' === task.type) returnValue = await task.executor(param, executorContext);
|
|
97
|
+
else {
|
|
98
|
+
console.warn(`unsupported task type: ${task.type}, will try to execute it directly`);
|
|
99
|
+
returnValue = await task.executor(param, executorContext);
|
|
100
|
+
}
|
|
101
|
+
Object.assign(task, returnValue);
|
|
102
|
+
task.status = 'finished';
|
|
103
|
+
task.timing.end = Date.now();
|
|
104
|
+
task.timing.cost = task.timing.end - task.timing.start;
|
|
105
|
+
taskIndex++;
|
|
106
|
+
} catch (e) {
|
|
107
|
+
successfullyCompleted = false;
|
|
108
|
+
task.error = e;
|
|
109
|
+
task.errorMessage = (null == e ? void 0 : e.message) || ('string' == typeof e ? e : 'error-without-message');
|
|
110
|
+
task.errorStack = e.stack;
|
|
111
|
+
task.status = 'failed';
|
|
112
|
+
task.timing.end = Date.now();
|
|
113
|
+
task.timing.cost = task.timing.end - task.timing.start;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
for(let i = taskIndex + 1; i < this.tasks.length; i++)this.tasks[i].status = 'cancelled';
|
|
118
|
+
if (successfullyCompleted) this.status = 'completed';
|
|
119
|
+
else this.status = 'error';
|
|
120
|
+
if (this.tasks.length) {
|
|
121
|
+
const outputIndex = Math.min(taskIndex, this.tasks.length - 1);
|
|
122
|
+
const { thought, output } = this.tasks[outputIndex];
|
|
123
|
+
return {
|
|
124
|
+
thought,
|
|
125
|
+
output
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
isInErrorState() {
|
|
130
|
+
return 'error' === this.status;
|
|
131
|
+
}
|
|
132
|
+
latestErrorTask() {
|
|
133
|
+
if ('error' !== this.status) return null;
|
|
134
|
+
const errorTaskIndex = this.tasks.findIndex((task)=>'failed' === task.status);
|
|
135
|
+
if (errorTaskIndex >= 0) return this.tasks[errorTaskIndex];
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
dump() {
|
|
139
|
+
let modelDescription = '';
|
|
140
|
+
if ((0, env_namespaceObject.vlLocateMode)()) {
|
|
141
|
+
const uiTarsModelVer = (0, env_namespaceObject.uiTarsModelVersion)();
|
|
142
|
+
modelDescription = uiTarsModelVer ? `UI-TARS=${uiTarsModelVer}` : `${(0, env_namespaceObject.vlLocateMode)()} mode`;
|
|
143
|
+
}
|
|
144
|
+
const dumpData = {
|
|
145
|
+
sdkVersion: (0, external_utils_js_namespaceObject.getVersion)(),
|
|
146
|
+
model_name: (0, env_namespaceObject.getAIConfig)(env_namespaceObject.MIDSCENE_MODEL_NAME) || '',
|
|
147
|
+
model_description: modelDescription,
|
|
148
|
+
logTime: Date.now(),
|
|
149
|
+
name: this.name,
|
|
150
|
+
tasks: this.tasks
|
|
151
|
+
};
|
|
152
|
+
return dumpData;
|
|
153
|
+
}
|
|
154
|
+
constructor(name, options){
|
|
155
|
+
_define_property(this, "name", void 0);
|
|
156
|
+
_define_property(this, "tasks", void 0);
|
|
157
|
+
_define_property(this, "status", void 0);
|
|
158
|
+
_define_property(this, "onTaskStart", void 0);
|
|
159
|
+
this.status = (null == options ? void 0 : options.tasks) && options.tasks.length > 0 ? 'pending' : 'init';
|
|
160
|
+
this.name = name;
|
|
161
|
+
this.tasks = ((null == options ? void 0 : options.tasks) || []).map((item)=>this.markTaskAsPending(item));
|
|
162
|
+
this.onTaskStart = null == options ? void 0 : options.onTaskStart;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.Executor = __webpack_exports__.Executor;
|
|
166
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
167
|
+
"Executor"
|
|
168
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
169
|
+
Object.defineProperty(exports, '__esModule', {
|
|
170
|
+
value: true
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
//# sourceMappingURL=action-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-model/action-executor.js","sources":["webpack://@midscene/core/webpack/runtime/define_property_getters","webpack://@midscene/core/webpack/runtime/has_own_property","webpack://@midscene/core/webpack/runtime/make_namespace_object","webpack://@midscene/core/./src/ai-model/action-executor.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type {\n ExecutionDump,\n ExecutionTask,\n ExecutionTaskApply,\n ExecutionTaskInsightLocateOutput,\n ExecutionTaskProgressOptions,\n ExecutionTaskReturn,\n ExecutorContext,\n} from '@/types';\nimport { getVersion } from '@/utils';\nimport {\n MIDSCENE_MODEL_NAME,\n getAIConfig,\n uiTarsModelVersion,\n vlLocateMode,\n} from '@midscene/shared/env';\nimport { assert } from '@midscene/shared/utils';\n\nexport class Executor {\n name: string;\n\n tasks: ExecutionTask[];\n\n // status of executor\n status: 'init' | 'pending' | 'running' | 'completed' | 'error';\n\n onTaskStart?: ExecutionTaskProgressOptions['onTaskStart'];\n\n constructor(\n name: string,\n options?: ExecutionTaskProgressOptions & {\n tasks?: ExecutionTaskApply[];\n },\n ) {\n this.status =\n options?.tasks && options.tasks.length > 0 ? 'pending' : 'init';\n this.name = name;\n this.tasks = (options?.tasks || []).map((item) =>\n this.markTaskAsPending(item),\n );\n this.onTaskStart = options?.onTaskStart;\n }\n\n private markTaskAsPending(task: ExecutionTaskApply): ExecutionTask {\n return {\n status: 'pending',\n ...task,\n };\n }\n\n async append(task: ExecutionTaskApply[] | ExecutionTaskApply): Promise<void> {\n assert(\n this.status !== 'error',\n `executor is in error state, cannot append task\\nerror=${this.latestErrorTask()?.error}\\n${this.latestErrorTask()?.errorStack}`,\n );\n if (Array.isArray(task)) {\n this.tasks.push(...task.map((item) => this.markTaskAsPending(item)));\n } else {\n this.tasks.push(this.markTaskAsPending(task));\n }\n if (this.status !== 'running') {\n this.status = 'pending';\n }\n }\n\n async flush(): Promise<{ output: any; thought?: string } | undefined> {\n if (this.status === 'init' && this.tasks.length > 0) {\n console.warn(\n 'illegal state for executor, status is init but tasks are not empty',\n );\n }\n\n assert(this.status !== 'running', 'executor is already running');\n assert(this.status !== 'completed', 'executor is already completed');\n assert(this.status !== 'error', 'executor is in error state');\n\n const nextPendingIndex = this.tasks.findIndex(\n (task) => task.status === 'pending',\n );\n if (nextPendingIndex < 0) {\n // all tasks are completed\n return;\n }\n\n this.status = 'running';\n let taskIndex = nextPendingIndex;\n let successfullyCompleted = true;\n\n let previousFindOutput: ExecutionTaskInsightLocateOutput | undefined;\n\n while (taskIndex < this.tasks.length) {\n const task = this.tasks[taskIndex];\n assert(\n task.status === 'pending',\n `task status should be pending, but got: ${task.status}`,\n );\n task.timing = {\n start: Date.now(),\n };\n try {\n task.status = 'running';\n try {\n if (this.onTaskStart) {\n await this.onTaskStart(task);\n }\n } catch (e) {\n console.error('error in onTaskStart', e);\n }\n assert(\n ['Insight', 'Action', 'Planning'].indexOf(task.type) >= 0,\n `unsupported task type: ${task.type}`,\n );\n\n const { executor, param } = task;\n assert(executor, `executor is required for task type: ${task.type}`);\n\n let returnValue;\n const executorContext: ExecutorContext = {\n task,\n element: previousFindOutput?.element,\n };\n\n if (task.type === 'Insight') {\n assert(\n task.subType === 'Locate' ||\n task.subType === 'Query' ||\n task.subType === 'Assert' ||\n task.subType === 'Boolean' ||\n task.subType === 'Number' ||\n task.subType === 'String',\n `unsupported insight subType: ${task.subType}`,\n );\n returnValue = await task.executor(param, executorContext);\n if (task.subType === 'Locate') {\n previousFindOutput = (\n returnValue as ExecutionTaskReturn<ExecutionTaskInsightLocateOutput>\n )?.output;\n }\n } else if (task.type === 'Action' || task.type === 'Planning') {\n returnValue = await task.executor(param, executorContext);\n } else {\n console.warn(\n `unsupported task type: ${task.type}, will try to execute it directly`,\n );\n returnValue = await task.executor(param, executorContext);\n }\n\n Object.assign(task, returnValue);\n task.status = 'finished';\n task.timing.end = Date.now();\n task.timing.cost = task.timing.end - task.timing.start;\n taskIndex++;\n } catch (e: any) {\n successfullyCompleted = false;\n task.error = e;\n task.errorMessage =\n e?.message || (typeof e === 'string' ? e : 'error-without-message');\n task.errorStack = e.stack;\n\n task.status = 'failed';\n task.timing.end = Date.now();\n task.timing.cost = task.timing.end - task.timing.start;\n break;\n }\n }\n\n // set all remaining tasks as cancelled\n for (let i = taskIndex + 1; i < this.tasks.length; i++) {\n this.tasks[i].status = 'cancelled';\n }\n\n if (successfullyCompleted) {\n this.status = 'completed';\n } else {\n this.status = 'error';\n }\n\n if (this.tasks.length) {\n // return the last output\n const outputIndex = Math.min(taskIndex, this.tasks.length - 1);\n const { thought, output } = this.tasks[outputIndex];\n return {\n thought,\n output,\n };\n }\n }\n\n isInErrorState(): boolean {\n return this.status === 'error';\n }\n\n latestErrorTask(): ExecutionTask | null {\n if (this.status !== 'error') {\n return null;\n }\n const errorTaskIndex = this.tasks.findIndex(\n (task) => task.status === 'failed',\n );\n if (errorTaskIndex >= 0) {\n return this.tasks[errorTaskIndex];\n }\n return null;\n }\n\n dump(): ExecutionDump {\n let modelDescription = '';\n\n if (vlLocateMode()) {\n const uiTarsModelVer = uiTarsModelVersion();\n if (uiTarsModelVer) {\n modelDescription = `UI-TARS=${uiTarsModelVer}`;\n } else {\n modelDescription = `${vlLocateMode()} mode`;\n }\n }\n const dumpData: ExecutionDump = {\n sdkVersion: getVersion(),\n model_name: getAIConfig(MIDSCENE_MODEL_NAME) || '',\n model_description: modelDescription,\n logTime: Date.now(),\n name: this.name,\n tasks: this.tasks,\n };\n return dumpData;\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","Executor","task","_this_latestErrorTask","_this_latestErrorTask1","assert","Array","item","console","nextPendingIndex","taskIndex","successfullyCompleted","previousFindOutput","Date","e","executor","param","returnValue","executorContext","i","outputIndex","Math","thought","output","errorTaskIndex","modelDescription","vlLocateMode","uiTarsModelVer","uiTarsModelVersion","dumpData","getVersion","getAIConfig","MIDSCENE_MODEL_NAME","name","options"],"mappings":"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"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
markupImageForLLM: ()=>markupImageForLLM,
|
|
28
|
+
adaptBboxToRect: ()=>adaptBboxToRect,
|
|
29
|
+
expandSearchArea: ()=>expandSearchArea,
|
|
30
|
+
AIActionType: ()=>common_AIActionType,
|
|
31
|
+
adaptDoubaoBbox: ()=>adaptDoubaoBbox,
|
|
32
|
+
adaptBbox: ()=>adaptBbox,
|
|
33
|
+
callAiFn: ()=>callAiFn,
|
|
34
|
+
adaptQwenBbox: ()=>adaptQwenBbox,
|
|
35
|
+
buildYamlFlowFromPlans: ()=>buildYamlFlowFromPlans,
|
|
36
|
+
adaptGeminiBbox: ()=>adaptGeminiBbox,
|
|
37
|
+
fillBboxParam: ()=>fillBboxParam,
|
|
38
|
+
mergeRects: ()=>mergeRects,
|
|
39
|
+
warnGPT4oSizeLimit: ()=>warnGPT4oSizeLimit
|
|
40
|
+
});
|
|
41
|
+
const utils_namespaceObject = require("@midscene/shared/utils");
|
|
42
|
+
const index_js_namespaceObject = require("./service-caller/index.js");
|
|
43
|
+
const constants_namespaceObject = require("@midscene/shared/constants");
|
|
44
|
+
const env_namespaceObject = require("@midscene/shared/env");
|
|
45
|
+
const extractor_namespaceObject = require("@midscene/shared/extractor");
|
|
46
|
+
const img_namespaceObject = require("@midscene/shared/img");
|
|
47
|
+
const logger_namespaceObject = require("@midscene/shared/logger");
|
|
48
|
+
var common_AIActionType = /*#__PURE__*/ function(AIActionType) {
|
|
49
|
+
AIActionType[AIActionType["ASSERT"] = 0] = "ASSERT";
|
|
50
|
+
AIActionType[AIActionType["INSPECT_ELEMENT"] = 1] = "INSPECT_ELEMENT";
|
|
51
|
+
AIActionType[AIActionType["EXTRACT_DATA"] = 2] = "EXTRACT_DATA";
|
|
52
|
+
AIActionType[AIActionType["PLAN"] = 3] = "PLAN";
|
|
53
|
+
AIActionType[AIActionType["DESCRIBE_ELEMENT"] = 4] = "DESCRIBE_ELEMENT";
|
|
54
|
+
return AIActionType;
|
|
55
|
+
}({});
|
|
56
|
+
async function callAiFn(msgs, AIActionTypeValue) {
|
|
57
|
+
const jsonObject = await (0, index_js_namespaceObject.callToGetJSONObject)(msgs, AIActionTypeValue);
|
|
58
|
+
return {
|
|
59
|
+
content: jsonObject.content,
|
|
60
|
+
usage: jsonObject.usage
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const defaultBboxSize = 20;
|
|
64
|
+
const debugInspectUtils = (0, logger_namespaceObject.getDebug)('ai:common');
|
|
65
|
+
function fillBboxParam(locate, width, height) {
|
|
66
|
+
if (locate.bbox_2d && !(null == locate ? void 0 : locate.bbox)) {
|
|
67
|
+
locate.bbox = locate.bbox_2d;
|
|
68
|
+
delete locate.bbox_2d;
|
|
69
|
+
}
|
|
70
|
+
if (null == locate ? void 0 : locate.bbox) locate.bbox = adaptBbox(locate.bbox, width, height);
|
|
71
|
+
return locate;
|
|
72
|
+
}
|
|
73
|
+
function adaptQwenBbox(bbox) {
|
|
74
|
+
if (bbox.length < 2) {
|
|
75
|
+
const msg = `invalid bbox data for qwen-vl mode: ${JSON.stringify(bbox)} `;
|
|
76
|
+
throw new Error(msg);
|
|
77
|
+
}
|
|
78
|
+
const result = [
|
|
79
|
+
Math.round(bbox[0]),
|
|
80
|
+
Math.round(bbox[1]),
|
|
81
|
+
'number' == typeof bbox[2] ? Math.round(bbox[2]) : Math.round(bbox[0] + defaultBboxSize),
|
|
82
|
+
'number' == typeof bbox[3] ? Math.round(bbox[3]) : Math.round(bbox[1] + defaultBboxSize)
|
|
83
|
+
];
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
function adaptDoubaoBbox(bbox, width, height) {
|
|
87
|
+
(0, utils_namespaceObject.assert)(width > 0 && height > 0, 'width and height must be greater than 0 in doubao mode');
|
|
88
|
+
if ('string' == typeof bbox) {
|
|
89
|
+
(0, utils_namespaceObject.assert)(/^(\d+)\s(\d+)\s(\d+)\s(\d+)$/.test(bbox.trim()), `invalid bbox data string for doubao-vision mode: ${bbox}`);
|
|
90
|
+
const splitted = bbox.split(' ');
|
|
91
|
+
if (4 === splitted.length) return [
|
|
92
|
+
Math.round(Number(splitted[0]) * width / 1000),
|
|
93
|
+
Math.round(Number(splitted[1]) * height / 1000),
|
|
94
|
+
Math.round(Number(splitted[2]) * width / 1000),
|
|
95
|
+
Math.round(Number(splitted[3]) * height / 1000)
|
|
96
|
+
];
|
|
97
|
+
throw new Error(`invalid bbox data string for doubao-vision mode: ${bbox}`);
|
|
98
|
+
}
|
|
99
|
+
if (Array.isArray(bbox) && Array.isArray(bbox[0])) bbox = bbox[0];
|
|
100
|
+
let bboxList = [];
|
|
101
|
+
if (Array.isArray(bbox) && 'string' == typeof bbox[0]) bbox.forEach((item)=>{
|
|
102
|
+
if ('string' == typeof item && item.includes(',')) {
|
|
103
|
+
const [x, y] = item.split(',');
|
|
104
|
+
bboxList.push(Number(x.trim()), Number(y.trim()));
|
|
105
|
+
} else if ('string' == typeof item && item.includes(' ')) {
|
|
106
|
+
const [x, y] = item.split(' ');
|
|
107
|
+
bboxList.push(Number(x.trim()), Number(y.trim()));
|
|
108
|
+
} else bboxList.push(Number(item));
|
|
109
|
+
});
|
|
110
|
+
else bboxList = bbox;
|
|
111
|
+
if (4 === bboxList.length || 5 === bboxList.length) return [
|
|
112
|
+
Math.round(bboxList[0] * width / 1000),
|
|
113
|
+
Math.round(bboxList[1] * height / 1000),
|
|
114
|
+
Math.round(bboxList[2] * width / 1000),
|
|
115
|
+
Math.round(bboxList[3] * height / 1000)
|
|
116
|
+
];
|
|
117
|
+
if (6 === bboxList.length || 2 === bboxList.length || 3 === bboxList.length || 7 === bboxList.length) return [
|
|
118
|
+
Math.max(0, Math.round(bboxList[0] * width / 1000) - defaultBboxSize / 2),
|
|
119
|
+
Math.max(0, Math.round(bboxList[1] * height / 1000) - defaultBboxSize / 2),
|
|
120
|
+
Math.min(width, Math.round(bboxList[0] * width / 1000) + defaultBboxSize / 2),
|
|
121
|
+
Math.min(height, Math.round(bboxList[1] * height / 1000) + defaultBboxSize / 2)
|
|
122
|
+
];
|
|
123
|
+
if (8 === bbox.length) return [
|
|
124
|
+
Math.round(bboxList[0] * width / 1000),
|
|
125
|
+
Math.round(bboxList[1] * height / 1000),
|
|
126
|
+
Math.round(bboxList[4] * width / 1000),
|
|
127
|
+
Math.round(bboxList[5] * height / 1000)
|
|
128
|
+
];
|
|
129
|
+
const msg = `invalid bbox data for doubao-vision mode: ${JSON.stringify(bbox)} `;
|
|
130
|
+
throw new Error(msg);
|
|
131
|
+
}
|
|
132
|
+
function adaptBbox(bbox, width, height) {
|
|
133
|
+
if ('doubao-vision' === (0, env_namespaceObject.vlLocateMode)() || 'vlm-ui-tars' === (0, env_namespaceObject.vlLocateMode)()) return adaptDoubaoBbox(bbox, width, height);
|
|
134
|
+
if ('gemini' === (0, env_namespaceObject.vlLocateMode)()) return adaptGeminiBbox(bbox, width, height);
|
|
135
|
+
return adaptQwenBbox(bbox);
|
|
136
|
+
}
|
|
137
|
+
function adaptGeminiBbox(bbox, width, height) {
|
|
138
|
+
const left = Math.round(bbox[1] * width / 1000);
|
|
139
|
+
const top = Math.round(bbox[0] * height / 1000);
|
|
140
|
+
const right = Math.round(bbox[3] * width / 1000);
|
|
141
|
+
const bottom = Math.round(bbox[2] * height / 1000);
|
|
142
|
+
return [
|
|
143
|
+
left,
|
|
144
|
+
top,
|
|
145
|
+
right,
|
|
146
|
+
bottom
|
|
147
|
+
];
|
|
148
|
+
}
|
|
149
|
+
function adaptBboxToRect(bbox, width, height, offsetX = 0, offsetY = 0) {
|
|
150
|
+
debugInspectUtils('adaptBboxToRect', bbox, width, height, offsetX, offsetY);
|
|
151
|
+
const [left, top, right, bottom] = adaptBbox(bbox, width, height);
|
|
152
|
+
const rect = {
|
|
153
|
+
left: left + offsetX,
|
|
154
|
+
top: top + offsetY,
|
|
155
|
+
width: right - left,
|
|
156
|
+
height: bottom - top
|
|
157
|
+
};
|
|
158
|
+
debugInspectUtils('adaptBboxToRect, result=', rect);
|
|
159
|
+
return rect;
|
|
160
|
+
}
|
|
161
|
+
let warned = false;
|
|
162
|
+
function warnGPT4oSizeLimit(size) {
|
|
163
|
+
var _getModelName;
|
|
164
|
+
if (warned) return;
|
|
165
|
+
if (null == (_getModelName = (0, index_js_namespaceObject.getModelName)()) ? void 0 : _getModelName.toLowerCase().includes('gpt-4o')) {
|
|
166
|
+
const warningMsg = `GPT-4o has a maximum image input size of 2000x768 or 768x2000, but got ${size.width}x${size.height}. Please set your page to a smaller resolution. Otherwise, the result may be inaccurate.`;
|
|
167
|
+
if (Math.max(size.width, size.height) > 2000 || Math.min(size.width, size.height) > 768) {
|
|
168
|
+
console.warn(warningMsg);
|
|
169
|
+
warned = true;
|
|
170
|
+
}
|
|
171
|
+
} else if (size.width > 1800 || size.height > 1800) {
|
|
172
|
+
console.warn(`The image size seems too large (${size.width}x${size.height}). It may lead to more token usage, slower response, and inaccurate result.`);
|
|
173
|
+
warned = true;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function mergeRects(rects) {
|
|
177
|
+
const minLeft = Math.min(...rects.map((r)=>r.left));
|
|
178
|
+
const minTop = Math.min(...rects.map((r)=>r.top));
|
|
179
|
+
const maxRight = Math.max(...rects.map((r)=>r.left + r.width));
|
|
180
|
+
const maxBottom = Math.max(...rects.map((r)=>r.top + r.height));
|
|
181
|
+
return {
|
|
182
|
+
left: minLeft,
|
|
183
|
+
top: minTop,
|
|
184
|
+
width: maxRight - minLeft,
|
|
185
|
+
height: maxBottom - minTop
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function expandSearchArea(rect, screenSize) {
|
|
189
|
+
const minEdgeSize = 'doubao-vision' === (0, env_namespaceObject.vlLocateMode)() ? 500 : 300;
|
|
190
|
+
const defaultPadding = 160;
|
|
191
|
+
const paddingSizeHorizontal = rect.width < minEdgeSize ? Math.ceil((minEdgeSize - rect.width) / 2) : defaultPadding;
|
|
192
|
+
const paddingSizeVertical = rect.height < minEdgeSize ? Math.ceil((minEdgeSize - rect.height) / 2) : defaultPadding;
|
|
193
|
+
rect.left = Math.max(0, rect.left - paddingSizeHorizontal);
|
|
194
|
+
rect.width = Math.min(rect.width + 2 * paddingSizeHorizontal, screenSize.width - rect.left);
|
|
195
|
+
rect.top = Math.max(0, rect.top - paddingSizeVertical);
|
|
196
|
+
rect.height = Math.min(rect.height + 2 * paddingSizeVertical, screenSize.height - rect.top);
|
|
197
|
+
return rect;
|
|
198
|
+
}
|
|
199
|
+
async function markupImageForLLM(screenshotBase64, tree, size) {
|
|
200
|
+
const elementsInfo = (0, extractor_namespaceObject.treeToList)(tree);
|
|
201
|
+
const elementsPositionInfoWithoutText = elementsInfo.filter((elementInfo)=>{
|
|
202
|
+
if (elementInfo.attributes.nodeType === constants_namespaceObject.NodeType.TEXT) return false;
|
|
203
|
+
return true;
|
|
204
|
+
});
|
|
205
|
+
const imagePayload = await (0, img_namespaceObject.compositeElementInfoImg)({
|
|
206
|
+
inputImgBase64: screenshotBase64,
|
|
207
|
+
elementsPositionInfo: elementsPositionInfoWithoutText,
|
|
208
|
+
size
|
|
209
|
+
});
|
|
210
|
+
return imagePayload;
|
|
211
|
+
}
|
|
212
|
+
function buildYamlFlowFromPlans(plans, sleep) {
|
|
213
|
+
const flow = [];
|
|
214
|
+
for (const plan of plans){
|
|
215
|
+
var _plan_locate;
|
|
216
|
+
const type = plan.type;
|
|
217
|
+
const locate = null == (_plan_locate = plan.locate) ? void 0 : _plan_locate.prompt;
|
|
218
|
+
if ('Tap' === type) flow.push({
|
|
219
|
+
aiTap: locate
|
|
220
|
+
});
|
|
221
|
+
else if ('Hover' === type) flow.push({
|
|
222
|
+
aiHover: locate
|
|
223
|
+
});
|
|
224
|
+
else if ('Input' === type) {
|
|
225
|
+
const param = plan.param;
|
|
226
|
+
flow.push({
|
|
227
|
+
aiInput: param.value,
|
|
228
|
+
locate
|
|
229
|
+
});
|
|
230
|
+
} else if ('KeyboardPress' === type) {
|
|
231
|
+
const param = plan.param;
|
|
232
|
+
flow.push({
|
|
233
|
+
aiKeyboardPress: param.value,
|
|
234
|
+
locate
|
|
235
|
+
});
|
|
236
|
+
} else if ('Scroll' === type) {
|
|
237
|
+
const param = plan.param;
|
|
238
|
+
flow.push({
|
|
239
|
+
aiScroll: null,
|
|
240
|
+
locate,
|
|
241
|
+
direction: param.direction,
|
|
242
|
+
scrollType: param.scrollType,
|
|
243
|
+
distance: param.distance
|
|
244
|
+
});
|
|
245
|
+
} else if ('Sleep' === type) {
|
|
246
|
+
const param = plan.param;
|
|
247
|
+
flow.push({
|
|
248
|
+
sleep: param.timeMs
|
|
249
|
+
});
|
|
250
|
+
} else 'AndroidBackButton' === type || 'AndroidHomeButton' === type || 'AndroidRecentAppsButton' === type || 'AndroidLongPress' === type || 'AndroidPull' === type || 'Error' === type || 'Assert' === type || 'AssertWithoutThrow' === type || 'Finished' === type || console.warn(`Cannot convert action ${type} to yaml flow. This should be a bug of Midscene.`);
|
|
251
|
+
}
|
|
252
|
+
if (sleep) flow.push({
|
|
253
|
+
sleep: sleep
|
|
254
|
+
});
|
|
255
|
+
return flow;
|
|
256
|
+
}
|
|
257
|
+
exports.AIActionType = __webpack_exports__.AIActionType;
|
|
258
|
+
exports.adaptBbox = __webpack_exports__.adaptBbox;
|
|
259
|
+
exports.adaptBboxToRect = __webpack_exports__.adaptBboxToRect;
|
|
260
|
+
exports.adaptDoubaoBbox = __webpack_exports__.adaptDoubaoBbox;
|
|
261
|
+
exports.adaptGeminiBbox = __webpack_exports__.adaptGeminiBbox;
|
|
262
|
+
exports.adaptQwenBbox = __webpack_exports__.adaptQwenBbox;
|
|
263
|
+
exports.buildYamlFlowFromPlans = __webpack_exports__.buildYamlFlowFromPlans;
|
|
264
|
+
exports.callAiFn = __webpack_exports__.callAiFn;
|
|
265
|
+
exports.expandSearchArea = __webpack_exports__.expandSearchArea;
|
|
266
|
+
exports.fillBboxParam = __webpack_exports__.fillBboxParam;
|
|
267
|
+
exports.markupImageForLLM = __webpack_exports__.markupImageForLLM;
|
|
268
|
+
exports.mergeRects = __webpack_exports__.mergeRects;
|
|
269
|
+
exports.warnGPT4oSizeLimit = __webpack_exports__.warnGPT4oSizeLimit;
|
|
270
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
271
|
+
"AIActionType",
|
|
272
|
+
"adaptBbox",
|
|
273
|
+
"adaptBboxToRect",
|
|
274
|
+
"adaptDoubaoBbox",
|
|
275
|
+
"adaptGeminiBbox",
|
|
276
|
+
"adaptQwenBbox",
|
|
277
|
+
"buildYamlFlowFromPlans",
|
|
278
|
+
"callAiFn",
|
|
279
|
+
"expandSearchArea",
|
|
280
|
+
"fillBboxParam",
|
|
281
|
+
"markupImageForLLM",
|
|
282
|
+
"mergeRects",
|
|
283
|
+
"warnGPT4oSizeLimit"
|
|
284
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
285
|
+
Object.defineProperty(exports, '__esModule', {
|
|
286
|
+
value: true
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-model/common.js","sources":["webpack://@midscene/core/webpack/runtime/define_property_getters","webpack://@midscene/core/webpack/runtime/has_own_property","webpack://@midscene/core/webpack/runtime/make_namespace_object","webpack://@midscene/core/./src/ai-model/common.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type {\n AIUsageInfo,\n BaseElement,\n ElementTreeNode,\n MidsceneYamlFlowItem,\n PlanningAction,\n PlanningActionParamInputOrKeyPress,\n PlanningActionParamSleep,\n Rect,\n ScrollParam,\n Size,\n} from '@/types';\nimport { assert } from '@midscene/shared/utils';\n\nimport type {\n ChatCompletionSystemMessageParam,\n ChatCompletionUserMessageParam,\n} from 'openai/resources/index';\nimport {\n call,\n callToGetJSONObject,\n getModelName,\n} from './service-caller/index';\n\nimport type { PlanningLocateParam } from '@/types';\nimport { NodeType } from '@midscene/shared/constants';\nimport { vlLocateMode } from '@midscene/shared/env';\nimport { treeToList } from '@midscene/shared/extractor';\nimport { compositeElementInfoImg } from '@midscene/shared/img';\nimport { getDebug } from '@midscene/shared/logger';\n\nexport type AIArgs = [\n ChatCompletionSystemMessageParam,\n ...ChatCompletionUserMessageParam[],\n];\n\nexport enum AIActionType {\n ASSERT = 0,\n INSPECT_ELEMENT = 1,\n EXTRACT_DATA = 2,\n PLAN = 3,\n DESCRIBE_ELEMENT = 4,\n}\n\nexport async function callAiFn<T>(\n msgs: AIArgs,\n AIActionTypeValue: AIActionType,\n): Promise<{ content: T; usage?: AIUsageInfo }> {\n const jsonObject = await callToGetJSONObject<T>(msgs, AIActionTypeValue);\n\n return {\n content: jsonObject.content,\n usage: jsonObject.usage,\n };\n}\n\nconst defaultBboxSize = 20; // must be even number\nconst debugInspectUtils = getDebug('ai:common');\n\n// transform the param of locate from qwen mode\nexport function fillBboxParam(\n locate: PlanningLocateParam,\n width: number,\n height: number,\n) {\n // The Qwen model might have hallucinations of naming bbox as bbox_2d.\n if ((locate as any).bbox_2d && !locate?.bbox) {\n locate.bbox = (locate as any).bbox_2d;\n // biome-ignore lint/performance/noDelete: <explanation>\n delete (locate as any).bbox_2d;\n }\n\n if (locate?.bbox) {\n locate.bbox = adaptBbox(locate.bbox, width, height);\n }\n\n return locate;\n}\n\nexport function adaptQwenBbox(\n bbox: number[],\n): [number, number, number, number] {\n if (bbox.length < 2) {\n const msg = `invalid bbox data for qwen-vl mode: ${JSON.stringify(bbox)} `;\n throw new Error(msg);\n }\n\n const result: [number, number, number, number] = [\n Math.round(bbox[0]),\n Math.round(bbox[1]),\n typeof bbox[2] === 'number'\n ? Math.round(bbox[2])\n : Math.round(bbox[0] + defaultBboxSize),\n typeof bbox[3] === 'number'\n ? Math.round(bbox[3])\n : Math.round(bbox[1] + defaultBboxSize),\n ];\n return result;\n}\n\nexport function adaptDoubaoBbox(\n bbox: string[] | number[] | string,\n width: number,\n height: number,\n): [number, number, number, number] {\n assert(\n width > 0 && height > 0,\n 'width and height must be greater than 0 in doubao mode',\n );\n\n if (typeof bbox === 'string') {\n assert(\n /^(\\d+)\\s(\\d+)\\s(\\d+)\\s(\\d+)$/.test(bbox.trim()),\n `invalid bbox data string for doubao-vision mode: ${bbox}`,\n );\n const splitted = bbox.split(' ');\n if (splitted.length === 4) {\n return [\n Math.round((Number(splitted[0]) * width) / 1000),\n Math.round((Number(splitted[1]) * height) / 1000),\n Math.round((Number(splitted[2]) * width) / 1000),\n Math.round((Number(splitted[3]) * height) / 1000),\n ];\n }\n throw new Error(`invalid bbox data string for doubao-vision mode: ${bbox}`);\n }\n\n if (Array.isArray(bbox) && Array.isArray(bbox[0])) {\n bbox = bbox[0];\n }\n\n let bboxList: number[] = [];\n if (Array.isArray(bbox) && typeof bbox[0] === 'string') {\n bbox.forEach((item) => {\n if (typeof item === 'string' && item.includes(',')) {\n const [x, y] = item.split(',');\n bboxList.push(Number(x.trim()), Number(y.trim()));\n } else if (typeof item === 'string' && item.includes(' ')) {\n const [x, y] = item.split(' ');\n bboxList.push(Number(x.trim()), Number(y.trim()));\n } else {\n bboxList.push(Number(item));\n }\n });\n } else {\n bboxList = bbox as any;\n }\n\n if (bboxList.length === 4 || bboxList.length === 5) {\n return [\n Math.round((bboxList[0] * width) / 1000),\n Math.round((bboxList[1] * height) / 1000),\n Math.round((bboxList[2] * width) / 1000),\n Math.round((bboxList[3] * height) / 1000),\n ];\n }\n\n // treat the bbox as a center point\n if (\n bboxList.length === 6 ||\n bboxList.length === 2 ||\n bboxList.length === 3 ||\n bboxList.length === 7\n ) {\n return [\n Math.max(\n 0,\n Math.round((bboxList[0] * width) / 1000) - defaultBboxSize / 2,\n ),\n Math.max(\n 0,\n Math.round((bboxList[1] * height) / 1000) - defaultBboxSize / 2,\n ),\n Math.min(\n width,\n Math.round((bboxList[0] * width) / 1000) + defaultBboxSize / 2,\n ),\n Math.min(\n height,\n Math.round((bboxList[1] * height) / 1000) + defaultBboxSize / 2,\n ),\n ];\n }\n\n if (bbox.length === 8) {\n return [\n Math.round((bboxList[0] * width) / 1000),\n Math.round((bboxList[1] * height) / 1000),\n Math.round((bboxList[4] * width) / 1000),\n Math.round((bboxList[5] * height) / 1000),\n ];\n }\n\n const msg = `invalid bbox data for doubao-vision mode: ${JSON.stringify(bbox)} `;\n throw new Error(msg);\n}\n\nexport function adaptBbox(\n bbox: number[],\n width: number,\n height: number,\n): [number, number, number, number] {\n if (vlLocateMode() === 'doubao-vision' || vlLocateMode() === 'vlm-ui-tars') {\n return adaptDoubaoBbox(bbox, width, height);\n }\n\n if (vlLocateMode() === 'gemini') {\n return adaptGeminiBbox(bbox, width, height);\n }\n\n return adaptQwenBbox(bbox);\n}\n\nexport function adaptGeminiBbox(\n bbox: number[],\n width: number,\n height: number,\n): [number, number, number, number] {\n const left = Math.round((bbox[1] * width) / 1000);\n const top = Math.round((bbox[0] * height) / 1000);\n const right = Math.round((bbox[3] * width) / 1000);\n const bottom = Math.round((bbox[2] * height) / 1000);\n return [left, top, right, bottom];\n}\n\nexport function adaptBboxToRect(\n bbox: number[],\n width: number,\n height: number,\n offsetX = 0,\n offsetY = 0,\n): Rect {\n debugInspectUtils('adaptBboxToRect', bbox, width, height, offsetX, offsetY);\n const [left, top, right, bottom] = adaptBbox(bbox, width, height);\n const rect = {\n left: left + offsetX,\n top: top + offsetY,\n width: right - left,\n height: bottom - top,\n };\n debugInspectUtils('adaptBboxToRect, result=', rect);\n return rect;\n}\n\nlet warned = false;\nexport function warnGPT4oSizeLimit(size: Size) {\n if (warned) return;\n if (getModelName()?.toLowerCase().includes('gpt-4o')) {\n const warningMsg = `GPT-4o has a maximum image input size of 2000x768 or 768x2000, but got ${size.width}x${size.height}. Please set your page to a smaller resolution. Otherwise, the result may be inaccurate.`;\n\n if (\n Math.max(size.width, size.height) > 2000 ||\n Math.min(size.width, size.height) > 768\n ) {\n console.warn(warningMsg);\n warned = true;\n }\n } else if (size.width > 1800 || size.height > 1800) {\n console.warn(\n `The image size seems too large (${size.width}x${size.height}). It may lead to more token usage, slower response, and inaccurate result.`,\n );\n warned = true;\n }\n}\n\nexport function mergeRects(rects: Rect[]) {\n const minLeft = Math.min(...rects.map((r) => r.left));\n const minTop = Math.min(...rects.map((r) => r.top));\n const maxRight = Math.max(...rects.map((r) => r.left + r.width));\n const maxBottom = Math.max(...rects.map((r) => r.top + r.height));\n return {\n left: minLeft,\n top: minTop,\n width: maxRight - minLeft,\n height: maxBottom - minTop,\n };\n}\n\n// expand the search area to at least 300 x 300, or add a default padding\nexport function expandSearchArea(rect: Rect, screenSize: Size) {\n const minEdgeSize = vlLocateMode() === 'doubao-vision' ? 500 : 300;\n const defaultPadding = 160;\n\n const paddingSizeHorizontal =\n rect.width < minEdgeSize\n ? Math.ceil((minEdgeSize - rect.width) / 2)\n : defaultPadding;\n const paddingSizeVertical =\n rect.height < minEdgeSize\n ? Math.ceil((minEdgeSize - rect.height) / 2)\n : defaultPadding;\n rect.left = Math.max(0, rect.left - paddingSizeHorizontal);\n rect.width = Math.min(\n rect.width + paddingSizeHorizontal * 2,\n screenSize.width - rect.left,\n );\n rect.top = Math.max(0, rect.top - paddingSizeVertical);\n rect.height = Math.min(\n rect.height + paddingSizeVertical * 2,\n screenSize.height - rect.top,\n );\n return rect;\n}\n\nexport async function markupImageForLLM(\n screenshotBase64: string,\n tree: ElementTreeNode<BaseElement>,\n size: Size,\n) {\n const elementsInfo = treeToList(tree);\n const elementsPositionInfoWithoutText = elementsInfo!.filter(\n (elementInfo) => {\n if (elementInfo.attributes.nodeType === NodeType.TEXT) {\n return false;\n }\n return true;\n },\n );\n\n const imagePayload = await compositeElementInfoImg({\n inputImgBase64: screenshotBase64,\n elementsPositionInfo: elementsPositionInfoWithoutText,\n size,\n });\n return imagePayload;\n}\n\nexport function buildYamlFlowFromPlans(\n plans: PlanningAction[],\n sleep?: number,\n): MidsceneYamlFlowItem[] {\n const flow: MidsceneYamlFlowItem[] = [];\n\n for (const plan of plans) {\n const type = plan.type;\n const locate = plan.locate?.prompt!; // TODO: check if locate is null\n\n if (type === 'Tap') {\n flow.push({\n aiTap: locate!,\n });\n } else if (type === 'Hover') {\n flow.push({\n aiHover: locate!,\n });\n } else if (type === 'Input') {\n const param = plan.param as PlanningActionParamInputOrKeyPress;\n flow.push({\n aiInput: param.value,\n locate,\n });\n } else if (type === 'KeyboardPress') {\n const param = plan.param as PlanningActionParamInputOrKeyPress;\n flow.push({\n aiKeyboardPress: param.value,\n locate,\n });\n } else if (type === 'Scroll') {\n const param = plan.param as ScrollParam;\n flow.push({\n aiScroll: null,\n locate,\n direction: param.direction,\n scrollType: param.scrollType,\n distance: param.distance,\n });\n } else if (type === 'Sleep') {\n const param = plan.param as PlanningActionParamSleep;\n flow.push({\n sleep: param.timeMs,\n });\n } else if (\n type === 'AndroidBackButton' ||\n type === 'AndroidHomeButton' ||\n type === 'AndroidRecentAppsButton' ||\n type === 'AndroidLongPress' ||\n type === 'AndroidPull'\n ) {\n // not implemented in yaml yet\n } else if (\n type === 'Error' ||\n type === 'Assert' ||\n type === 'AssertWithoutThrow' ||\n type === 'Finished'\n ) {\n // do nothing\n } else {\n console.warn(\n `Cannot convert action ${type} to yaml flow. This should be a bug of Midscene.`,\n );\n }\n }\n\n if (sleep) {\n flow.push({\n sleep: sleep,\n });\n }\n\n return flow;\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","AIActionType","callAiFn","msgs","AIActionTypeValue","jsonObject","callToGetJSONObject","defaultBboxSize","debugInspectUtils","getDebug","fillBboxParam","locate","width","height","adaptBbox","adaptQwenBbox","bbox","msg","JSON","Error","result","Math","adaptDoubaoBbox","assert","splitted","Number","Array","bboxList","item","x","y","vlLocateMode","adaptGeminiBbox","left","top","right","bottom","adaptBboxToRect","offsetX","offsetY","rect","warned","warnGPT4oSizeLimit","size","_getModelName","warningMsg","console","mergeRects","rects","minLeft","r","minTop","maxRight","maxBottom","expandSearchArea","screenSize","minEdgeSize","defaultPadding","paddingSizeHorizontal","paddingSizeVertical","markupImageForLLM","screenshotBase64","tree","elementsInfo","treeToList","elementsPositionInfoWithoutText","elementInfo","NodeType","imagePayload","compositeElementInfoImg","buildYamlFlowFromPlans","plans","sleep","flow","plan","_plan_locate","type","param"],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
plan: ()=>external_llm_planning_js_namespaceObject.plan,
|
|
28
|
+
callAiFnWithStringResponse: ()=>index_js_namespaceObject.callAiFnWithStringResponse,
|
|
29
|
+
generateYamlTest: ()=>yaml_generator_js_namespaceObject.generateYamlTest,
|
|
30
|
+
elementByPositionWithElementInfo: ()=>util_js_namespaceObject.elementByPositionWithElementInfo,
|
|
31
|
+
AiLocateSection: ()=>external_inspect_js_namespaceObject.AiLocateSection,
|
|
32
|
+
callAi: ()=>index_js_namespaceObject.call,
|
|
33
|
+
AIActionType: ()=>external_common_js_namespaceObject.AIActionType,
|
|
34
|
+
generatePlaywrightTest: ()=>playwright_generator_js_namespaceObject.generatePlaywrightTest,
|
|
35
|
+
generateYamlTestStream: ()=>yaml_generator_js_namespaceObject.generateYamlTestStream,
|
|
36
|
+
AiExtractElementInfo: ()=>external_inspect_js_namespaceObject.AiExtractElementInfo,
|
|
37
|
+
resizeImageForUiTars: ()=>external_ui_tars_planning_js_namespaceObject.resizeImageForUiTars,
|
|
38
|
+
systemPromptToLocateElement: ()=>llm_locator_js_namespaceObject.systemPromptToLocateElement,
|
|
39
|
+
vlmPlanning: ()=>external_ui_tars_planning_js_namespaceObject.vlmPlanning,
|
|
40
|
+
AiAssert: ()=>external_inspect_js_namespaceObject.AiAssert,
|
|
41
|
+
adaptBboxToRect: ()=>external_common_js_namespaceObject.adaptBboxToRect,
|
|
42
|
+
AiLocateElement: ()=>external_inspect_js_namespaceObject.AiLocateElement,
|
|
43
|
+
callAiFn: ()=>external_common_js_namespaceObject.callAiFn,
|
|
44
|
+
describeUserPage: ()=>util_js_namespaceObject.describeUserPage,
|
|
45
|
+
callToGetJSONObject: ()=>index_js_namespaceObject.callToGetJSONObject,
|
|
46
|
+
generatePlaywrightTestStream: ()=>playwright_generator_js_namespaceObject.generatePlaywrightTestStream
|
|
47
|
+
});
|
|
48
|
+
const index_js_namespaceObject = require("./service-caller/index.js");
|
|
49
|
+
const llm_locator_js_namespaceObject = require("./prompt/llm-locator.js");
|
|
50
|
+
const util_js_namespaceObject = require("./prompt/util.js");
|
|
51
|
+
const playwright_generator_js_namespaceObject = require("./prompt/playwright-generator.js");
|
|
52
|
+
const yaml_generator_js_namespaceObject = require("./prompt/yaml-generator.js");
|
|
53
|
+
const external_inspect_js_namespaceObject = require("./inspect.js");
|
|
54
|
+
const external_llm_planning_js_namespaceObject = require("./llm-planning.js");
|
|
55
|
+
const external_common_js_namespaceObject = require("./common.js");
|
|
56
|
+
const external_ui_tars_planning_js_namespaceObject = require("./ui-tars-planning.js");
|
|
57
|
+
exports.AIActionType = __webpack_exports__.AIActionType;
|
|
58
|
+
exports.AiAssert = __webpack_exports__.AiAssert;
|
|
59
|
+
exports.AiExtractElementInfo = __webpack_exports__.AiExtractElementInfo;
|
|
60
|
+
exports.AiLocateElement = __webpack_exports__.AiLocateElement;
|
|
61
|
+
exports.AiLocateSection = __webpack_exports__.AiLocateSection;
|
|
62
|
+
exports.adaptBboxToRect = __webpack_exports__.adaptBboxToRect;
|
|
63
|
+
exports.callAi = __webpack_exports__.callAi;
|
|
64
|
+
exports.callAiFn = __webpack_exports__.callAiFn;
|
|
65
|
+
exports.callAiFnWithStringResponse = __webpack_exports__.callAiFnWithStringResponse;
|
|
66
|
+
exports.callToGetJSONObject = __webpack_exports__.callToGetJSONObject;
|
|
67
|
+
exports.describeUserPage = __webpack_exports__.describeUserPage;
|
|
68
|
+
exports.elementByPositionWithElementInfo = __webpack_exports__.elementByPositionWithElementInfo;
|
|
69
|
+
exports.generatePlaywrightTest = __webpack_exports__.generatePlaywrightTest;
|
|
70
|
+
exports.generatePlaywrightTestStream = __webpack_exports__.generatePlaywrightTestStream;
|
|
71
|
+
exports.generateYamlTest = __webpack_exports__.generateYamlTest;
|
|
72
|
+
exports.generateYamlTestStream = __webpack_exports__.generateYamlTestStream;
|
|
73
|
+
exports.plan = __webpack_exports__.plan;
|
|
74
|
+
exports.resizeImageForUiTars = __webpack_exports__.resizeImageForUiTars;
|
|
75
|
+
exports.systemPromptToLocateElement = __webpack_exports__.systemPromptToLocateElement;
|
|
76
|
+
exports.vlmPlanning = __webpack_exports__.vlmPlanning;
|
|
77
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
78
|
+
"AIActionType",
|
|
79
|
+
"AiAssert",
|
|
80
|
+
"AiExtractElementInfo",
|
|
81
|
+
"AiLocateElement",
|
|
82
|
+
"AiLocateSection",
|
|
83
|
+
"adaptBboxToRect",
|
|
84
|
+
"callAi",
|
|
85
|
+
"callAiFn",
|
|
86
|
+
"callAiFnWithStringResponse",
|
|
87
|
+
"callToGetJSONObject",
|
|
88
|
+
"describeUserPage",
|
|
89
|
+
"elementByPositionWithElementInfo",
|
|
90
|
+
"generatePlaywrightTest",
|
|
91
|
+
"generatePlaywrightTestStream",
|
|
92
|
+
"generateYamlTest",
|
|
93
|
+
"generateYamlTestStream",
|
|
94
|
+
"plan",
|
|
95
|
+
"resizeImageForUiTars",
|
|
96
|
+
"systemPromptToLocateElement",
|
|
97
|
+
"vlmPlanning"
|
|
98
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
99
|
+
Object.defineProperty(exports, '__esModule', {
|
|
100
|
+
value: true
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=index.js.map
|