@sqaitech/core 0.5.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/LICENSE +21 -0
- package/README.md +9 -0
- package/dist/es/agent/agent.mjs +635 -0
- package/dist/es/agent/agent.mjs.map +1 -0
- package/dist/es/agent/common.mjs +0 -0
- package/dist/es/agent/index.mjs +6 -0
- package/dist/es/agent/task-cache.mjs +184 -0
- package/dist/es/agent/task-cache.mjs.map +1 -0
- package/dist/es/agent/tasks.mjs +663 -0
- package/dist/es/agent/tasks.mjs.map +1 -0
- package/dist/es/agent/ui-utils.mjs +72 -0
- package/dist/es/agent/ui-utils.mjs.map +1 -0
- package/dist/es/agent/utils.mjs +162 -0
- package/dist/es/agent/utils.mjs.map +1 -0
- package/dist/es/ai-model/action-executor.mjs +129 -0
- package/dist/es/ai-model/action-executor.mjs.map +1 -0
- package/dist/es/ai-model/common.mjs +355 -0
- package/dist/es/ai-model/common.mjs.map +1 -0
- package/dist/es/ai-model/conversation-history.mjs +58 -0
- package/dist/es/ai-model/conversation-history.mjs.map +1 -0
- package/dist/es/ai-model/index.mjs +11 -0
- package/dist/es/ai-model/inspect.mjs +286 -0
- package/dist/es/ai-model/inspect.mjs.map +1 -0
- package/dist/es/ai-model/llm-planning.mjs +140 -0
- package/dist/es/ai-model/llm-planning.mjs.map +1 -0
- package/dist/es/ai-model/prompt/assertion.mjs +31 -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 +129 -0
- package/dist/es/ai-model/prompt/extraction.mjs.map +1 -0
- package/dist/es/ai-model/prompt/llm-locator.mjs +268 -0
- package/dist/es/ai-model/prompt/llm-locator.mjs.map +1 -0
- package/dist/es/ai-model/prompt/llm-planning.mjs +367 -0
- package/dist/es/ai-model/prompt/llm-planning.mjs.map +1 -0
- package/dist/es/ai-model/prompt/llm-section-locator.mjs +41 -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 +124 -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 +388 -0
- package/dist/es/ai-model/service-caller/index.mjs.map +1 -0
- package/dist/es/ai-model/ui-tars-planning.mjs +201 -0
- package/dist/es/ai-model/ui-tars-planning.mjs.map +1 -0
- package/dist/es/device/index.mjs +152 -0
- package/dist/es/device/index.mjs.map +1 -0
- package/dist/es/image/index.mjs +2 -0
- package/dist/es/index.mjs +11 -0
- package/dist/es/index.mjs.map +1 -0
- package/dist/es/insight/index.mjs +231 -0
- package/dist/es/insight/index.mjs.map +1 -0
- package/dist/es/insight/utils.mjs +15 -0
- package/dist/es/insight/utils.mjs.map +1 -0
- package/dist/es/report.mjs +88 -0
- package/dist/es/report.mjs.map +1 -0
- package/dist/es/tree.mjs +2 -0
- package/dist/es/types.mjs +11 -0
- package/dist/es/types.mjs.map +1 -0
- package/dist/es/utils.mjs +202 -0
- package/dist/es/utils.mjs.map +1 -0
- package/dist/es/yaml/builder.mjs +13 -0
- package/dist/es/yaml/builder.mjs.map +1 -0
- package/dist/es/yaml/index.mjs +3 -0
- package/dist/es/yaml/player.mjs +372 -0
- package/dist/es/yaml/player.mjs.map +1 -0
- package/dist/es/yaml/utils.mjs +73 -0
- package/dist/es/yaml/utils.mjs.map +1 -0
- package/dist/es/yaml.mjs +0 -0
- package/dist/lib/agent/agent.js +682 -0
- package/dist/lib/agent/agent.js.map +1 -0
- package/dist/lib/agent/common.js +5 -0
- package/dist/lib/agent/index.js +81 -0
- package/dist/lib/agent/index.js.map +1 -0
- package/dist/lib/agent/task-cache.js +236 -0
- package/dist/lib/agent/task-cache.js.map +1 -0
- package/dist/lib/agent/tasks.js +700 -0
- package/dist/lib/agent/tasks.js.map +1 -0
- package/dist/lib/agent/ui-utils.js +121 -0
- package/dist/lib/agent/ui-utils.js.map +1 -0
- package/dist/lib/agent/utils.js +233 -0
- package/dist/lib/agent/utils.js.map +1 -0
- package/dist/lib/ai-model/action-executor.js +163 -0
- package/dist/lib/ai-model/action-executor.js.map +1 -0
- package/dist/lib/ai-model/common.js +461 -0
- package/dist/lib/ai-model/common.js.map +1 -0
- package/dist/lib/ai-model/conversation-history.js +92 -0
- package/dist/lib/ai-model/conversation-history.js.map +1 -0
- package/dist/lib/ai-model/index.js +131 -0
- package/dist/lib/ai-model/index.js.map +1 -0
- package/dist/lib/ai-model/inspect.js +326 -0
- package/dist/lib/ai-model/inspect.js.map +1 -0
- package/dist/lib/ai-model/llm-planning.js +174 -0
- package/dist/lib/ai-model/llm-planning.js.map +1 -0
- package/dist/lib/ai-model/prompt/assertion.js +65 -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 +169 -0
- package/dist/lib/ai-model/prompt/extraction.js.map +1 -0
- package/dist/lib/ai-model/prompt/llm-locator.js +308 -0
- package/dist/lib/ai-model/prompt/llm-locator.js.map +1 -0
- package/dist/lib/ai-model/prompt/llm-planning.js +407 -0
- package/dist/lib/ai-model/prompt/llm-planning.js.map +1 -0
- package/dist/lib/ai-model/prompt/llm-section-locator.js +78 -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 +176 -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 +468 -0
- package/dist/lib/ai-model/service-caller/index.js.map +1 -0
- package/dist/lib/ai-model/ui-tars-planning.js +238 -0
- package/dist/lib/ai-model/ui-tars-planning.js.map +1 -0
- package/dist/lib/device/index.js +255 -0
- package/dist/lib/device/index.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 +103 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/insight/index.js +265 -0
- package/dist/lib/insight/index.js.map +1 -0
- package/dist/lib/insight/utils.js +49 -0
- package/dist/lib/insight/utils.js.map +1 -0
- package/dist/lib/report.js +122 -0
- package/dist/lib/report.js.map +1 -0
- package/dist/lib/tree.js +44 -0
- package/dist/lib/tree.js.map +1 -0
- package/dist/lib/types.js +82 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.js +281 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/yaml/builder.js +57 -0
- package/dist/lib/yaml/builder.js.map +1 -0
- package/dist/lib/yaml/index.js +80 -0
- package/dist/lib/yaml/index.js.map +1 -0
- package/dist/lib/yaml/player.js +406 -0
- package/dist/lib/yaml/player.js.map +1 -0
- package/dist/lib/yaml/utils.js +126 -0
- package/dist/lib/yaml/utils.js.map +1 -0
- package/dist/lib/yaml.js +20 -0
- package/dist/lib/yaml.js.map +1 -0
- package/dist/types/agent/agent.d.ts +156 -0
- package/dist/types/agent/common.d.ts +0 -0
- package/dist/types/agent/index.d.ts +9 -0
- package/dist/types/agent/task-cache.d.ts +48 -0
- package/dist/types/agent/tasks.d.ts +48 -0
- package/dist/types/agent/ui-utils.d.ts +7 -0
- package/dist/types/agent/utils.d.ts +52 -0
- package/dist/types/ai-model/action-executor.d.ts +19 -0
- package/dist/types/ai-model/common.d.ts +569 -0
- package/dist/types/ai-model/conversation-history.d.ts +18 -0
- package/dist/types/ai-model/index.d.ts +13 -0
- package/dist/types/ai-model/inspect.d.ts +46 -0
- package/dist/types/ai-model/llm-planning.d.ts +11 -0
- package/dist/types/ai-model/prompt/assertion.d.ts +2 -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 +8 -0
- package/dist/types/ai-model/prompt/llm-planning.d.ts +9 -0
- package/dist/types/ai-model/prompt/llm-section-locator.d.ts +5 -0
- package/dist/types/ai-model/prompt/playwright-generator.d.ts +26 -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 +47 -0
- package/dist/types/ai-model/prompt/yaml-generator.d.ts +100 -0
- package/dist/types/ai-model/service-caller/index.d.ts +26 -0
- package/dist/types/ai-model/ui-tars-planning.d.ts +59 -0
- package/dist/types/device/index.d.ts +2158 -0
- package/dist/types/image/index.d.ts +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/insight/index.d.ts +31 -0
- package/dist/types/insight/utils.d.ts +2 -0
- package/dist/types/report.d.ts +12 -0
- package/dist/types/tree.d.ts +1 -0
- package/dist/types/types.d.ts +412 -0
- package/dist/types/utils.d.ts +40 -0
- package/dist/types/yaml/builder.d.ts +2 -0
- package/dist/types/yaml/index.d.ts +3 -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 +178 -0
- package/package.json +124 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
14
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: definition[key]
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
})();
|
|
20
|
+
(()=>{
|
|
21
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
22
|
+
})();
|
|
23
|
+
(()=>{
|
|
24
|
+
__webpack_require__.r = (exports1)=>{
|
|
25
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
26
|
+
value: 'Module'
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
29
|
+
value: true
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
})();
|
|
33
|
+
var __webpack_exports__ = {};
|
|
34
|
+
__webpack_require__.r(__webpack_exports__);
|
|
35
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
getVersion: ()=>external_utils_js_namespaceObject.getVersion,
|
|
37
|
+
SizeSchema: ()=>external_ai_model_index_js_namespaceObject.SizeSchema,
|
|
38
|
+
plan: ()=>external_ai_model_index_js_namespaceObject.plan,
|
|
39
|
+
TMultimodalPromptSchema: ()=>external_ai_model_index_js_namespaceObject.TMultimodalPromptSchema,
|
|
40
|
+
TUserPromptSchema: ()=>external_ai_model_index_js_namespaceObject.TUserPromptSchema,
|
|
41
|
+
SQAI_MODEL_NAME: ()=>env_namespaceObject.SQAI_MODEL_NAME,
|
|
42
|
+
z: ()=>external_zod_namespaceObject.z,
|
|
43
|
+
createAgent: ()=>external_agent_index_js_namespaceObject.createAgent,
|
|
44
|
+
RectSchema: ()=>external_ai_model_index_js_namespaceObject.RectSchema,
|
|
45
|
+
PointSchema: ()=>external_ai_model_index_js_namespaceObject.PointSchema,
|
|
46
|
+
default: ()=>src,
|
|
47
|
+
AiLocateElement: ()=>external_ai_model_index_js_namespaceObject.AiLocateElement,
|
|
48
|
+
Insight: ()=>index_js_default(),
|
|
49
|
+
describeUserPage: ()=>external_ai_model_index_js_namespaceObject.describeUserPage,
|
|
50
|
+
Executor: ()=>action_executor_js_namespaceObject.Executor,
|
|
51
|
+
getMidsceneLocationSchema: ()=>external_ai_model_index_js_namespaceObject.getMidsceneLocationSchema,
|
|
52
|
+
Agent: ()=>external_agent_index_js_namespaceObject.Agent
|
|
53
|
+
});
|
|
54
|
+
const external_zod_namespaceObject = require("zod");
|
|
55
|
+
const action_executor_js_namespaceObject = require("./ai-model/action-executor.js");
|
|
56
|
+
const index_js_namespaceObject = require("./insight/index.js");
|
|
57
|
+
var index_js_default = /*#__PURE__*/ __webpack_require__.n(index_js_namespaceObject);
|
|
58
|
+
const external_utils_js_namespaceObject = require("./utils.js");
|
|
59
|
+
const external_ai_model_index_js_namespaceObject = require("./ai-model/index.js");
|
|
60
|
+
const env_namespaceObject = require("@sqaitech/shared/env");
|
|
61
|
+
const external_agent_index_js_namespaceObject = require("./agent/index.js");
|
|
62
|
+
const src = index_js_default();
|
|
63
|
+
exports.Agent = __webpack_exports__.Agent;
|
|
64
|
+
exports.AiLocateElement = __webpack_exports__.AiLocateElement;
|
|
65
|
+
exports.Executor = __webpack_exports__.Executor;
|
|
66
|
+
exports.Insight = __webpack_exports__.Insight;
|
|
67
|
+
exports.PointSchema = __webpack_exports__.PointSchema;
|
|
68
|
+
exports.RectSchema = __webpack_exports__.RectSchema;
|
|
69
|
+
exports.SQAI_MODEL_NAME = __webpack_exports__.SQAI_MODEL_NAME;
|
|
70
|
+
exports.SizeSchema = __webpack_exports__.SizeSchema;
|
|
71
|
+
exports.TMultimodalPromptSchema = __webpack_exports__.TMultimodalPromptSchema;
|
|
72
|
+
exports.TUserPromptSchema = __webpack_exports__.TUserPromptSchema;
|
|
73
|
+
exports.createAgent = __webpack_exports__.createAgent;
|
|
74
|
+
exports["default"] = __webpack_exports__["default"];
|
|
75
|
+
exports.describeUserPage = __webpack_exports__.describeUserPage;
|
|
76
|
+
exports.getMidsceneLocationSchema = __webpack_exports__.getMidsceneLocationSchema;
|
|
77
|
+
exports.getVersion = __webpack_exports__.getVersion;
|
|
78
|
+
exports.plan = __webpack_exports__.plan;
|
|
79
|
+
exports.z = __webpack_exports__.z;
|
|
80
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
81
|
+
"Agent",
|
|
82
|
+
"AiLocateElement",
|
|
83
|
+
"Executor",
|
|
84
|
+
"Insight",
|
|
85
|
+
"PointSchema",
|
|
86
|
+
"RectSchema",
|
|
87
|
+
"SQAI_MODEL_NAME",
|
|
88
|
+
"SizeSchema",
|
|
89
|
+
"TMultimodalPromptSchema",
|
|
90
|
+
"TUserPromptSchema",
|
|
91
|
+
"createAgent",
|
|
92
|
+
"default",
|
|
93
|
+
"describeUserPage",
|
|
94
|
+
"getMidsceneLocationSchema",
|
|
95
|
+
"getVersion",
|
|
96
|
+
"plan",
|
|
97
|
+
"z"
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["webpack://@sqaitech/core/webpack/runtime/compat_get_default_export","webpack://@sqaitech/core/webpack/runtime/define_property_getters","webpack://@sqaitech/core/webpack/runtime/has_own_property","webpack://@sqaitech/core/webpack/runtime/make_namespace_object","webpack://@sqaitech/core/./src/index.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__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 { z } from 'zod';\r\nimport { Executor } from './ai-model/action-executor';\r\nimport Insight from './insight/index';\r\nimport { getVersion } from './utils';\r\n\r\nexport {\r\n plan,\r\n describeUserPage,\r\n AiLocateElement,\r\n getMidsceneLocationSchema,\r\n type MidsceneLocationResultType,\r\n PointSchema,\r\n SizeSchema,\r\n RectSchema,\r\n TMultimodalPromptSchema,\r\n TUserPromptSchema,\r\n type TMultimodalPrompt,\r\n type TUserPrompt,\r\n} from './ai-model/index';\r\n\r\nexport { SQAI_MODEL_NAME } from '@sqaitech/shared/env';\r\n\r\nexport type * from './types';\r\n\r\nexport { z };\r\n\r\nexport default Insight;\r\nexport { Executor, Insight, getVersion };\r\n\r\nexport type {\r\n MidsceneYamlScript,\r\n MidsceneYamlTask,\r\n MidsceneYamlFlowItem,\r\n MidsceneYamlConfigResult,\r\n MidsceneYamlConfig,\r\n MidsceneYamlScriptWebEnv,\r\n MidsceneYamlScriptAndroidEnv,\r\n MidsceneYamlScriptIOSEnv,\r\n MidsceneYamlScriptEnv,\r\n LocateOption,\r\n DetailedLocateParam,\r\n} from './yaml';\r\n\r\nexport { Agent, type AgentOpt, createAgent } from './agent';\r\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","Insight"],"mappings":";;;IACAA,oBAAoB,CAAC,GAAG,CAACC;QACxB,IAAIC,SAASD,UAAUA,OAAO,UAAU,GACvC,IAAOA,MAAM,CAAC,UAAU,GACxB,IAAOA;QACRD,oBAAoB,CAAC,CAACE,QAAQ;YAAE,GAAGA;QAAO;QAC1C,OAAOA;IACR;;;ICPAF,oBAAoB,CAAC,GAAG,CAAC,UAASG;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGH,oBAAoB,CAAC,CAACG,YAAYC,QAAQ,CAACJ,oBAAoB,CAAC,CAAC,UAASI,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAJ,oBAAoB,CAAC,GAAG,CAACM,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFP,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOQ,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACoBA,YAAeI"}
|
|
@@ -0,0 +1,265 @@
|
|
|
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
|
+
default: ()=>Insight
|
|
28
|
+
});
|
|
29
|
+
const common_js_namespaceObject = require("../ai-model/common.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 env_namespaceObject = require("@sqaitech/shared/env");
|
|
34
|
+
const img_namespaceObject = require("@sqaitech/shared/img");
|
|
35
|
+
const logger_namespaceObject = require("@sqaitech/shared/logger");
|
|
36
|
+
const utils_namespaceObject = require("@sqaitech/shared/utils");
|
|
37
|
+
const external_utils_js_namespaceObject = require("./utils.js");
|
|
38
|
+
function _define_property(obj, key, value) {
|
|
39
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
40
|
+
value: value,
|
|
41
|
+
enumerable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
writable: true
|
|
44
|
+
});
|
|
45
|
+
else obj[key] = value;
|
|
46
|
+
return obj;
|
|
47
|
+
}
|
|
48
|
+
const debug = (0, logger_namespaceObject.getDebug)('ai:insight');
|
|
49
|
+
class Insight {
|
|
50
|
+
async locate(query, opt, modelConfig) {
|
|
51
|
+
var _parseResult_errors;
|
|
52
|
+
const queryPrompt = 'string' == typeof query ? query : query.prompt;
|
|
53
|
+
(0, utils_namespaceObject.assert)(queryPrompt, 'query is required for locate');
|
|
54
|
+
const dumpSubscriber = this.onceDumpUpdatedFn;
|
|
55
|
+
this.onceDumpUpdatedFn = void 0;
|
|
56
|
+
(0, utils_namespaceObject.assert)('object' == typeof query, 'query should be an object for locate');
|
|
57
|
+
const globalDeepThinkSwitch = env_namespaceObject.globalConfigManager.getEnvConfigInBoolean(env_namespaceObject.SQAI_FORCE_DEEP_THINK);
|
|
58
|
+
if (globalDeepThinkSwitch) debug('globalDeepThinkSwitch', globalDeepThinkSwitch);
|
|
59
|
+
let searchAreaPrompt;
|
|
60
|
+
if (query.deepThink || globalDeepThinkSwitch) searchAreaPrompt = query.prompt;
|
|
61
|
+
const { vlMode } = modelConfig;
|
|
62
|
+
if (searchAreaPrompt && !vlMode) {
|
|
63
|
+
console.warn('The "deepThink" feature is not supported with multimodal LLM. Please config VL model for SQAI. https://sqai.tech/choose-a-model');
|
|
64
|
+
searchAreaPrompt = void 0;
|
|
65
|
+
}
|
|
66
|
+
const context = (null == opt ? void 0 : opt.context) || await this.contextRetrieverFn('locate');
|
|
67
|
+
let searchArea;
|
|
68
|
+
let searchAreaRawResponse;
|
|
69
|
+
let searchAreaUsage;
|
|
70
|
+
let searchAreaResponse;
|
|
71
|
+
if (searchAreaPrompt) {
|
|
72
|
+
searchAreaResponse = await (0, inspect_js_namespaceObject.AiLocateSection)({
|
|
73
|
+
context,
|
|
74
|
+
sectionDescription: searchAreaPrompt,
|
|
75
|
+
modelConfig
|
|
76
|
+
});
|
|
77
|
+
(0, utils_namespaceObject.assert)(searchAreaResponse.rect, `cannot find search area for "${searchAreaPrompt}"${searchAreaResponse.error ? `: ${searchAreaResponse.error}` : ''}`);
|
|
78
|
+
searchAreaRawResponse = searchAreaResponse.rawResponse;
|
|
79
|
+
searchAreaUsage = searchAreaResponse.usage;
|
|
80
|
+
searchArea = searchAreaResponse.rect;
|
|
81
|
+
}
|
|
82
|
+
const startTime = Date.now();
|
|
83
|
+
const { parseResult, rect, elementById, rawResponse, usage, isOrderSensitive } = await (0, index_js_namespaceObject.AiLocateElement)({
|
|
84
|
+
callAIFn: this.aiVendorFn,
|
|
85
|
+
context,
|
|
86
|
+
targetElementDescription: queryPrompt,
|
|
87
|
+
searchConfig: searchAreaResponse,
|
|
88
|
+
modelConfig
|
|
89
|
+
});
|
|
90
|
+
const timeCost = Date.now() - startTime;
|
|
91
|
+
const taskInfo = {
|
|
92
|
+
...this.taskInfo ? this.taskInfo : {},
|
|
93
|
+
durationMs: timeCost,
|
|
94
|
+
rawResponse: JSON.stringify(rawResponse),
|
|
95
|
+
formatResponse: JSON.stringify(parseResult),
|
|
96
|
+
usage,
|
|
97
|
+
searchArea,
|
|
98
|
+
searchAreaRawResponse,
|
|
99
|
+
searchAreaUsage
|
|
100
|
+
};
|
|
101
|
+
let errorLog;
|
|
102
|
+
if (null == (_parseResult_errors = parseResult.errors) ? void 0 : _parseResult_errors.length) errorLog = `AI model failed to locate: \n${parseResult.errors.join('\n')}`;
|
|
103
|
+
const dumpData = {
|
|
104
|
+
type: 'locate',
|
|
105
|
+
userQuery: {
|
|
106
|
+
element: queryPrompt
|
|
107
|
+
},
|
|
108
|
+
matchedElement: [],
|
|
109
|
+
matchedRect: rect,
|
|
110
|
+
data: null,
|
|
111
|
+
taskInfo,
|
|
112
|
+
deepThink: !!searchArea,
|
|
113
|
+
error: errorLog
|
|
114
|
+
};
|
|
115
|
+
const elements = [];
|
|
116
|
+
(parseResult.elements || []).forEach((item)=>{
|
|
117
|
+
if ('id' in item) {
|
|
118
|
+
const element = elementById(null == item ? void 0 : item.id);
|
|
119
|
+
if (!element) return void console.warn(`locate: cannot find element id=${item.id}. Maybe an unstable response from AI model`);
|
|
120
|
+
elements.push(element);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
(0, external_utils_js_namespaceObject.emitInsightDump)({
|
|
124
|
+
...dumpData,
|
|
125
|
+
matchedElement: elements
|
|
126
|
+
}, dumpSubscriber);
|
|
127
|
+
if (errorLog) throw new Error(errorLog);
|
|
128
|
+
(0, utils_namespaceObject.assert)(elements.length <= 1, `locate: multiple elements found, length = ${elements.length}`);
|
|
129
|
+
if (1 === elements.length) return {
|
|
130
|
+
element: {
|
|
131
|
+
id: elements[0].id,
|
|
132
|
+
indexId: elements[0].indexId,
|
|
133
|
+
center: elements[0].center,
|
|
134
|
+
rect: elements[0].rect,
|
|
135
|
+
xpaths: elements[0].xpaths || [],
|
|
136
|
+
attributes: elements[0].attributes,
|
|
137
|
+
isOrderSensitive
|
|
138
|
+
},
|
|
139
|
+
rect
|
|
140
|
+
};
|
|
141
|
+
return {
|
|
142
|
+
element: null,
|
|
143
|
+
rect
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
async extract(dataDemand, modelConfig, opt, multimodalPrompt) {
|
|
147
|
+
var _parseResult_errors;
|
|
148
|
+
(0, utils_namespaceObject.assert)('object' == typeof dataDemand || 'string' == typeof dataDemand, `dataDemand should be object or string, but get ${typeof dataDemand}`);
|
|
149
|
+
const dumpSubscriber = this.onceDumpUpdatedFn;
|
|
150
|
+
this.onceDumpUpdatedFn = void 0;
|
|
151
|
+
const context = await this.contextRetrieverFn('extract');
|
|
152
|
+
const startTime = Date.now();
|
|
153
|
+
const { parseResult, usage } = await (0, index_js_namespaceObject.AiExtractElementInfo)({
|
|
154
|
+
context,
|
|
155
|
+
dataQuery: dataDemand,
|
|
156
|
+
multimodalPrompt,
|
|
157
|
+
extractOption: opt,
|
|
158
|
+
modelConfig
|
|
159
|
+
});
|
|
160
|
+
const timeCost = Date.now() - startTime;
|
|
161
|
+
const taskInfo = {
|
|
162
|
+
...this.taskInfo ? this.taskInfo : {},
|
|
163
|
+
durationMs: timeCost,
|
|
164
|
+
rawResponse: JSON.stringify(parseResult)
|
|
165
|
+
};
|
|
166
|
+
let errorLog;
|
|
167
|
+
if (null == (_parseResult_errors = parseResult.errors) ? void 0 : _parseResult_errors.length) errorLog = `AI response error: \n${parseResult.errors.join('\n')}`;
|
|
168
|
+
const dumpData = {
|
|
169
|
+
type: 'extract',
|
|
170
|
+
userQuery: {
|
|
171
|
+
dataDemand
|
|
172
|
+
},
|
|
173
|
+
matchedElement: [],
|
|
174
|
+
data: null,
|
|
175
|
+
taskInfo,
|
|
176
|
+
error: errorLog
|
|
177
|
+
};
|
|
178
|
+
const { data, thought } = parseResult || {};
|
|
179
|
+
(0, external_utils_js_namespaceObject.emitInsightDump)({
|
|
180
|
+
...dumpData,
|
|
181
|
+
data
|
|
182
|
+
}, dumpSubscriber);
|
|
183
|
+
if (errorLog && !data && !(null == opt ? void 0 : opt.doNotThrowError)) throw new Error(errorLog);
|
|
184
|
+
return {
|
|
185
|
+
data,
|
|
186
|
+
thought,
|
|
187
|
+
usage
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
async describe(target, modelConfig, opt) {
|
|
191
|
+
(0, utils_namespaceObject.assert)(target, 'target is required for insight.describe');
|
|
192
|
+
const context = await this.contextRetrieverFn('describe');
|
|
193
|
+
const { screenshotBase64, size } = context;
|
|
194
|
+
(0, utils_namespaceObject.assert)(screenshotBase64, 'screenshot is required for insight.describe');
|
|
195
|
+
const { vlMode } = modelConfig;
|
|
196
|
+
const systemPrompt = (0, describe_js_namespaceObject.elementDescriberInstruction)();
|
|
197
|
+
const defaultRectSize = 30;
|
|
198
|
+
const targetRect = Array.isArray(target) ? {
|
|
199
|
+
left: Math.floor(target[0] - defaultRectSize / 2),
|
|
200
|
+
top: Math.floor(target[1] - defaultRectSize / 2),
|
|
201
|
+
width: defaultRectSize,
|
|
202
|
+
height: defaultRectSize
|
|
203
|
+
} : target;
|
|
204
|
+
let imagePayload = await (0, img_namespaceObject.compositeElementInfoImg)({
|
|
205
|
+
inputImgBase64: screenshotBase64,
|
|
206
|
+
size,
|
|
207
|
+
elementsPositionInfo: [
|
|
208
|
+
{
|
|
209
|
+
rect: targetRect
|
|
210
|
+
}
|
|
211
|
+
],
|
|
212
|
+
borderThickness: 3
|
|
213
|
+
});
|
|
214
|
+
if (null == opt ? void 0 : opt.deepThink) {
|
|
215
|
+
const searchArea = (0, common_js_namespaceObject.expandSearchArea)(targetRect, context.size, vlMode);
|
|
216
|
+
debug('describe: set searchArea', searchArea);
|
|
217
|
+
const croppedResult = await (0, img_namespaceObject.cropByRect)(imagePayload, searchArea, 'qwen-vl' === vlMode);
|
|
218
|
+
imagePayload = croppedResult.imageBase64;
|
|
219
|
+
}
|
|
220
|
+
const msgs = [
|
|
221
|
+
{
|
|
222
|
+
role: 'system',
|
|
223
|
+
content: systemPrompt
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
role: 'user',
|
|
227
|
+
content: [
|
|
228
|
+
{
|
|
229
|
+
type: 'image_url',
|
|
230
|
+
image_url: {
|
|
231
|
+
url: imagePayload,
|
|
232
|
+
detail: 'high'
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
]
|
|
236
|
+
}
|
|
237
|
+
];
|
|
238
|
+
const callAIFn = this.aiVendorFn;
|
|
239
|
+
const res = await callAIFn(msgs, common_js_namespaceObject.AIActionType.DESCRIBE_ELEMENT, modelConfig);
|
|
240
|
+
const { content } = res;
|
|
241
|
+
(0, utils_namespaceObject.assert)(!content.error, `describe failed: ${content.error}`);
|
|
242
|
+
(0, utils_namespaceObject.assert)(content.description, 'failed to describe the element');
|
|
243
|
+
return content;
|
|
244
|
+
}
|
|
245
|
+
constructor(context, opt){
|
|
246
|
+
_define_property(this, "contextRetrieverFn", void 0);
|
|
247
|
+
_define_property(this, "aiVendorFn", index_js_namespaceObject.callAIWithObjectResponse);
|
|
248
|
+
_define_property(this, "onceDumpUpdatedFn", void 0);
|
|
249
|
+
_define_property(this, "taskInfo", void 0);
|
|
250
|
+
(0, utils_namespaceObject.assert)(context, 'context is required for Insight');
|
|
251
|
+
if ('function' == typeof context) this.contextRetrieverFn = context;
|
|
252
|
+
else this.contextRetrieverFn = ()=>Promise.resolve(context);
|
|
253
|
+
if (void 0 !== (null == opt ? void 0 : opt.aiVendorFn)) this.aiVendorFn = opt.aiVendorFn;
|
|
254
|
+
if (void 0 !== (null == opt ? void 0 : opt.taskInfo)) this.taskInfo = opt.taskInfo;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
exports["default"] = __webpack_exports__["default"];
|
|
258
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
259
|
+
"default"
|
|
260
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
261
|
+
Object.defineProperty(exports, '__esModule', {
|
|
262
|
+
value: true
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insight\\index.js","sources":["webpack://@sqaitech/core/webpack/runtime/define_property_getters","webpack://@sqaitech/core/webpack/runtime/has_own_property","webpack://@sqaitech/core/webpack/runtime/make_namespace_object","webpack://@sqaitech/core/./src/insight/index.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 { AIActionType, type AIArgs, expandSearchArea } from '@/ai-model/common';\r\nimport {\r\n AiExtractElementInfo,\r\n AiLocateElement,\r\n callAIWithObjectResponse,\r\n} from '@/ai-model/index';\r\nimport { AiLocateSection } from '@/ai-model/inspect';\r\nimport { elementDescriberInstruction } from '@/ai-model/prompt/describe';\r\nimport type {\r\n AIDescribeElementResponse,\r\n AIUsageInfo,\r\n BaseElement,\r\n DetailedLocateParam,\r\n DumpSubscriber,\r\n InsightAction,\r\n InsightExtractOption,\r\n InsightExtractParam,\r\n InsightTaskInfo,\r\n LocateResult,\r\n PartialInsightDumpFromSDK,\r\n Rect,\r\n UIContext,\r\n} from '@/types';\r\nimport {\r\n type IModelConfig,\r\n SQAI_FORCE_DEEP_THINK,\r\n globalConfigManager,\r\n} from '@sqaitech/shared/env';\r\nimport { compositeElementInfoImg, cropByRect } from '@sqaitech/shared/img';\r\nimport { getDebug } from '@sqaitech/shared/logger';\r\nimport { assert } from '@sqaitech/shared/utils';\r\nimport type { TMultimodalPrompt } from '../ai-model/common';\r\nimport { emitInsightDump } from './utils';\r\n\r\nexport interface LocateOpts {\r\n context?: UIContext<BaseElement>;\r\n}\r\n\r\nexport type AnyValue<T> = {\r\n [K in keyof T]: unknown extends T[K] ? any : T[K];\r\n};\r\n\r\ninterface InsightOptions {\r\n taskInfo?: Omit<InsightTaskInfo, 'durationMs'>;\r\n aiVendorFn?: typeof callAIWithObjectResponse;\r\n}\r\n\r\nconst debug = getDebug('ai:insight');\r\nexport default class Insight<\r\n ElementType extends BaseElement = BaseElement,\r\n ContextType extends UIContext<ElementType> = UIContext<ElementType>,\r\n> {\r\n contextRetrieverFn: (\r\n action: InsightAction,\r\n ) => Promise<ContextType> | ContextType;\r\n\r\n aiVendorFn: Exclude<InsightOptions['aiVendorFn'], undefined> =\r\n callAIWithObjectResponse;\r\n\r\n onceDumpUpdatedFn?: DumpSubscriber;\r\n\r\n taskInfo?: Omit<InsightTaskInfo, 'durationMs'>;\r\n\r\n constructor(\r\n context:\r\n | ContextType\r\n | ((action: InsightAction) => Promise<ContextType> | ContextType),\r\n opt?: InsightOptions,\r\n ) {\r\n assert(context, 'context is required for Insight');\r\n if (typeof context === 'function') {\r\n this.contextRetrieverFn = context;\r\n } else {\r\n this.contextRetrieverFn = () => Promise.resolve(context);\r\n }\r\n\r\n // just for unit test, aiVendorFn is callAIWithObjectResponse by default\r\n if (typeof opt?.aiVendorFn !== 'undefined') {\r\n this.aiVendorFn = opt.aiVendorFn;\r\n }\r\n if (typeof opt?.taskInfo !== 'undefined') {\r\n this.taskInfo = opt.taskInfo;\r\n }\r\n }\r\n\r\n async locate(\r\n query: DetailedLocateParam,\r\n opt: LocateOpts,\r\n modelConfig: IModelConfig,\r\n ): Promise<LocateResult> {\r\n const queryPrompt = typeof query === 'string' ? query : query.prompt;\r\n assert(queryPrompt, 'query is required for locate');\r\n const dumpSubscriber = this.onceDumpUpdatedFn;\r\n this.onceDumpUpdatedFn = undefined;\r\n\r\n assert(typeof query === 'object', 'query should be an object for locate');\r\n\r\n const globalDeepThinkSwitch = globalConfigManager.getEnvConfigInBoolean(\r\n SQAI_FORCE_DEEP_THINK,\r\n );\r\n if (globalDeepThinkSwitch) {\r\n debug('globalDeepThinkSwitch', globalDeepThinkSwitch);\r\n }\r\n let searchAreaPrompt;\r\n if (query.deepThink || globalDeepThinkSwitch) {\r\n searchAreaPrompt = query.prompt;\r\n }\r\n\r\n const { vlMode } = modelConfig;\r\n\r\n if (searchAreaPrompt && !vlMode) {\r\n console.warn(\r\n 'The \"deepThink\" feature is not supported with multimodal LLM. Please config VL model for SQAI. https://sqai.tech/choose-a-model',\r\n );\r\n searchAreaPrompt = undefined;\r\n }\r\n\r\n const context = opt?.context || (await this.contextRetrieverFn('locate'));\r\n\r\n let searchArea: Rect | undefined = undefined;\r\n let searchAreaRawResponse: string | undefined = undefined;\r\n let searchAreaUsage: AIUsageInfo | undefined = undefined;\r\n let searchAreaResponse:\r\n | Awaited<ReturnType<typeof AiLocateSection>>\r\n | undefined = undefined;\r\n if (searchAreaPrompt) {\r\n searchAreaResponse = await AiLocateSection({\r\n context,\r\n sectionDescription: searchAreaPrompt,\r\n modelConfig,\r\n });\r\n assert(\r\n searchAreaResponse.rect,\r\n `cannot find search area for \"${searchAreaPrompt}\"${\r\n searchAreaResponse.error ? `: ${searchAreaResponse.error}` : ''\r\n }`,\r\n );\r\n searchAreaRawResponse = searchAreaResponse.rawResponse;\r\n searchAreaUsage = searchAreaResponse.usage;\r\n searchArea = searchAreaResponse.rect;\r\n }\r\n\r\n const startTime = Date.now();\r\n const {\r\n parseResult,\r\n rect,\r\n elementById,\r\n rawResponse,\r\n usage,\r\n isOrderSensitive,\r\n } = await AiLocateElement({\r\n callAIFn: this.aiVendorFn,\r\n context,\r\n targetElementDescription: queryPrompt,\r\n searchConfig: searchAreaResponse,\r\n modelConfig,\r\n });\r\n\r\n const timeCost = Date.now() - startTime;\r\n const taskInfo: InsightTaskInfo = {\r\n ...(this.taskInfo ? this.taskInfo : {}),\r\n durationMs: timeCost,\r\n rawResponse: JSON.stringify(rawResponse),\r\n formatResponse: JSON.stringify(parseResult),\r\n usage,\r\n searchArea,\r\n searchAreaRawResponse,\r\n searchAreaUsage,\r\n };\r\n\r\n let errorLog: string | undefined;\r\n if (parseResult.errors?.length) {\r\n errorLog = `AI model failed to locate: \\n${parseResult.errors.join('\\n')}`;\r\n }\r\n\r\n const dumpData: PartialInsightDumpFromSDK = {\r\n type: 'locate',\r\n userQuery: {\r\n element: queryPrompt,\r\n },\r\n matchedElement: [],\r\n matchedRect: rect,\r\n data: null,\r\n taskInfo,\r\n deepThink: !!searchArea,\r\n error: errorLog,\r\n };\r\n\r\n const elements: BaseElement[] = [];\r\n (parseResult.elements || []).forEach((item) => {\r\n if ('id' in item) {\r\n const element = elementById(item?.id);\r\n\r\n if (!element) {\r\n console.warn(\r\n `locate: cannot find element id=${item.id}. Maybe an unstable response from AI model`,\r\n );\r\n return;\r\n }\r\n elements.push(element);\r\n }\r\n });\r\n\r\n emitInsightDump(\r\n {\r\n ...dumpData,\r\n matchedElement: elements,\r\n },\r\n dumpSubscriber,\r\n );\r\n\r\n if (errorLog) {\r\n throw new Error(errorLog);\r\n }\r\n\r\n assert(\r\n elements.length <= 1,\r\n `locate: multiple elements found, length = ${elements.length}`,\r\n );\r\n\r\n if (elements.length === 1) {\r\n return {\r\n element: {\r\n id: elements[0]!.id,\r\n indexId: elements[0]!.indexId,\r\n center: elements[0]!.center,\r\n rect: elements[0]!.rect,\r\n xpaths: elements[0]!.xpaths || [],\r\n attributes: elements[0]!.attributes,\r\n isOrderSensitive,\r\n },\r\n rect,\r\n };\r\n }\r\n return {\r\n element: null,\r\n rect,\r\n };\r\n }\r\n\r\n async extract<T>(\r\n dataDemand: InsightExtractParam,\r\n modelConfig: IModelConfig,\r\n opt?: InsightExtractOption,\r\n multimodalPrompt?: TMultimodalPrompt,\r\n ): Promise<{\r\n data: T;\r\n thought?: string;\r\n usage?: AIUsageInfo;\r\n }> {\r\n assert(\r\n typeof dataDemand === 'object' || typeof dataDemand === 'string',\r\n `dataDemand should be object or string, but get ${typeof dataDemand}`,\r\n );\r\n const dumpSubscriber = this.onceDumpUpdatedFn;\r\n this.onceDumpUpdatedFn = undefined;\r\n\r\n const context = await this.contextRetrieverFn('extract');\r\n\r\n const startTime = Date.now();\r\n\r\n const { parseResult, usage } = await AiExtractElementInfo<T>({\r\n context,\r\n dataQuery: dataDemand,\r\n multimodalPrompt,\r\n extractOption: opt,\r\n modelConfig,\r\n });\r\n\r\n const timeCost = Date.now() - startTime;\r\n const taskInfo: InsightTaskInfo = {\r\n ...(this.taskInfo ? this.taskInfo : {}),\r\n durationMs: timeCost,\r\n rawResponse: JSON.stringify(parseResult),\r\n };\r\n\r\n let errorLog: string | undefined;\r\n if (parseResult.errors?.length) {\r\n errorLog = `AI response error: \\n${parseResult.errors.join('\\n')}`;\r\n }\r\n\r\n const dumpData: PartialInsightDumpFromSDK = {\r\n type: 'extract',\r\n userQuery: {\r\n dataDemand,\r\n },\r\n matchedElement: [],\r\n data: null,\r\n taskInfo,\r\n error: errorLog,\r\n };\r\n\r\n const { data, thought } = parseResult || {};\r\n\r\n // 4\r\n emitInsightDump(\r\n {\r\n ...dumpData,\r\n data,\r\n },\r\n dumpSubscriber,\r\n );\r\n\r\n if (errorLog && !data && !opt?.doNotThrowError) {\r\n throw new Error(errorLog);\r\n }\r\n\r\n return {\r\n data,\r\n thought,\r\n usage,\r\n };\r\n }\r\n\r\n async describe(\r\n target: Rect | [number, number],\r\n modelConfig: IModelConfig,\r\n opt?: {\r\n deepThink?: boolean;\r\n },\r\n ): Promise<Pick<AIDescribeElementResponse, 'description'>> {\r\n assert(target, 'target is required for insight.describe');\r\n const context = await this.contextRetrieverFn('describe');\r\n const { screenshotBase64, size } = context;\r\n assert(screenshotBase64, 'screenshot is required for insight.describe');\r\n // The result of the \"describe\" function will be used for positioning, so essentially it is a form of grounding.\r\n const { vlMode } = modelConfig;\r\n const systemPrompt = elementDescriberInstruction();\r\n\r\n // Convert [x,y] center point to Rect if needed\r\n const defaultRectSize = 30;\r\n const targetRect: Rect = Array.isArray(target)\r\n ? {\r\n left: Math.floor(target[0] - defaultRectSize / 2),\r\n top: Math.floor(target[1] - defaultRectSize / 2),\r\n width: defaultRectSize,\r\n height: defaultRectSize,\r\n }\r\n : target;\r\n\r\n let imagePayload = await compositeElementInfoImg({\r\n inputImgBase64: screenshotBase64,\r\n size,\r\n elementsPositionInfo: [\r\n {\r\n rect: targetRect,\r\n },\r\n ],\r\n borderThickness: 3,\r\n });\r\n\r\n if (opt?.deepThink) {\r\n const searchArea = expandSearchArea(targetRect, context.size, vlMode);\r\n debug('describe: set searchArea', searchArea);\r\n const croppedResult = await cropByRect(\r\n imagePayload,\r\n searchArea,\r\n vlMode === 'qwen-vl',\r\n );\r\n imagePayload = croppedResult.imageBase64;\r\n }\r\n\r\n const msgs: AIArgs = [\r\n { role: 'system', content: systemPrompt },\r\n {\r\n role: 'user',\r\n content: [\r\n {\r\n type: 'image_url',\r\n image_url: {\r\n url: imagePayload,\r\n detail: 'high',\r\n },\r\n },\r\n ],\r\n },\r\n ];\r\n\r\n const callAIFn = this\r\n .aiVendorFn as typeof callAIWithObjectResponse<AIDescribeElementResponse>;\r\n\r\n const res = await callAIFn(\r\n msgs,\r\n AIActionType.DESCRIBE_ELEMENT,\r\n modelConfig,\r\n );\r\n\r\n const { content } = res;\r\n assert(!content.error, `describe failed: ${content.error}`);\r\n assert(content.description, 'failed to describe the element');\r\n return content;\r\n }\r\n}\r\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","debug","getDebug","Insight","query","opt","modelConfig","_parseResult_errors","queryPrompt","assert","dumpSubscriber","undefined","globalDeepThinkSwitch","globalConfigManager","SQAI_FORCE_DEEP_THINK","searchAreaPrompt","vlMode","console","context","searchArea","searchAreaRawResponse","searchAreaUsage","searchAreaResponse","AiLocateSection","startTime","Date","parseResult","rect","elementById","rawResponse","usage","isOrderSensitive","AiLocateElement","timeCost","taskInfo","JSON","errorLog","dumpData","elements","item","element","emitInsightDump","Error","dataDemand","multimodalPrompt","AiExtractElementInfo","data","thought","target","screenshotBase64","size","systemPrompt","elementDescriberInstruction","defaultRectSize","targetRect","Array","Math","imagePayload","compositeElementInfoImg","expandSearchArea","croppedResult","cropByRect","msgs","callAIFn","res","AIActionType","content","callAIWithObjectResponse","Promise"],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
emitInsightDump: ()=>emitInsightDump
|
|
28
|
+
});
|
|
29
|
+
const utils_namespaceObject = require("@sqaitech/shared/utils");
|
|
30
|
+
function emitInsightDump(data, dumpSubscriber) {
|
|
31
|
+
const baseData = {
|
|
32
|
+
logTime: Date.now()
|
|
33
|
+
};
|
|
34
|
+
const finalData = {
|
|
35
|
+
logId: (0, utils_namespaceObject.uuid)(),
|
|
36
|
+
...baseData,
|
|
37
|
+
...data
|
|
38
|
+
};
|
|
39
|
+
null == dumpSubscriber || dumpSubscriber(finalData);
|
|
40
|
+
}
|
|
41
|
+
exports.emitInsightDump = __webpack_exports__.emitInsightDump;
|
|
42
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
43
|
+
"emitInsightDump"
|
|
44
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
45
|
+
Object.defineProperty(exports, '__esModule', {
|
|
46
|
+
value: true
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insight\\utils.js","sources":["webpack://@sqaitech/core/webpack/runtime/define_property_getters","webpack://@sqaitech/core/webpack/runtime/has_own_property","webpack://@sqaitech/core/webpack/runtime/make_namespace_object","webpack://@sqaitech/core/./src/insight/utils.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 {\r\n DumpMeta,\r\n DumpSubscriber,\r\n InsightDump,\r\n PartialInsightDumpFromSDK,\r\n} from '@/types';\r\nimport { uuid } from '@sqaitech/shared/utils';\r\n\r\nexport function emitInsightDump(\r\n data: PartialInsightDumpFromSDK,\r\n dumpSubscriber?: DumpSubscriber,\r\n) {\r\n const baseData: DumpMeta = {\r\n logTime: Date.now(),\r\n };\r\n const finalData: InsightDump = {\r\n logId: uuid(),\r\n ...baseData,\r\n ...data,\r\n };\r\n\r\n dumpSubscriber?.(finalData);\r\n}\r\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","emitInsightDump","data","dumpSubscriber","baseData","Date","finalData","uuid"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;ACEO,SAASI,gBACdC,IAA+B,EAC/BC,cAA+B;IAE/B,MAAMC,WAAqB;QACzB,SAASC,KAAK,GAAG;IACnB;IACA,MAAMC,YAAyB;QAC7B,OAAOC,AAAAA,IAAAA,sBAAAA,IAAAA,AAAAA;QACP,GAAGH,QAAQ;QACX,GAAGF,IAAI;IACT;IAEAC,QAAAA,kBAAAA,eAAiBG;AACnB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
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
|
+
ReportMergingTool: ()=>ReportMergingTool
|
|
28
|
+
});
|
|
29
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
30
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
31
|
+
const common_namespaceObject = require("@sqaitech/shared/common");
|
|
32
|
+
const index_js_namespaceObject = require("./agent/index.js");
|
|
33
|
+
const external_utils_js_namespaceObject = require("./utils.js");
|
|
34
|
+
function _define_property(obj, key, value) {
|
|
35
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
36
|
+
value: value,
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
writable: true
|
|
40
|
+
});
|
|
41
|
+
else obj[key] = value;
|
|
42
|
+
return obj;
|
|
43
|
+
}
|
|
44
|
+
class ReportMergingTool {
|
|
45
|
+
append(reportInfo) {
|
|
46
|
+
this.reportInfos.push(reportInfo);
|
|
47
|
+
}
|
|
48
|
+
clear() {
|
|
49
|
+
this.reportInfos = [];
|
|
50
|
+
}
|
|
51
|
+
extractScriptContent(filePath) {
|
|
52
|
+
const scriptRegex = /\n<script type="SQAI_web_dump" type="application\/json"[^>]*>([\s\S]*?)\n<\/script>/;
|
|
53
|
+
const fileContent = external_node_fs_namespaceObject.readFileSync(filePath, 'utf-8');
|
|
54
|
+
const match = scriptRegex.exec(fileContent);
|
|
55
|
+
return match ? match[1].trim() : '';
|
|
56
|
+
}
|
|
57
|
+
mergeReports(reportFileName = 'AUTO', opts) {
|
|
58
|
+
if (this.reportInfos.length <= 1) {
|
|
59
|
+
console.log('Not enough report to merge');
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
opts = Object.assign({
|
|
63
|
+
rmOriginalReports: false,
|
|
64
|
+
overwrite: false
|
|
65
|
+
}, opts || {});
|
|
66
|
+
const { rmOriginalReports, overwrite } = opts;
|
|
67
|
+
let outputFilePath;
|
|
68
|
+
const targetDir = `${(0, common_namespaceObject.getMidsceneRunSubDir)('report')}`;
|
|
69
|
+
if ('AUTO' === reportFileName) outputFilePath = external_node_path_namespaceObject.resolve(targetDir, `${(0, index_js_namespaceObject.getReportFileName)('merged-report')}.html`);
|
|
70
|
+
else {
|
|
71
|
+
outputFilePath = external_node_path_namespaceObject.resolve(targetDir, `${reportFileName}.html`);
|
|
72
|
+
if (external_node_fs_namespaceObject.existsSync(outputFilePath) && !overwrite) throw Error(`report file already existed: ${outputFilePath}\nset override to true to overwrite this file.`);
|
|
73
|
+
if (external_node_fs_namespaceObject.existsSync(outputFilePath) && overwrite) external_node_fs_namespaceObject.unlinkSync(outputFilePath);
|
|
74
|
+
}
|
|
75
|
+
console.log(`Start merging ${this.reportInfos.length} reports...\nCreating template file...`);
|
|
76
|
+
try {
|
|
77
|
+
external_node_fs_namespaceObject.appendFileSync(outputFilePath, (0, external_utils_js_namespaceObject.getReportTpl)());
|
|
78
|
+
for(let i = 0; i < this.reportInfos.length; i++){
|
|
79
|
+
const reportInfo = this.reportInfos[i];
|
|
80
|
+
console.log(`Processing report ${i + 1}/${this.reportInfos.length}`);
|
|
81
|
+
const dumpString = this.extractScriptContent(reportInfo.reportFilePath);
|
|
82
|
+
const reportAttributes = reportInfo.reportAttributes;
|
|
83
|
+
const reportHtmlStr = `${(0, external_utils_js_namespaceObject.reportHTMLContent)({
|
|
84
|
+
dumpString,
|
|
85
|
+
attributes: {
|
|
86
|
+
playwright_test_duration: reportAttributes.testDuration,
|
|
87
|
+
playwright_test_status: reportAttributes.testStatus,
|
|
88
|
+
playwright_test_title: reportAttributes.testTitle,
|
|
89
|
+
playwright_test_id: reportAttributes.testId,
|
|
90
|
+
playwright_test_description: reportAttributes.testDescription
|
|
91
|
+
}
|
|
92
|
+
}, void 0, void 0, false)}\n`;
|
|
93
|
+
external_node_fs_namespaceObject.appendFileSync(outputFilePath, reportHtmlStr);
|
|
94
|
+
}
|
|
95
|
+
console.log(`Successfully merged new report: ${outputFilePath}`);
|
|
96
|
+
if (rmOriginalReports) {
|
|
97
|
+
for (const info of this.reportInfos)try {
|
|
98
|
+
external_node_fs_namespaceObject.unlinkSync(info.reportFilePath);
|
|
99
|
+
} catch (error) {
|
|
100
|
+
console.error(`Error deleting report ${info.reportFilePath}:`, error);
|
|
101
|
+
}
|
|
102
|
+
console.log(`Removed ${this.reportInfos.length} original reports`);
|
|
103
|
+
}
|
|
104
|
+
return outputFilePath;
|
|
105
|
+
} catch (error) {
|
|
106
|
+
console.error('Error in mergeReports:', error);
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
constructor(){
|
|
111
|
+
_define_property(this, "reportInfos", []);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.ReportMergingTool = __webpack_exports__.ReportMergingTool;
|
|
115
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
116
|
+
"ReportMergingTool"
|
|
117
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
118
|
+
Object.defineProperty(exports, '__esModule', {
|
|
119
|
+
value: true
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sources":["webpack://@sqaitech/core/webpack/runtime/define_property_getters","webpack://@sqaitech/core/webpack/runtime/has_own_property","webpack://@sqaitech/core/webpack/runtime/make_namespace_object","webpack://@sqaitech/core/./src/report.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 * as fs from 'node:fs';\r\nimport * as path from 'node:path';\r\nimport { getMidsceneRunSubDir } from '@sqaitech/shared/common';\r\nimport { getReportFileName } from './agent';\r\nimport type { ReportFileWithAttributes } from './types';\r\nimport { getReportTpl, reportHTMLContent } from './utils';\r\n\r\nexport class ReportMergingTool {\r\n private reportInfos: ReportFileWithAttributes[] = [];\r\n public append(reportInfo: ReportFileWithAttributes) {\r\n this.reportInfos.push(reportInfo);\r\n }\r\n public clear() {\r\n this.reportInfos = [];\r\n }\r\n private extractScriptContent(filePath: string): string {\r\n // Regular expression to match content between script tags\r\n // Requires newline before <script and </script>\r\n const scriptRegex =\r\n /\\n<script type=\"SQAI_web_dump\" type=\"application\\/json\"[^>]*>([\\s\\S]*?)\\n<\\/script>/;\r\n\r\n const fileContent = fs.readFileSync(filePath, 'utf-8');\r\n const match = scriptRegex.exec(fileContent);\r\n\r\n return match ? match[1].trim() : '';\r\n }\r\n\r\n public mergeReports(\r\n reportFileName: 'AUTO' | string = 'AUTO', // user custom report filename, save into midscene report dir if undefined\r\n opts?: {\r\n rmOriginalReports?: boolean; // whether to remove origin report files\r\n overwrite?: boolean; // if outfilepath specified, throw an error when overwrite = true, otherwise overwrite the file\r\n },\r\n ): string | null {\r\n if (this.reportInfos.length <= 1) {\r\n console.log('Not enough report to merge');\r\n return null;\r\n }\r\n opts = Object.assign(\r\n {\r\n rmOriginalReports: false,\r\n overwrite: false,\r\n },\r\n opts || {},\r\n );\r\n const { rmOriginalReports, overwrite } = opts;\r\n let outputFilePath;\r\n const targetDir = `${getMidsceneRunSubDir('report')}`;\r\n if (reportFileName === 'AUTO') {\r\n outputFilePath = path.resolve(\r\n targetDir,\r\n `${getReportFileName('merged-report')}.html`,\r\n );\r\n } else {\r\n // user specified a outfilepath\r\n outputFilePath = path.resolve(targetDir, `${reportFileName}.html`);\r\n if (fs.existsSync(outputFilePath) && !overwrite) {\r\n throw Error(\r\n `report file already existed: ${outputFilePath}\\nset override to true to overwrite this file.`,\r\n );\r\n } else if (fs.existsSync(outputFilePath) && overwrite) {\r\n fs.unlinkSync(outputFilePath);\r\n }\r\n }\r\n\r\n console.log(\r\n `Start merging ${this.reportInfos.length} reports...\\nCreating template file...`,\r\n );\r\n\r\n try {\r\n // Write template\r\n fs.appendFileSync(outputFilePath, getReportTpl());\r\n\r\n // Process all reports one by one\r\n for (let i = 0; i < this.reportInfos.length; i++) {\r\n const reportInfo = this.reportInfos[i];\r\n console.log(`Processing report ${i + 1}/${this.reportInfos.length}`);\r\n\r\n const dumpString = this.extractScriptContent(reportInfo.reportFilePath);\r\n const reportAttributes = reportInfo.reportAttributes;\r\n\r\n const reportHtmlStr = `${reportHTMLContent(\r\n {\r\n dumpString,\r\n attributes: {\r\n playwright_test_duration: reportAttributes.testDuration,\r\n playwright_test_status: reportAttributes.testStatus,\r\n playwright_test_title: reportAttributes.testTitle,\r\n playwright_test_id: reportAttributes.testId,\r\n playwright_test_description: reportAttributes.testDescription,\r\n },\r\n },\r\n undefined,\r\n undefined,\r\n false,\r\n )}\\n`; // use existed function to achieve report script content\r\n\r\n fs.appendFileSync(outputFilePath, reportHtmlStr);\r\n }\r\n\r\n console.log(`Successfully merged new report: ${outputFilePath}`);\r\n\r\n // Remove original reports if needed\r\n if (rmOriginalReports) {\r\n for (const info of this.reportInfos) {\r\n try {\r\n fs.unlinkSync(info.reportFilePath);\r\n } catch (error) {\r\n console.error(\r\n `Error deleting report ${info.reportFilePath}:`,\r\n error,\r\n );\r\n }\r\n }\r\n console.log(`Removed ${this.reportInfos.length} original reports`);\r\n }\r\n return outputFilePath;\r\n } catch (error) {\r\n console.error('Error in mergeReports:', error);\r\n throw error;\r\n }\r\n }\r\n}\r\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","ReportMergingTool","reportInfo","filePath","scriptRegex","fileContent","fs","match","reportFileName","opts","console","rmOriginalReports","overwrite","outputFilePath","targetDir","getMidsceneRunSubDir","path","getReportFileName","Error","getReportTpl","i","dumpString","reportAttributes","reportHtmlStr","reportHTMLContent","undefined","info","error"],"mappings":"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"}
|