@godscene/core 1.7.11
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/LICENSE +21 -0
- package/README.md +9 -0
- package/dist/es/agent/agent.mjs +767 -0
- package/dist/es/agent/common.mjs +0 -0
- package/dist/es/agent/execution-session.mjs +39 -0
- package/dist/es/agent/index.mjs +6 -0
- package/dist/es/agent/task-builder.mjs +343 -0
- package/dist/es/agent/task-cache.mjs +212 -0
- package/dist/es/agent/tasks.mjs +428 -0
- package/dist/es/agent/ui-utils.mjs +101 -0
- package/dist/es/agent/utils.mjs +167 -0
- package/dist/es/ai-model/auto-glm/actions.mjs +237 -0
- package/dist/es/ai-model/auto-glm/index.mjs +6 -0
- package/dist/es/ai-model/auto-glm/parser.mjs +237 -0
- package/dist/es/ai-model/auto-glm/planning.mjs +69 -0
- package/dist/es/ai-model/auto-glm/prompt.mjs +220 -0
- package/dist/es/ai-model/auto-glm/util.mjs +7 -0
- package/dist/es/ai-model/connectivity.mjs +136 -0
- package/dist/es/ai-model/conversation-history.mjs +193 -0
- package/dist/es/ai-model/index.mjs +12 -0
- package/dist/es/ai-model/inspect.mjs +395 -0
- package/dist/es/ai-model/llm-planning.mjs +231 -0
- package/dist/es/ai-model/prompt/common.mjs +5 -0
- package/dist/es/ai-model/prompt/describe.mjs +64 -0
- package/dist/es/ai-model/prompt/extraction.mjs +129 -0
- package/dist/es/ai-model/prompt/llm-locator.mjs +49 -0
- package/dist/es/ai-model/prompt/llm-planning.mjs +584 -0
- package/dist/es/ai-model/prompt/llm-section-locator.mjs +42 -0
- package/dist/es/ai-model/prompt/order-sensitive-judge.mjs +33 -0
- package/dist/es/ai-model/prompt/playwright-generator.mjs +115 -0
- package/dist/es/ai-model/prompt/ui-tars-planning.mjs +34 -0
- package/dist/es/ai-model/prompt/util.mjs +57 -0
- package/dist/es/ai-model/prompt/yaml-generator.mjs +201 -0
- package/dist/es/ai-model/service-caller/codex-app-server.mjs +573 -0
- package/dist/es/ai-model/service-caller/image-detail.mjs +4 -0
- package/dist/es/ai-model/service-caller/index.mjs +648 -0
- package/dist/es/ai-model/service-caller/request-timeout.mjs +47 -0
- package/dist/es/ai-model/ui-tars-planning.mjs +247 -0
- package/dist/es/common.mjs +382 -0
- package/dist/es/device/device-options.mjs +0 -0
- package/dist/es/device/index.mjs +340 -0
- package/dist/es/dump/html-utils.mjs +290 -0
- package/dist/es/dump/index.mjs +3 -0
- package/dist/es/dump/screenshot-restoration.mjs +30 -0
- package/dist/es/dump/screenshot-store.mjs +125 -0
- package/dist/es/index.mjs +17 -0
- package/dist/es/report-cli.mjs +149 -0
- package/dist/es/report-generator.mjs +203 -0
- package/dist/es/report-markdown.mjs +216 -0
- package/dist/es/report.mjs +287 -0
- package/dist/es/screenshot-item.mjs +120 -0
- package/dist/es/service/index.mjs +272 -0
- package/dist/es/service/utils.mjs +13 -0
- package/dist/es/skill/index.mjs +35 -0
- package/dist/es/task-runner.mjs +261 -0
- package/dist/es/task-timing.mjs +10 -0
- package/dist/es/tree.mjs +11 -0
- package/dist/es/types.mjs +202 -0
- package/dist/es/utils.mjs +232 -0
- package/dist/es/yaml/builder.mjs +11 -0
- package/dist/es/yaml/index.mjs +4 -0
- package/dist/es/yaml/player.mjs +425 -0
- package/dist/es/yaml/utils.mjs +100 -0
- package/dist/es/yaml.mjs +0 -0
- package/dist/lib/agent/agent.js +815 -0
- package/dist/lib/agent/common.js +5 -0
- package/dist/lib/agent/execution-session.js +73 -0
- package/dist/lib/agent/index.js +76 -0
- package/dist/lib/agent/task-builder.js +380 -0
- package/dist/lib/agent/task-cache.js +264 -0
- package/dist/lib/agent/tasks.js +471 -0
- package/dist/lib/agent/ui-utils.js +153 -0
- package/dist/lib/agent/utils.js +238 -0
- package/dist/lib/ai-model/auto-glm/actions.js +271 -0
- package/dist/lib/ai-model/auto-glm/index.js +64 -0
- package/dist/lib/ai-model/auto-glm/parser.js +280 -0
- package/dist/lib/ai-model/auto-glm/planning.js +103 -0
- package/dist/lib/ai-model/auto-glm/prompt.js +257 -0
- package/dist/lib/ai-model/auto-glm/util.js +44 -0
- package/dist/lib/ai-model/connectivity.js +180 -0
- package/dist/lib/ai-model/conversation-history.js +227 -0
- package/dist/lib/ai-model/index.js +127 -0
- package/dist/lib/ai-model/inspect.js +441 -0
- package/dist/lib/ai-model/llm-planning.js +268 -0
- package/dist/lib/ai-model/prompt/common.js +39 -0
- package/dist/lib/ai-model/prompt/describe.js +98 -0
- package/dist/lib/ai-model/prompt/extraction.js +169 -0
- package/dist/lib/ai-model/prompt/llm-locator.js +86 -0
- package/dist/lib/ai-model/prompt/llm-planning.js +621 -0
- package/dist/lib/ai-model/prompt/llm-section-locator.js +79 -0
- package/dist/lib/ai-model/prompt/order-sensitive-judge.js +70 -0
- package/dist/lib/ai-model/prompt/playwright-generator.js +176 -0
- package/dist/lib/ai-model/prompt/ui-tars-planning.js +71 -0
- package/dist/lib/ai-model/prompt/util.js +103 -0
- package/dist/lib/ai-model/prompt/yaml-generator.js +262 -0
- package/dist/lib/ai-model/service-caller/codex-app-server.js +622 -0
- package/dist/lib/ai-model/service-caller/image-detail.js +38 -0
- package/dist/lib/ai-model/service-caller/index.js +716 -0
- package/dist/lib/ai-model/service-caller/request-timeout.js +93 -0
- package/dist/lib/ai-model/ui-tars-planning.js +281 -0
- package/dist/lib/common.js +491 -0
- package/dist/lib/device/device-options.js +18 -0
- package/dist/lib/device/index.js +467 -0
- package/dist/lib/dump/html-utils.js +366 -0
- package/dist/lib/dump/index.js +58 -0
- package/dist/lib/dump/screenshot-restoration.js +64 -0
- package/dist/lib/dump/screenshot-store.js +165 -0
- package/dist/lib/index.js +184 -0
- package/dist/lib/report-cli.js +189 -0
- package/dist/lib/report-generator.js +244 -0
- package/dist/lib/report-markdown.js +253 -0
- package/dist/lib/report.js +333 -0
- package/dist/lib/screenshot-item.js +154 -0
- package/dist/lib/service/index.js +306 -0
- package/dist/lib/service/utils.js +47 -0
- package/dist/lib/skill/index.js +69 -0
- package/dist/lib/task-runner.js +298 -0
- package/dist/lib/task-timing.js +44 -0
- package/dist/lib/tree.js +51 -0
- package/dist/lib/types.js +298 -0
- package/dist/lib/utils.js +314 -0
- package/dist/lib/yaml/builder.js +55 -0
- package/dist/lib/yaml/index.js +79 -0
- package/dist/lib/yaml/player.js +459 -0
- package/dist/lib/yaml/utils.js +153 -0
- package/dist/lib/yaml.js +18 -0
- package/dist/types/agent/agent.d.ts +220 -0
- package/dist/types/agent/common.d.ts +0 -0
- package/dist/types/agent/execution-session.d.ts +36 -0
- package/dist/types/agent/index.d.ts +9 -0
- package/dist/types/agent/task-builder.d.ts +34 -0
- package/dist/types/agent/task-cache.d.ts +49 -0
- package/dist/types/agent/tasks.d.ts +70 -0
- package/dist/types/agent/ui-utils.d.ts +14 -0
- package/dist/types/agent/utils.d.ts +25 -0
- package/dist/types/ai-model/auto-glm/actions.d.ts +78 -0
- package/dist/types/ai-model/auto-glm/index.d.ts +6 -0
- package/dist/types/ai-model/auto-glm/parser.d.ts +18 -0
- package/dist/types/ai-model/auto-glm/planning.d.ts +12 -0
- package/dist/types/ai-model/auto-glm/prompt.d.ts +27 -0
- package/dist/types/ai-model/auto-glm/util.d.ts +13 -0
- package/dist/types/ai-model/connectivity.d.ts +20 -0
- package/dist/types/ai-model/conversation-history.d.ts +105 -0
- package/dist/types/ai-model/index.d.ts +16 -0
- package/dist/types/ai-model/inspect.d.ts +67 -0
- package/dist/types/ai-model/llm-planning.d.ts +19 -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 +7 -0
- package/dist/types/ai-model/prompt/llm-locator.d.ts +3 -0
- package/dist/types/ai-model/prompt/llm-planning.d.ts +10 -0
- package/dist/types/ai-model/prompt/llm-section-locator.d.ts +3 -0
- package/dist/types/ai-model/prompt/order-sensitive-judge.d.ts +2 -0
- package/dist/types/ai-model/prompt/playwright-generator.d.ts +26 -0
- package/dist/types/ai-model/prompt/ui-tars-planning.d.ts +2 -0
- package/dist/types/ai-model/prompt/util.d.ts +33 -0
- package/dist/types/ai-model/prompt/yaml-generator.d.ts +102 -0
- package/dist/types/ai-model/service-caller/codex-app-server.d.ts +42 -0
- package/dist/types/ai-model/service-caller/image-detail.d.ts +2 -0
- package/dist/types/ai-model/service-caller/index.d.ts +60 -0
- package/dist/types/ai-model/service-caller/request-timeout.d.ts +32 -0
- package/dist/types/ai-model/ui-tars-planning.d.ts +72 -0
- package/dist/types/common.d.ts +288 -0
- package/dist/types/device/device-options.d.ts +155 -0
- package/dist/types/device/index.d.ts +2565 -0
- package/dist/types/dump/html-utils.d.ts +75 -0
- package/dist/types/dump/index.d.ts +5 -0
- package/dist/types/dump/screenshot-restoration.d.ts +8 -0
- package/dist/types/dump/screenshot-store.d.ts +49 -0
- package/dist/types/index.d.ts +21 -0
- package/dist/types/report-cli.d.ts +36 -0
- package/dist/types/report-generator.d.ts +88 -0
- package/dist/types/report-markdown.d.ts +24 -0
- package/dist/types/report.d.ts +52 -0
- package/dist/types/screenshot-item.d.ts +67 -0
- package/dist/types/service/index.d.ts +24 -0
- package/dist/types/service/utils.d.ts +2 -0
- package/dist/types/skill/index.d.ts +25 -0
- package/dist/types/task-runner.d.ts +50 -0
- package/dist/types/task-timing.d.ts +8 -0
- package/dist/types/tree.d.ts +4 -0
- package/dist/types/types.d.ts +684 -0
- package/dist/types/utils.d.ts +45 -0
- package/dist/types/yaml/builder.d.ts +2 -0
- package/dist/types/yaml/index.d.ts +4 -0
- package/dist/types/yaml/player.d.ts +34 -0
- package/dist/types/yaml/utils.d.ts +9 -0
- package/dist/types/yaml.d.ts +215 -0
- package/package.json +130 -0
|
@@ -0,0 +1,154 @@
|
|
|
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 ("u" > 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
|
+
ScreenshotItem: ()=>ScreenshotItem
|
|
28
|
+
});
|
|
29
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
30
|
+
const utils_namespaceObject = require("@godscene/shared/utils");
|
|
31
|
+
const html_utils_js_namespaceObject = require("./dump/html-utils.js");
|
|
32
|
+
const screenshot_store_js_namespaceObject = require("./dump/screenshot-store.js");
|
|
33
|
+
function _define_property(obj, key, value) {
|
|
34
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
35
|
+
value: value,
|
|
36
|
+
enumerable: true,
|
|
37
|
+
configurable: true,
|
|
38
|
+
writable: true
|
|
39
|
+
});
|
|
40
|
+
else obj[key] = value;
|
|
41
|
+
return obj;
|
|
42
|
+
}
|
|
43
|
+
function detectFormat(base64) {
|
|
44
|
+
if (base64.startsWith('data:image/jpeg')) return 'jpeg';
|
|
45
|
+
if (base64.startsWith('data:image/jpg')) return 'jpeg';
|
|
46
|
+
return 'png';
|
|
47
|
+
}
|
|
48
|
+
class ScreenshotItem {
|
|
49
|
+
static create(base64, capturedAt) {
|
|
50
|
+
return new ScreenshotItem((0, utils_namespaceObject.uuid)(), base64, capturedAt);
|
|
51
|
+
}
|
|
52
|
+
get id() {
|
|
53
|
+
return this._id;
|
|
54
|
+
}
|
|
55
|
+
get format() {
|
|
56
|
+
return this._format;
|
|
57
|
+
}
|
|
58
|
+
get extension() {
|
|
59
|
+
return 'jpeg' === this._format ? 'jpeg' : 'png';
|
|
60
|
+
}
|
|
61
|
+
get capturedAt() {
|
|
62
|
+
return this._capturedAt;
|
|
63
|
+
}
|
|
64
|
+
get base64() {
|
|
65
|
+
if (null !== this._base64) return this._base64;
|
|
66
|
+
const loadFromFile = ()=>{
|
|
67
|
+
if (null === this._persistedPath) throw new Error(`Screenshot ${this._id}: file recovery path missing`);
|
|
68
|
+
const buffer = (0, external_node_fs_namespaceObject.readFileSync)(this._persistedPath);
|
|
69
|
+
return `data:image/${this._format};base64,${buffer.toString('base64')}`;
|
|
70
|
+
};
|
|
71
|
+
const loadFromInline = ()=>{
|
|
72
|
+
if (null === this._persistedHtmlPath) throw new Error(`Screenshot ${this._id}: HTML recovery path missing`);
|
|
73
|
+
const data = (0, html_utils_js_namespaceObject.extractImageByIdSync)(this._persistedHtmlPath, this._id);
|
|
74
|
+
if (data) return data;
|
|
75
|
+
throw new Error(`Screenshot ${this._id}: cannot recover from HTML (id not found in ${this._persistedHtmlPath})`);
|
|
76
|
+
};
|
|
77
|
+
if (this._serializedRef?.storage === 'file') return loadFromFile();
|
|
78
|
+
if (this._serializedRef?.storage === 'inline') return loadFromInline();
|
|
79
|
+
if (null !== this._persistedPath) return loadFromFile();
|
|
80
|
+
if (null !== this._persistedHtmlPath) return loadFromInline();
|
|
81
|
+
throw new Error(`Screenshot ${this._id}: base64 data released without recovery path`);
|
|
82
|
+
}
|
|
83
|
+
hasBase64() {
|
|
84
|
+
return null !== this._base64;
|
|
85
|
+
}
|
|
86
|
+
markPersistedInline(htmlPath) {
|
|
87
|
+
const ref = this.createRef('inline');
|
|
88
|
+
this._serializedRef = ref;
|
|
89
|
+
this._persistedHtmlPath = htmlPath;
|
|
90
|
+
this._base64 = null;
|
|
91
|
+
return ref;
|
|
92
|
+
}
|
|
93
|
+
registerPersistedFileCopy(relativePath, absolutePath) {
|
|
94
|
+
const ref = this.createRef('file', relativePath);
|
|
95
|
+
this._persistedPath = absolutePath;
|
|
96
|
+
this._base64 = null;
|
|
97
|
+
return ref;
|
|
98
|
+
}
|
|
99
|
+
markPersistedToPath(relativePath, absolutePath) {
|
|
100
|
+
const ref = this.registerPersistedFileCopy(relativePath, absolutePath);
|
|
101
|
+
this._serializedRef = ref;
|
|
102
|
+
return ref;
|
|
103
|
+
}
|
|
104
|
+
toSerializable() {
|
|
105
|
+
return this._serializedRef ?? {
|
|
106
|
+
type: 'midscene_screenshot_ref',
|
|
107
|
+
id: this._id,
|
|
108
|
+
capturedAt: this._capturedAt,
|
|
109
|
+
mimeType: 'jpeg' === this._format ? 'image/jpeg' : 'image/png',
|
|
110
|
+
storage: 'inline'
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
static isSerialized(value) {
|
|
114
|
+
return null !== (0, screenshot_store_js_namespaceObject.normalizeScreenshotRef)(value);
|
|
115
|
+
}
|
|
116
|
+
createRef(storage, relativePath) {
|
|
117
|
+
const baseRef = {
|
|
118
|
+
type: 'midscene_screenshot_ref',
|
|
119
|
+
id: this._id,
|
|
120
|
+
capturedAt: this._capturedAt,
|
|
121
|
+
mimeType: 'jpeg' === this._format ? 'image/jpeg' : 'image/png',
|
|
122
|
+
storage
|
|
123
|
+
};
|
|
124
|
+
if ('file' === storage) return {
|
|
125
|
+
...baseRef,
|
|
126
|
+
storage,
|
|
127
|
+
path: relativePath
|
|
128
|
+
};
|
|
129
|
+
return baseRef;
|
|
130
|
+
}
|
|
131
|
+
get rawBase64() {
|
|
132
|
+
return this.base64.replace(/^data:image\/(png|jpeg|jpg);base64,/, '');
|
|
133
|
+
}
|
|
134
|
+
constructor(id, base64, capturedAt){
|
|
135
|
+
_define_property(this, "_id", void 0);
|
|
136
|
+
_define_property(this, "_base64", void 0);
|
|
137
|
+
_define_property(this, "_format", void 0);
|
|
138
|
+
_define_property(this, "_capturedAt", void 0);
|
|
139
|
+
_define_property(this, "_serializedRef", null);
|
|
140
|
+
_define_property(this, "_persistedPath", null);
|
|
141
|
+
_define_property(this, "_persistedHtmlPath", null);
|
|
142
|
+
this._id = id;
|
|
143
|
+
this._base64 = base64;
|
|
144
|
+
this._format = detectFormat(base64);
|
|
145
|
+
this._capturedAt = capturedAt;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.ScreenshotItem = __webpack_exports__.ScreenshotItem;
|
|
149
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
150
|
+
"ScreenshotItem"
|
|
151
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
152
|
+
Object.defineProperty(exports, '__esModule', {
|
|
153
|
+
value: true
|
|
154
|
+
});
|
|
@@ -0,0 +1,306 @@
|
|
|
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 ("u" > 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
|
+
default: ()=>Service
|
|
28
|
+
});
|
|
29
|
+
const util_js_namespaceObject = require("../ai-model/auto-glm/util.js");
|
|
30
|
+
const index_js_namespaceObject = require("../ai-model/index.js");
|
|
31
|
+
const inspect_js_namespaceObject = require("../ai-model/inspect.js");
|
|
32
|
+
const describe_js_namespaceObject = require("../ai-model/prompt/describe.js");
|
|
33
|
+
const external_common_js_namespaceObject = require("../common.js");
|
|
34
|
+
const external_types_js_namespaceObject = require("../types.js");
|
|
35
|
+
const img_namespaceObject = require("@godscene/shared/img");
|
|
36
|
+
const logger_namespaceObject = require("@godscene/shared/logger");
|
|
37
|
+
const utils_namespaceObject = require("@godscene/shared/utils");
|
|
38
|
+
const external_utils_js_namespaceObject = require("./utils.js");
|
|
39
|
+
function _define_property(obj, key, value) {
|
|
40
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
41
|
+
value: value,
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true,
|
|
44
|
+
writable: true
|
|
45
|
+
});
|
|
46
|
+
else obj[key] = value;
|
|
47
|
+
return obj;
|
|
48
|
+
}
|
|
49
|
+
const debug = (0, logger_namespaceObject.getDebug)('ai:service');
|
|
50
|
+
class Service {
|
|
51
|
+
async locate(query, opt, modelConfig, abortSignal) {
|
|
52
|
+
const queryPrompt = 'string' == typeof query ? query : query.prompt;
|
|
53
|
+
(0, utils_namespaceObject.assert)(queryPrompt, 'query is required for locate');
|
|
54
|
+
(0, utils_namespaceObject.assert)('object' == typeof query, 'query should be an object for locate');
|
|
55
|
+
const hasPlanLocatedElement = !!opt?.planLocatedElement?.rect;
|
|
56
|
+
let searchAreaPrompt;
|
|
57
|
+
if (query.deepLocate && !hasPlanLocatedElement) searchAreaPrompt = query.prompt;
|
|
58
|
+
const { modelFamily } = modelConfig;
|
|
59
|
+
if (searchAreaPrompt && !modelFamily) {
|
|
60
|
+
console.warn('The "deepLocate" feature is not supported with multimodal LLM. Please config VL model for Midscene. https://midscenejs.com/model-config');
|
|
61
|
+
searchAreaPrompt = void 0;
|
|
62
|
+
}
|
|
63
|
+
if (searchAreaPrompt && (0, util_js_namespaceObject.isAutoGLM)(modelFamily)) {
|
|
64
|
+
console.warn('The "deepLocate" feature is not supported with AutoGLM.');
|
|
65
|
+
searchAreaPrompt = void 0;
|
|
66
|
+
}
|
|
67
|
+
const context = opt?.context || await this.contextRetrieverFn();
|
|
68
|
+
let searchArea;
|
|
69
|
+
let searchAreaRawResponse;
|
|
70
|
+
let searchAreaUsage;
|
|
71
|
+
let searchAreaResponse;
|
|
72
|
+
if (query.deepLocate && hasPlanLocatedElement) {
|
|
73
|
+
const searchAreaConfig = await (0, inspect_js_namespaceObject.buildSearchAreaConfig)({
|
|
74
|
+
context,
|
|
75
|
+
baseRect: opt.planLocatedElement.rect,
|
|
76
|
+
modelFamily
|
|
77
|
+
});
|
|
78
|
+
searchArea = searchAreaConfig.rect;
|
|
79
|
+
searchAreaRawResponse = JSON.stringify({
|
|
80
|
+
source: 'plan-located-element',
|
|
81
|
+
rect: opt.planLocatedElement.rect
|
|
82
|
+
});
|
|
83
|
+
searchAreaResponse = {
|
|
84
|
+
rect: searchArea,
|
|
85
|
+
imageBase64: searchAreaConfig.imageBase64,
|
|
86
|
+
scale: searchAreaConfig.scale,
|
|
87
|
+
rawResponse: searchAreaRawResponse
|
|
88
|
+
};
|
|
89
|
+
} else if (searchAreaPrompt) {
|
|
90
|
+
searchAreaResponse = await (0, inspect_js_namespaceObject.AiLocateSection)({
|
|
91
|
+
context,
|
|
92
|
+
sectionDescription: searchAreaPrompt,
|
|
93
|
+
modelConfig,
|
|
94
|
+
abortSignal
|
|
95
|
+
});
|
|
96
|
+
(0, utils_namespaceObject.assert)(searchAreaResponse.rect, `cannot find search area for "${searchAreaPrompt}"${searchAreaResponse.error ? `: ${searchAreaResponse.error}` : ''}`);
|
|
97
|
+
searchAreaRawResponse = searchAreaResponse.rawResponse;
|
|
98
|
+
searchAreaUsage = searchAreaResponse.usage;
|
|
99
|
+
searchArea = searchAreaResponse.rect;
|
|
100
|
+
}
|
|
101
|
+
const startTime = Date.now();
|
|
102
|
+
const { parseResult, rect, rawResponse, usage, reasoning_content } = await (0, index_js_namespaceObject.AiLocateElement)({
|
|
103
|
+
context,
|
|
104
|
+
targetElementDescription: queryPrompt,
|
|
105
|
+
searchConfig: searchAreaResponse,
|
|
106
|
+
modelConfig,
|
|
107
|
+
abortSignal
|
|
108
|
+
});
|
|
109
|
+
const timeCost = Date.now() - startTime;
|
|
110
|
+
const taskInfo = {
|
|
111
|
+
...this.taskInfo ? this.taskInfo : {},
|
|
112
|
+
durationMs: timeCost,
|
|
113
|
+
rawResponse: JSON.stringify(rawResponse),
|
|
114
|
+
formatResponse: JSON.stringify(parseResult),
|
|
115
|
+
usage,
|
|
116
|
+
searchArea,
|
|
117
|
+
searchAreaRawResponse,
|
|
118
|
+
searchAreaUsage,
|
|
119
|
+
reasoning_content
|
|
120
|
+
};
|
|
121
|
+
let errorLog;
|
|
122
|
+
if (parseResult.errors?.length) errorLog = `failed to locate element: \n${parseResult.errors.join('\n')}`;
|
|
123
|
+
const dumpData = {
|
|
124
|
+
type: 'locate',
|
|
125
|
+
userQuery: {
|
|
126
|
+
element: queryPrompt
|
|
127
|
+
},
|
|
128
|
+
matchedElement: [],
|
|
129
|
+
matchedRect: rect,
|
|
130
|
+
data: null,
|
|
131
|
+
taskInfo,
|
|
132
|
+
deepLocate: !!searchArea,
|
|
133
|
+
error: errorLog
|
|
134
|
+
};
|
|
135
|
+
const elements = parseResult.elements || [];
|
|
136
|
+
const dump = (0, external_utils_js_namespaceObject.createServiceDump)({
|
|
137
|
+
...dumpData,
|
|
138
|
+
matchedElement: elements
|
|
139
|
+
});
|
|
140
|
+
if (errorLog) throw new external_types_js_namespaceObject.ServiceError(errorLog, dump);
|
|
141
|
+
if (elements.length > 1) throw new external_types_js_namespaceObject.ServiceError(`locate: multiple elements found, length = ${elements.length}`, dump);
|
|
142
|
+
if (1 === elements.length) return {
|
|
143
|
+
element: {
|
|
144
|
+
center: elements[0].center,
|
|
145
|
+
rect: elements[0].rect,
|
|
146
|
+
description: elements[0].description
|
|
147
|
+
},
|
|
148
|
+
rect,
|
|
149
|
+
dump
|
|
150
|
+
};
|
|
151
|
+
return {
|
|
152
|
+
element: null,
|
|
153
|
+
rect,
|
|
154
|
+
dump
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
async extract(dataDemand, modelConfig, opt, pageDescription, multimodalPrompt, context) {
|
|
158
|
+
(0, utils_namespaceObject.assert)(context, 'context is required for extract');
|
|
159
|
+
(0, utils_namespaceObject.assert)('object' == typeof dataDemand || 'string' == typeof dataDemand, `dataDemand should be object or string, but get ${typeof dataDemand}`);
|
|
160
|
+
const startTime = Date.now();
|
|
161
|
+
let parseResult;
|
|
162
|
+
let rawResponse;
|
|
163
|
+
let usage;
|
|
164
|
+
let reasoning_content;
|
|
165
|
+
try {
|
|
166
|
+
const result = await (0, index_js_namespaceObject.AiExtractElementInfo)({
|
|
167
|
+
context,
|
|
168
|
+
dataQuery: dataDemand,
|
|
169
|
+
multimodalPrompt,
|
|
170
|
+
extractOption: opt,
|
|
171
|
+
modelConfig,
|
|
172
|
+
pageDescription
|
|
173
|
+
});
|
|
174
|
+
parseResult = result.parseResult;
|
|
175
|
+
rawResponse = result.rawResponse;
|
|
176
|
+
usage = result.usage;
|
|
177
|
+
reasoning_content = result.reasoning_content;
|
|
178
|
+
} catch (error) {
|
|
179
|
+
if (error instanceof index_js_namespaceObject.AIResponseParseError) {
|
|
180
|
+
const timeCost = Date.now() - startTime;
|
|
181
|
+
const taskInfo = {
|
|
182
|
+
...this.taskInfo ? this.taskInfo : {},
|
|
183
|
+
durationMs: timeCost,
|
|
184
|
+
rawResponse: error.rawResponse,
|
|
185
|
+
usage: error.usage
|
|
186
|
+
};
|
|
187
|
+
const dump = (0, external_utils_js_namespaceObject.createServiceDump)({
|
|
188
|
+
type: 'extract',
|
|
189
|
+
userQuery: {
|
|
190
|
+
dataDemand
|
|
191
|
+
},
|
|
192
|
+
matchedElement: [],
|
|
193
|
+
data: null,
|
|
194
|
+
taskInfo,
|
|
195
|
+
error: error.message
|
|
196
|
+
});
|
|
197
|
+
throw new external_types_js_namespaceObject.ServiceError(error.message, dump);
|
|
198
|
+
}
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
const timeCost = Date.now() - startTime;
|
|
202
|
+
const taskInfo = {
|
|
203
|
+
...this.taskInfo ? this.taskInfo : {},
|
|
204
|
+
durationMs: timeCost,
|
|
205
|
+
rawResponse,
|
|
206
|
+
formatResponse: JSON.stringify(parseResult),
|
|
207
|
+
usage,
|
|
208
|
+
reasoning_content
|
|
209
|
+
};
|
|
210
|
+
let errorLog;
|
|
211
|
+
if (parseResult.errors?.length) errorLog = `AI response error: \n${parseResult.errors.join('\n')}`;
|
|
212
|
+
const dumpData = {
|
|
213
|
+
type: 'extract',
|
|
214
|
+
userQuery: {
|
|
215
|
+
dataDemand
|
|
216
|
+
},
|
|
217
|
+
matchedElement: [],
|
|
218
|
+
data: null,
|
|
219
|
+
taskInfo,
|
|
220
|
+
error: errorLog
|
|
221
|
+
};
|
|
222
|
+
const { data, thought } = parseResult || {};
|
|
223
|
+
const dump = (0, external_utils_js_namespaceObject.createServiceDump)({
|
|
224
|
+
...dumpData,
|
|
225
|
+
data
|
|
226
|
+
});
|
|
227
|
+
if (errorLog && !data) throw new external_types_js_namespaceObject.ServiceError(errorLog, dump);
|
|
228
|
+
return {
|
|
229
|
+
data,
|
|
230
|
+
thought,
|
|
231
|
+
usage,
|
|
232
|
+
reasoning_content,
|
|
233
|
+
dump
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
async describe(target, modelConfig, opt) {
|
|
237
|
+
(0, utils_namespaceObject.assert)(target, 'target is required for service.describe');
|
|
238
|
+
const context = await this.contextRetrieverFn();
|
|
239
|
+
const { shotSize } = context;
|
|
240
|
+
const screenshotBase64 = context.screenshot.base64;
|
|
241
|
+
(0, utils_namespaceObject.assert)(screenshotBase64, 'screenshot is required for service.describe');
|
|
242
|
+
const { modelFamily } = modelConfig;
|
|
243
|
+
const systemPrompt = (0, describe_js_namespaceObject.elementDescriberInstruction)();
|
|
244
|
+
const defaultRectSize = 30;
|
|
245
|
+
const targetRect = Array.isArray(target) ? {
|
|
246
|
+
left: Math.floor(target[0] - defaultRectSize / 2),
|
|
247
|
+
top: Math.floor(target[1] - defaultRectSize / 2),
|
|
248
|
+
width: defaultRectSize,
|
|
249
|
+
height: defaultRectSize
|
|
250
|
+
} : target;
|
|
251
|
+
let imagePayload = await (0, img_namespaceObject.compositeElementInfoImg)({
|
|
252
|
+
inputImgBase64: screenshotBase64,
|
|
253
|
+
size: shotSize,
|
|
254
|
+
elementsPositionInfo: [
|
|
255
|
+
{
|
|
256
|
+
rect: targetRect
|
|
257
|
+
}
|
|
258
|
+
],
|
|
259
|
+
borderThickness: 3
|
|
260
|
+
});
|
|
261
|
+
if (opt?.deepLocate) {
|
|
262
|
+
const searchArea = (0, external_common_js_namespaceObject.expandSearchArea)(targetRect, shotSize);
|
|
263
|
+
debug('describe: cropping to searchArea', searchArea);
|
|
264
|
+
const croppedResult = await (0, img_namespaceObject.cropByRect)(imagePayload, searchArea, 'qwen2.5-vl' === modelFamily);
|
|
265
|
+
imagePayload = croppedResult.imageBase64;
|
|
266
|
+
}
|
|
267
|
+
const msgs = [
|
|
268
|
+
{
|
|
269
|
+
role: 'system',
|
|
270
|
+
content: systemPrompt
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
role: 'user',
|
|
274
|
+
content: [
|
|
275
|
+
{
|
|
276
|
+
type: 'image_url',
|
|
277
|
+
image_url: {
|
|
278
|
+
url: imagePayload,
|
|
279
|
+
detail: 'high'
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
]
|
|
283
|
+
}
|
|
284
|
+
];
|
|
285
|
+
const res = await (0, index_js_namespaceObject.callAIWithObjectResponse)(msgs, modelConfig);
|
|
286
|
+
const { content } = res;
|
|
287
|
+
(0, utils_namespaceObject.assert)(!content.error, `describe failed: ${content.error}`);
|
|
288
|
+
(0, utils_namespaceObject.assert)(content.description, 'failed to describe the element');
|
|
289
|
+
return content;
|
|
290
|
+
}
|
|
291
|
+
constructor(context, opt){
|
|
292
|
+
_define_property(this, "contextRetrieverFn", void 0);
|
|
293
|
+
_define_property(this, "taskInfo", void 0);
|
|
294
|
+
(0, utils_namespaceObject.assert)(context, 'context is required for Service');
|
|
295
|
+
if ('function' == typeof context) this.contextRetrieverFn = context;
|
|
296
|
+
else this.contextRetrieverFn = ()=>Promise.resolve(context);
|
|
297
|
+
if (void 0 !== opt?.taskInfo) this.taskInfo = opt.taskInfo;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
exports["default"] = __webpack_exports__["default"];
|
|
301
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
302
|
+
"default"
|
|
303
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
304
|
+
Object.defineProperty(exports, '__esModule', {
|
|
305
|
+
value: true
|
|
306
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
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 ("u" > 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
|
+
createServiceDump: ()=>createServiceDump
|
|
28
|
+
});
|
|
29
|
+
const utils_namespaceObject = require("@godscene/shared/utils");
|
|
30
|
+
function createServiceDump(data) {
|
|
31
|
+
const baseData = {
|
|
32
|
+
logTime: Date.now()
|
|
33
|
+
};
|
|
34
|
+
const finalData = {
|
|
35
|
+
logId: (0, utils_namespaceObject.uuid)(),
|
|
36
|
+
...baseData,
|
|
37
|
+
...data
|
|
38
|
+
};
|
|
39
|
+
return finalData;
|
|
40
|
+
}
|
|
41
|
+
exports.createServiceDump = __webpack_exports__.createServiceDump;
|
|
42
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
43
|
+
"createServiceDump"
|
|
44
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
45
|
+
Object.defineProperty(exports, '__esModule', {
|
|
46
|
+
value: true
|
|
47
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
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 ("u" > 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
|
+
runSkillCLI: ()=>runSkillCLI
|
|
28
|
+
});
|
|
29
|
+
const cli_namespaceObject = require("@godscene/shared/cli");
|
|
30
|
+
const base_tools_namespaceObject = require("@godscene/shared/mcp/base-tools");
|
|
31
|
+
const agent_js_namespaceObject = require("../agent/agent.js");
|
|
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 SkillMidsceneTools extends base_tools_namespaceObject.BaseMidsceneTools {
|
|
43
|
+
createTemporaryDevice() {
|
|
44
|
+
return new this.DeviceClass();
|
|
45
|
+
}
|
|
46
|
+
async ensureAgent() {
|
|
47
|
+
if (!this.agent) {
|
|
48
|
+
const device = new this.DeviceClass();
|
|
49
|
+
this.agent = new agent_js_namespaceObject.Agent(device);
|
|
50
|
+
}
|
|
51
|
+
return this.agent;
|
|
52
|
+
}
|
|
53
|
+
constructor(DeviceClass){
|
|
54
|
+
super(), _define_property(this, "DeviceClass", void 0), this.DeviceClass = DeviceClass;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function runSkillCLI(options) {
|
|
58
|
+
const tools = new SkillMidsceneTools(options.DeviceClass);
|
|
59
|
+
return (0, cli_namespaceObject.runToolsCLI)(tools, options.scriptName).catch((e)=>{
|
|
60
|
+
process.exit((0, cli_namespaceObject.reportCLIError)(e));
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
exports.runSkillCLI = __webpack_exports__.runSkillCLI;
|
|
64
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
65
|
+
"runSkillCLI"
|
|
66
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
67
|
+
Object.defineProperty(exports, '__esModule', {
|
|
68
|
+
value: true
|
|
69
|
+
});
|