@rpascene/core 0.30.8

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.
Files changed (200) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/dist/es/agent/agent.mjs +636 -0
  4. package/dist/es/agent/agent.mjs.map +1 -0
  5. package/dist/es/agent/common.mjs +0 -0
  6. package/dist/es/agent/index.mjs +6 -0
  7. package/dist/es/agent/task-cache.mjs +184 -0
  8. package/dist/es/agent/task-cache.mjs.map +1 -0
  9. package/dist/es/agent/tasks.mjs +666 -0
  10. package/dist/es/agent/tasks.mjs.map +1 -0
  11. package/dist/es/agent/ui-utils.mjs +72 -0
  12. package/dist/es/agent/ui-utils.mjs.map +1 -0
  13. package/dist/es/agent/utils.mjs +162 -0
  14. package/dist/es/agent/utils.mjs.map +1 -0
  15. package/dist/es/ai-model/action-executor.mjs +129 -0
  16. package/dist/es/ai-model/action-executor.mjs.map +1 -0
  17. package/dist/es/ai-model/common.mjs +355 -0
  18. package/dist/es/ai-model/common.mjs.map +1 -0
  19. package/dist/es/ai-model/conversation-history.mjs +58 -0
  20. package/dist/es/ai-model/conversation-history.mjs.map +1 -0
  21. package/dist/es/ai-model/index.mjs +11 -0
  22. package/dist/es/ai-model/inspect.mjs +286 -0
  23. package/dist/es/ai-model/inspect.mjs.map +1 -0
  24. package/dist/es/ai-model/llm-planning.mjs +140 -0
  25. package/dist/es/ai-model/llm-planning.mjs.map +1 -0
  26. package/dist/es/ai-model/prompt/assertion.mjs +31 -0
  27. package/dist/es/ai-model/prompt/assertion.mjs.map +1 -0
  28. package/dist/es/ai-model/prompt/common.mjs +7 -0
  29. package/dist/es/ai-model/prompt/common.mjs.map +1 -0
  30. package/dist/es/ai-model/prompt/describe.mjs +44 -0
  31. package/dist/es/ai-model/prompt/describe.mjs.map +1 -0
  32. package/dist/es/ai-model/prompt/extraction.mjs +140 -0
  33. package/dist/es/ai-model/prompt/extraction.mjs.map +1 -0
  34. package/dist/es/ai-model/prompt/llm-locator.mjs +275 -0
  35. package/dist/es/ai-model/prompt/llm-locator.mjs.map +1 -0
  36. package/dist/es/ai-model/prompt/llm-planning.mjs +367 -0
  37. package/dist/es/ai-model/prompt/llm-planning.mjs.map +1 -0
  38. package/dist/es/ai-model/prompt/llm-section-locator.mjs +47 -0
  39. package/dist/es/ai-model/prompt/llm-section-locator.mjs.map +1 -0
  40. package/dist/es/ai-model/prompt/playwright-generator.mjs +117 -0
  41. package/dist/es/ai-model/prompt/playwright-generator.mjs.map +1 -0
  42. package/dist/es/ai-model/prompt/ui-tars-locator.mjs +34 -0
  43. package/dist/es/ai-model/prompt/ui-tars-locator.mjs.map +1 -0
  44. package/dist/es/ai-model/prompt/ui-tars-planning.mjs +36 -0
  45. package/dist/es/ai-model/prompt/ui-tars-planning.mjs.map +1 -0
  46. package/dist/es/ai-model/prompt/util.mjs +124 -0
  47. package/dist/es/ai-model/prompt/util.mjs.map +1 -0
  48. package/dist/es/ai-model/prompt/yaml-generator.mjs +219 -0
  49. package/dist/es/ai-model/prompt/yaml-generator.mjs.map +1 -0
  50. package/dist/es/ai-model/service-caller/index.mjs +537 -0
  51. package/dist/es/ai-model/service-caller/index.mjs.map +1 -0
  52. package/dist/es/ai-model/ui-tars-planning.mjs +201 -0
  53. package/dist/es/ai-model/ui-tars-planning.mjs.map +1 -0
  54. package/dist/es/device/index.mjs +152 -0
  55. package/dist/es/device/index.mjs.map +1 -0
  56. package/dist/es/image/index.mjs +2 -0
  57. package/dist/es/index.mjs +11 -0
  58. package/dist/es/index.mjs.map +1 -0
  59. package/dist/es/insight/index.mjs +233 -0
  60. package/dist/es/insight/index.mjs.map +1 -0
  61. package/dist/es/insight/utils.mjs +15 -0
  62. package/dist/es/insight/utils.mjs.map +1 -0
  63. package/dist/es/report.mjs +88 -0
  64. package/dist/es/report.mjs.map +1 -0
  65. package/dist/es/tree.mjs +2 -0
  66. package/dist/es/types.mjs +11 -0
  67. package/dist/es/types.mjs.map +1 -0
  68. package/dist/es/utils.mjs +204 -0
  69. package/dist/es/utils.mjs.map +1 -0
  70. package/dist/es/yaml/builder.mjs +13 -0
  71. package/dist/es/yaml/builder.mjs.map +1 -0
  72. package/dist/es/yaml/index.mjs +3 -0
  73. package/dist/es/yaml/player.mjs +372 -0
  74. package/dist/es/yaml/player.mjs.map +1 -0
  75. package/dist/es/yaml/utils.mjs +73 -0
  76. package/dist/es/yaml/utils.mjs.map +1 -0
  77. package/dist/es/yaml.mjs +0 -0
  78. package/dist/lib/agent/agent.js +683 -0
  79. package/dist/lib/agent/agent.js.map +1 -0
  80. package/dist/lib/agent/common.js +5 -0
  81. package/dist/lib/agent/index.js +81 -0
  82. package/dist/lib/agent/index.js.map +1 -0
  83. package/dist/lib/agent/task-cache.js +236 -0
  84. package/dist/lib/agent/task-cache.js.map +1 -0
  85. package/dist/lib/agent/tasks.js +703 -0
  86. package/dist/lib/agent/tasks.js.map +1 -0
  87. package/dist/lib/agent/ui-utils.js +121 -0
  88. package/dist/lib/agent/ui-utils.js.map +1 -0
  89. package/dist/lib/agent/utils.js +233 -0
  90. package/dist/lib/agent/utils.js.map +1 -0
  91. package/dist/lib/ai-model/action-executor.js +163 -0
  92. package/dist/lib/ai-model/action-executor.js.map +1 -0
  93. package/dist/lib/ai-model/common.js +461 -0
  94. package/dist/lib/ai-model/common.js.map +1 -0
  95. package/dist/lib/ai-model/conversation-history.js +92 -0
  96. package/dist/lib/ai-model/conversation-history.js.map +1 -0
  97. package/dist/lib/ai-model/index.js +131 -0
  98. package/dist/lib/ai-model/index.js.map +1 -0
  99. package/dist/lib/ai-model/inspect.js +326 -0
  100. package/dist/lib/ai-model/inspect.js.map +1 -0
  101. package/dist/lib/ai-model/llm-planning.js +174 -0
  102. package/dist/lib/ai-model/llm-planning.js.map +1 -0
  103. package/dist/lib/ai-model/prompt/assertion.js +65 -0
  104. package/dist/lib/ai-model/prompt/assertion.js.map +1 -0
  105. package/dist/lib/ai-model/prompt/common.js +41 -0
  106. package/dist/lib/ai-model/prompt/common.js.map +1 -0
  107. package/dist/lib/ai-model/prompt/describe.js +78 -0
  108. package/dist/lib/ai-model/prompt/describe.js.map +1 -0
  109. package/dist/lib/ai-model/prompt/extraction.js +180 -0
  110. package/dist/lib/ai-model/prompt/extraction.js.map +1 -0
  111. package/dist/lib/ai-model/prompt/llm-locator.js +315 -0
  112. package/dist/lib/ai-model/prompt/llm-locator.js.map +1 -0
  113. package/dist/lib/ai-model/prompt/llm-planning.js +407 -0
  114. package/dist/lib/ai-model/prompt/llm-planning.js.map +1 -0
  115. package/dist/lib/ai-model/prompt/llm-section-locator.js +84 -0
  116. package/dist/lib/ai-model/prompt/llm-section-locator.js.map +1 -0
  117. package/dist/lib/ai-model/prompt/playwright-generator.js +178 -0
  118. package/dist/lib/ai-model/prompt/playwright-generator.js.map +1 -0
  119. package/dist/lib/ai-model/prompt/ui-tars-locator.js +68 -0
  120. package/dist/lib/ai-model/prompt/ui-tars-locator.js.map +1 -0
  121. package/dist/lib/ai-model/prompt/ui-tars-planning.js +73 -0
  122. package/dist/lib/ai-model/prompt/ui-tars-planning.js.map +1 -0
  123. package/dist/lib/ai-model/prompt/util.js +176 -0
  124. package/dist/lib/ai-model/prompt/util.js.map +1 -0
  125. package/dist/lib/ai-model/prompt/yaml-generator.js +280 -0
  126. package/dist/lib/ai-model/prompt/yaml-generator.js.map +1 -0
  127. package/dist/lib/ai-model/service-caller/index.js +623 -0
  128. package/dist/lib/ai-model/service-caller/index.js.map +1 -0
  129. package/dist/lib/ai-model/ui-tars-planning.js +238 -0
  130. package/dist/lib/ai-model/ui-tars-planning.js.map +1 -0
  131. package/dist/lib/device/index.js +255 -0
  132. package/dist/lib/device/index.js.map +1 -0
  133. package/dist/lib/image/index.js +56 -0
  134. package/dist/lib/image/index.js.map +1 -0
  135. package/dist/lib/index.js +103 -0
  136. package/dist/lib/index.js.map +1 -0
  137. package/dist/lib/insight/index.js +267 -0
  138. package/dist/lib/insight/index.js.map +1 -0
  139. package/dist/lib/insight/utils.js +49 -0
  140. package/dist/lib/insight/utils.js.map +1 -0
  141. package/dist/lib/report.js +122 -0
  142. package/dist/lib/report.js.map +1 -0
  143. package/dist/lib/tree.js +44 -0
  144. package/dist/lib/tree.js.map +1 -0
  145. package/dist/lib/types.js +82 -0
  146. package/dist/lib/types.js.map +1 -0
  147. package/dist/lib/utils.js +283 -0
  148. package/dist/lib/utils.js.map +1 -0
  149. package/dist/lib/yaml/builder.js +57 -0
  150. package/dist/lib/yaml/builder.js.map +1 -0
  151. package/dist/lib/yaml/index.js +80 -0
  152. package/dist/lib/yaml/index.js.map +1 -0
  153. package/dist/lib/yaml/player.js +406 -0
  154. package/dist/lib/yaml/player.js.map +1 -0
  155. package/dist/lib/yaml/utils.js +126 -0
  156. package/dist/lib/yaml/utils.js.map +1 -0
  157. package/dist/lib/yaml.js +20 -0
  158. package/dist/lib/yaml.js.map +1 -0
  159. package/dist/types/agent/agent.d.ts +156 -0
  160. package/dist/types/agent/common.d.ts +0 -0
  161. package/dist/types/agent/index.d.ts +9 -0
  162. package/dist/types/agent/task-cache.d.ts +48 -0
  163. package/dist/types/agent/tasks.d.ts +48 -0
  164. package/dist/types/agent/ui-utils.d.ts +7 -0
  165. package/dist/types/agent/utils.d.ts +52 -0
  166. package/dist/types/ai-model/action-executor.d.ts +19 -0
  167. package/dist/types/ai-model/common.d.ts +569 -0
  168. package/dist/types/ai-model/conversation-history.d.ts +18 -0
  169. package/dist/types/ai-model/index.d.ts +13 -0
  170. package/dist/types/ai-model/inspect.d.ts +46 -0
  171. package/dist/types/ai-model/llm-planning.d.ts +11 -0
  172. package/dist/types/ai-model/prompt/assertion.d.ts +2 -0
  173. package/dist/types/ai-model/prompt/common.d.ts +2 -0
  174. package/dist/types/ai-model/prompt/describe.d.ts +1 -0
  175. package/dist/types/ai-model/prompt/extraction.d.ts +4 -0
  176. package/dist/types/ai-model/prompt/llm-locator.d.ts +9 -0
  177. package/dist/types/ai-model/prompt/llm-planning.d.ts +9 -0
  178. package/dist/types/ai-model/prompt/llm-section-locator.d.ts +6 -0
  179. package/dist/types/ai-model/prompt/playwright-generator.d.ts +26 -0
  180. package/dist/types/ai-model/prompt/ui-tars-locator.d.ts +1 -0
  181. package/dist/types/ai-model/prompt/ui-tars-planning.d.ts +2 -0
  182. package/dist/types/ai-model/prompt/util.d.ts +47 -0
  183. package/dist/types/ai-model/prompt/yaml-generator.d.ts +100 -0
  184. package/dist/types/ai-model/service-caller/index.d.ts +48 -0
  185. package/dist/types/ai-model/ui-tars-planning.d.ts +59 -0
  186. package/dist/types/device/index.d.ts +2158 -0
  187. package/dist/types/image/index.d.ts +1 -0
  188. package/dist/types/index.d.ts +12 -0
  189. package/dist/types/insight/index.d.ts +31 -0
  190. package/dist/types/insight/utils.d.ts +2 -0
  191. package/dist/types/report.d.ts +12 -0
  192. package/dist/types/tree.d.ts +1 -0
  193. package/dist/types/types.d.ts +414 -0
  194. package/dist/types/utils.d.ts +40 -0
  195. package/dist/types/yaml/builder.d.ts +2 -0
  196. package/dist/types/yaml/index.d.ts +3 -0
  197. package/dist/types/yaml/player.d.ts +34 -0
  198. package/dist/types/yaml/utils.d.ts +9 -0
  199. package/dist/types/yaml.d.ts +178 -0
  200. package/package.json +108 -0
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ Executor: ()=>Executor
28
+ });
29
+ const utils_namespaceObject = require("@rpascene/shared/utils");
30
+ function _define_property(obj, key, value) {
31
+ if (key in obj) Object.defineProperty(obj, key, {
32
+ value: value,
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true
36
+ });
37
+ else obj[key] = value;
38
+ return obj;
39
+ }
40
+ class Executor {
41
+ markTaskAsPending(task) {
42
+ return {
43
+ status: 'pending',
44
+ ...task
45
+ };
46
+ }
47
+ async append(task) {
48
+ var _this_latestErrorTask, _this_latestErrorTask1;
49
+ (0, utils_namespaceObject.assert)('error' !== this.status, `executor is in error state, cannot append task\nerror=${null == (_this_latestErrorTask = this.latestErrorTask()) ? void 0 : _this_latestErrorTask.error}\n${null == (_this_latestErrorTask1 = this.latestErrorTask()) ? void 0 : _this_latestErrorTask1.errorStack}`);
50
+ if (Array.isArray(task)) this.tasks.push(...task.map((item)=>this.markTaskAsPending(item)));
51
+ else this.tasks.push(this.markTaskAsPending(task));
52
+ if ('running' !== this.status) this.status = 'pending';
53
+ }
54
+ async flush() {
55
+ if ('init' === this.status && this.tasks.length > 0) console.warn('illegal state for executor, status is init but tasks are not empty');
56
+ (0, utils_namespaceObject.assert)('running' !== this.status, 'executor is already running');
57
+ (0, utils_namespaceObject.assert)('completed' !== this.status, 'executor is already completed');
58
+ (0, utils_namespaceObject.assert)('error' !== this.status, 'executor is in error state');
59
+ const nextPendingIndex = this.tasks.findIndex((task)=>'pending' === task.status);
60
+ if (nextPendingIndex < 0) return;
61
+ this.status = 'running';
62
+ let taskIndex = nextPendingIndex;
63
+ let successfullyCompleted = true;
64
+ let previousFindOutput;
65
+ while(taskIndex < this.tasks.length){
66
+ const task = this.tasks[taskIndex];
67
+ (0, utils_namespaceObject.assert)('pending' === task.status, `task status should be pending, but got: ${task.status}`);
68
+ task.timing = {
69
+ start: Date.now()
70
+ };
71
+ try {
72
+ task.status = 'running';
73
+ try {
74
+ if (this.onTaskStart) await this.onTaskStart(task);
75
+ } catch (e) {
76
+ console.error('error in onTaskStart', e);
77
+ }
78
+ (0, utils_namespaceObject.assert)([
79
+ 'Insight',
80
+ 'Action',
81
+ 'Planning'
82
+ ].indexOf(task.type) >= 0, `unsupported task type: ${task.type}`);
83
+ const { executor, param } = task;
84
+ (0, utils_namespaceObject.assert)(executor, `executor is required for task type: ${task.type}`);
85
+ let returnValue;
86
+ const executorContext = {
87
+ task,
88
+ element: null == previousFindOutput ? void 0 : previousFindOutput.element
89
+ };
90
+ if ('Insight' === task.type) {
91
+ (0, utils_namespaceObject.assert)('Locate' === task.subType || 'Query' === task.subType || 'Assert' === task.subType || 'WaitFor' === task.subType || 'Boolean' === task.subType || 'Number' === task.subType || 'String' === task.subType, `unsupported insight subType: ${task.subType}`);
92
+ returnValue = await task.executor(param, executorContext);
93
+ if ('Locate' === task.subType) previousFindOutput = null == returnValue ? void 0 : returnValue.output;
94
+ } else if ('Action' === task.type || 'Planning' === task.type) returnValue = await task.executor(param, executorContext);
95
+ else {
96
+ console.warn(`unsupported task type: ${task.type}, will try to execute it directly`);
97
+ returnValue = await task.executor(param, executorContext);
98
+ }
99
+ Object.assign(task, returnValue);
100
+ task.status = 'finished';
101
+ task.timing.end = Date.now();
102
+ task.timing.cost = task.timing.end - task.timing.start;
103
+ taskIndex++;
104
+ } catch (e) {
105
+ successfullyCompleted = false;
106
+ task.error = e;
107
+ task.errorMessage = (null == e ? void 0 : e.message) || ('string' == typeof e ? e : 'error-without-message');
108
+ task.errorStack = e.stack;
109
+ task.status = 'failed';
110
+ task.timing.end = Date.now();
111
+ task.timing.cost = task.timing.end - task.timing.start;
112
+ break;
113
+ }
114
+ }
115
+ for(let i = taskIndex + 1; i < this.tasks.length; i++)this.tasks[i].status = 'cancelled';
116
+ if (successfullyCompleted) this.status = 'completed';
117
+ else this.status = 'error';
118
+ if (this.tasks.length) {
119
+ const outputIndex = Math.min(taskIndex, this.tasks.length - 1);
120
+ const { thought, output } = this.tasks[outputIndex];
121
+ return {
122
+ thought,
123
+ output
124
+ };
125
+ }
126
+ }
127
+ isInErrorState() {
128
+ return 'error' === this.status;
129
+ }
130
+ latestErrorTask() {
131
+ if ('error' !== this.status) return null;
132
+ const errorTaskIndex = this.tasks.findIndex((task)=>'failed' === task.status);
133
+ if (errorTaskIndex >= 0) return this.tasks[errorTaskIndex];
134
+ return null;
135
+ }
136
+ dump() {
137
+ const dumpData = {
138
+ logTime: Date.now(),
139
+ name: this.name,
140
+ tasks: this.tasks
141
+ };
142
+ return dumpData;
143
+ }
144
+ constructor(name, options){
145
+ _define_property(this, "name", void 0);
146
+ _define_property(this, "tasks", void 0);
147
+ _define_property(this, "status", void 0);
148
+ _define_property(this, "onTaskStart", void 0);
149
+ this.status = (null == options ? void 0 : options.tasks) && options.tasks.length > 0 ? 'pending' : 'init';
150
+ this.name = name;
151
+ this.tasks = ((null == options ? void 0 : options.tasks) || []).map((item)=>this.markTaskAsPending(item));
152
+ this.onTaskStart = null == options ? void 0 : options.onTaskStart;
153
+ }
154
+ }
155
+ exports.Executor = __webpack_exports__.Executor;
156
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
157
+ "Executor"
158
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
159
+ Object.defineProperty(exports, '__esModule', {
160
+ value: true
161
+ });
162
+
163
+ //# sourceMappingURL=action-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-model\\action-executor.js","sources":["webpack://@rpascene/core/webpack/runtime/define_property_getters","webpack://@rpascene/core/webpack/runtime/has_own_property","webpack://@rpascene/core/webpack/runtime/make_namespace_object","webpack://@rpascene/core/./src/ai-model/action-executor.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import type {\n ExecutionDump,\n ExecutionTask,\n ExecutionTaskApply,\n ExecutionTaskInsightLocateOutput,\n ExecutionTaskProgressOptions,\n ExecutionTaskReturn,\n ExecutorContext,\n} from '@/types';\nimport { assert } from '@rpascene/shared/utils';\n\nexport class Executor {\n name: string;\n\n tasks: ExecutionTask[];\n\n // status of executor\n status: 'init' | 'pending' | 'running' | 'completed' | 'error';\n\n onTaskStart?: ExecutionTaskProgressOptions['onTaskStart'];\n\n constructor(\n name: string,\n options?: ExecutionTaskProgressOptions & {\n tasks?: ExecutionTaskApply[];\n },\n ) {\n this.status =\n options?.tasks && options.tasks.length > 0 ? 'pending' : 'init';\n this.name = name;\n this.tasks = (options?.tasks || []).map((item) =>\n this.markTaskAsPending(item),\n );\n this.onTaskStart = options?.onTaskStart;\n }\n\n private markTaskAsPending(task: ExecutionTaskApply): ExecutionTask {\n return {\n status: 'pending',\n ...task,\n };\n }\n\n async append(task: ExecutionTaskApply[] | ExecutionTaskApply): Promise<void> {\n assert(\n this.status !== 'error',\n `executor is in error state, cannot append task\\nerror=${this.latestErrorTask()?.error}\\n${this.latestErrorTask()?.errorStack}`,\n );\n if (Array.isArray(task)) {\n this.tasks.push(...task.map((item) => this.markTaskAsPending(item)));\n } else {\n this.tasks.push(this.markTaskAsPending(task));\n }\n if (this.status !== 'running') {\n this.status = 'pending';\n }\n }\n // 执行任务\n async flush(): Promise<{ output: any; thought?: string } | undefined> {\n if (this.status === 'init' && this.tasks.length > 0) {\n console.warn(\n 'illegal state for executor, status is init but tasks are not empty',\n );\n }\n\n assert(this.status !== 'running', 'executor is already running');\n assert(this.status !== 'completed', 'executor is already completed');\n assert(this.status !== 'error', 'executor is in error state');\n\n const nextPendingIndex = this.tasks.findIndex(\n (task) => task.status === 'pending',\n );\n if (nextPendingIndex < 0) {\n // all tasks are completed\n return;\n }\n\n this.status = 'running';\n let taskIndex = nextPendingIndex;\n let successfullyCompleted = true;\n\n let previousFindOutput: ExecutionTaskInsightLocateOutput | undefined;\n\n while (taskIndex < this.tasks.length) {\n const task = this.tasks[taskIndex];\n assert(\n task.status === 'pending',\n `task status should be pending, but got: ${task.status}`,\n );\n task.timing = {\n start: Date.now(),\n };\n try {\n task.status = 'running';\n try {\n if (this.onTaskStart) {\n await this.onTaskStart(task);\n }\n } catch (e) {\n console.error('error in onTaskStart', e);\n }\n assert(\n ['Insight', 'Action', 'Planning'].indexOf(task.type) >= 0,\n `unsupported task type: ${task.type}`,\n );\n\n const { executor, param } = task;\n assert(executor, `executor is required for task type: ${task.type}`);\n\n let returnValue;\n const executorContext: ExecutorContext = {\n task,\n element: previousFindOutput?.element,\n };\n\n if (task.type === 'Insight') {\n assert(\n task.subType === 'Locate' ||\n task.subType === 'Query' ||\n task.subType === 'Assert' ||\n task.subType === 'WaitFor' ||\n task.subType === 'Boolean' ||\n task.subType === 'Number' ||\n task.subType === 'String',\n `unsupported insight subType: ${task.subType}`,\n );\n returnValue = await task.executor(param, executorContext);\n if (task.subType === 'Locate') {\n previousFindOutput = (\n returnValue as ExecutionTaskReturn<ExecutionTaskInsightLocateOutput>\n )?.output;\n }\n } else if (task.type === 'Action' || task.type === 'Planning') {\n returnValue = await task.executor(param, executorContext);\n } else {\n console.warn(\n `unsupported task type: ${task.type}, will try to execute it directly`,\n );\n returnValue = await task.executor(param, executorContext);\n }\n\n Object.assign(task, returnValue);\n task.status = 'finished';\n task.timing.end = Date.now();\n task.timing.cost = task.timing.end - task.timing.start;\n taskIndex++;\n } catch (e: any) {\n successfullyCompleted = false;\n task.error = e;\n task.errorMessage =\n e?.message || (typeof e === 'string' ? e : 'error-without-message');\n task.errorStack = e.stack;\n\n task.status = 'failed';\n task.timing.end = Date.now();\n task.timing.cost = task.timing.end - task.timing.start;\n break;\n }\n }\n\n // set all remaining tasks as cancelled\n for (let i = taskIndex + 1; i < this.tasks.length; i++) {\n this.tasks[i].status = 'cancelled';\n }\n\n if (successfullyCompleted) {\n this.status = 'completed';\n } else {\n this.status = 'error';\n }\n\n if (this.tasks.length) {\n // return the last output\n const outputIndex = Math.min(taskIndex, this.tasks.length - 1);\n const { thought, output } = this.tasks[outputIndex];\n return {\n thought,\n output,\n };\n }\n }\n\n isInErrorState(): boolean {\n return this.status === 'error';\n }\n\n latestErrorTask(): ExecutionTask | null {\n if (this.status !== 'error') {\n return null;\n }\n const errorTaskIndex = this.tasks.findIndex(\n (task) => task.status === 'failed',\n );\n if (errorTaskIndex >= 0) {\n return this.tasks[errorTaskIndex];\n }\n return null;\n }\n\n dump(): ExecutionDump {\n const dumpData: ExecutionDump = {\n logTime: Date.now(),\n name: this.name,\n tasks: this.tasks,\n };\n return dumpData;\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","Executor","task","_this_latestErrorTask","_this_latestErrorTask1","assert","Array","item","console","nextPendingIndex","taskIndex","successfullyCompleted","previousFindOutput","Date","e","executor","param","returnValue","executorContext","i","outputIndex","Math","thought","output","errorTaskIndex","dumpData","name","options"],"mappings":"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"}
@@ -0,0 +1,461 @@
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
+ SizeSchema: ()=>SizeSchema,
28
+ TMultimodalPromptSchema: ()=>TMultimodalPromptSchema,
29
+ expandSearchArea: ()=>expandSearchArea,
30
+ AIActionType: ()=>common_AIActionType,
31
+ adaptBbox: ()=>adaptBbox,
32
+ TUserPromptSchema: ()=>TUserPromptSchema,
33
+ loadActionParam: ()=>loadActionParam,
34
+ fillBboxParam: ()=>fillBboxParam,
35
+ adaptGeminiBbox: ()=>adaptGeminiBbox,
36
+ getRpasceneLocationSchema: ()=>getRpasceneLocationSchema,
37
+ ifRpasceneLocatorField: ()=>ifRpasceneLocatorField,
38
+ mergeRects: ()=>mergeRects,
39
+ RectSchema: ()=>RectSchema,
40
+ PointSchema: ()=>PointSchema,
41
+ adaptBboxToRect: ()=>adaptBboxToRect,
42
+ markupImageForLLM: ()=>markupImageForLLM,
43
+ normalized01000: ()=>normalized01000,
44
+ adaptDoubaoBbox: ()=>adaptDoubaoBbox,
45
+ parseActionParam: ()=>parseActionParam,
46
+ adaptQwenBbox: ()=>adaptQwenBbox,
47
+ buildYamlFlowFromPlans: ()=>buildYamlFlowFromPlans,
48
+ dumpRpasceneLocatorField: ()=>dumpRpasceneLocatorField,
49
+ findAllRpasceneLocatorField: ()=>findAllRpasceneLocatorField,
50
+ dumpActionParam: ()=>dumpActionParam,
51
+ warnGPT4oSizeLimit: ()=>warnGPT4oSizeLimit
52
+ });
53
+ const utils_namespaceObject = require("@rpascene/shared/utils");
54
+ const constants_namespaceObject = require("@rpascene/shared/constants");
55
+ const extractor_namespaceObject = require("@rpascene/shared/extractor");
56
+ const img_namespaceObject = require("@rpascene/shared/img");
57
+ const logger_namespaceObject = require("@rpascene/shared/logger");
58
+ const external_zod_namespaceObject = require("zod");
59
+ var common_AIActionType = /*#__PURE__*/ function(AIActionType) {
60
+ AIActionType[AIActionType["ASSERT"] = 0] = "ASSERT";
61
+ AIActionType[AIActionType["INSPECT_ELEMENT"] = 1] = "INSPECT_ELEMENT";
62
+ AIActionType[AIActionType["EXTRACT_DATA"] = 2] = "EXTRACT_DATA";
63
+ AIActionType[AIActionType["PLAN"] = 3] = "PLAN";
64
+ AIActionType[AIActionType["DESCRIBE_ELEMENT"] = 4] = "DESCRIBE_ELEMENT";
65
+ AIActionType[AIActionType["TEXT"] = 5] = "TEXT";
66
+ return AIActionType;
67
+ }({});
68
+ const defaultBboxSize = 20;
69
+ const debugInspectUtils = (0, logger_namespaceObject.getDebug)('ai:common');
70
+ function fillBboxParam(locate, width, height, rightLimit, bottomLimit, vlMode) {
71
+ if (locate.bbox_2d && !(null == locate ? void 0 : locate.bbox)) {
72
+ locate.bbox = locate.bbox_2d;
73
+ delete locate.bbox_2d;
74
+ }
75
+ if (null == locate ? void 0 : locate.bbox) locate.bbox = adaptBbox(locate.bbox, width, height, rightLimit, bottomLimit, vlMode);
76
+ return locate;
77
+ }
78
+ function adaptQwenBbox(bbox) {
79
+ if (bbox.length < 2) {
80
+ const msg = `invalid bbox data for qwen-vl mode: ${JSON.stringify(bbox)} `;
81
+ throw new Error(msg);
82
+ }
83
+ const result = [
84
+ Math.round(bbox[0]),
85
+ Math.round(bbox[1]),
86
+ 'number' == typeof bbox[2] ? Math.round(bbox[2]) : Math.round(bbox[0] + defaultBboxSize),
87
+ 'number' == typeof bbox[3] ? Math.round(bbox[3]) : Math.round(bbox[1] + defaultBboxSize)
88
+ ];
89
+ return result;
90
+ }
91
+ function adaptDoubaoBbox(bbox, width, height) {
92
+ (0, utils_namespaceObject.assert)(width > 0 && height > 0, 'width and height must be greater than 0 in doubao mode');
93
+ if ('string' == typeof bbox) {
94
+ (0, utils_namespaceObject.assert)(/^(\d+)\s(\d+)\s(\d+)\s(\d+)$/.test(bbox.trim()), `invalid bbox data string for doubao-vision mode: ${bbox}`);
95
+ const splitted = bbox.split(' ');
96
+ if (4 === splitted.length) return [
97
+ Math.round(Number(splitted[0]) * width / 1000),
98
+ Math.round(Number(splitted[1]) * height / 1000),
99
+ Math.round(Number(splitted[2]) * width / 1000),
100
+ Math.round(Number(splitted[3]) * height / 1000)
101
+ ];
102
+ throw new Error(`invalid bbox data string for doubao-vision mode: ${bbox}`);
103
+ }
104
+ if (Array.isArray(bbox) && Array.isArray(bbox[0])) bbox = bbox[0];
105
+ let bboxList = [];
106
+ if (Array.isArray(bbox) && 'string' == typeof bbox[0]) bbox.forEach((item)=>{
107
+ if ('string' == typeof item && item.includes(',')) {
108
+ const [x, y] = item.split(',');
109
+ bboxList.push(Number(x.trim()), Number(y.trim()));
110
+ } else if ('string' == typeof item && item.includes(' ')) {
111
+ const [x, y] = item.split(' ');
112
+ bboxList.push(Number(x.trim()), Number(y.trim()));
113
+ } else bboxList.push(Number(item));
114
+ });
115
+ else bboxList = bbox;
116
+ if (4 === bboxList.length || 5 === bboxList.length) return [
117
+ Math.round(bboxList[0] * width / 1000),
118
+ Math.round(bboxList[1] * height / 1000),
119
+ Math.round(bboxList[2] * width / 1000),
120
+ Math.round(bboxList[3] * height / 1000)
121
+ ];
122
+ if (6 === bboxList.length || 2 === bboxList.length || 3 === bboxList.length || 7 === bboxList.length) return [
123
+ Math.max(0, Math.round(bboxList[0] * width / 1000) - defaultBboxSize / 2),
124
+ Math.max(0, Math.round(bboxList[1] * height / 1000) - defaultBboxSize / 2),
125
+ Math.min(width, Math.round(bboxList[0] * width / 1000) + defaultBboxSize / 2),
126
+ Math.min(height, Math.round(bboxList[1] * height / 1000) + defaultBboxSize / 2)
127
+ ];
128
+ if (8 === bbox.length) return [
129
+ Math.round(bboxList[0] * width / 1000),
130
+ Math.round(bboxList[1] * height / 1000),
131
+ Math.round(bboxList[4] * width / 1000),
132
+ Math.round(bboxList[5] * height / 1000)
133
+ ];
134
+ const msg = `invalid bbox data for doubao-vision mode: ${JSON.stringify(bbox)} `;
135
+ throw new Error(msg);
136
+ }
137
+ function adaptBbox(bbox, width, height, rightLimit, bottomLimit, vlMode) {
138
+ let result = [
139
+ 0,
140
+ 0,
141
+ 0,
142
+ 0
143
+ ];
144
+ result = 'doubao-vision' === vlMode || 'vlm-ui-tars' === vlMode ? adaptDoubaoBbox(bbox, width, height) : 'gemini' === vlMode ? adaptGeminiBbox(bbox, width, height) : 'qwen3-vl' === vlMode ? normalized01000(bbox, width, height) : adaptQwenBbox(bbox);
145
+ result[2] = Math.min(result[2], rightLimit);
146
+ result[3] = Math.min(result[3], bottomLimit);
147
+ return result;
148
+ }
149
+ function normalized01000(bbox, width, height) {
150
+ return [
151
+ Math.round(bbox[0] * width / 1000),
152
+ Math.round(bbox[1] * height / 1000),
153
+ Math.round(bbox[2] * width / 1000),
154
+ Math.round(bbox[3] * height / 1000)
155
+ ];
156
+ }
157
+ function adaptGeminiBbox(bbox, width, height) {
158
+ const left = Math.round(bbox[1] * width / 1000);
159
+ const top = Math.round(bbox[0] * height / 1000);
160
+ const right = Math.round(bbox[3] * width / 1000);
161
+ const bottom = Math.round(bbox[2] * height / 1000);
162
+ return [
163
+ left,
164
+ top,
165
+ right,
166
+ bottom
167
+ ];
168
+ }
169
+ function adaptBboxToRect(bbox, width, height, offsetX = 0, offsetY = 0, rightLimit = width, bottomLimit = height, vlMode) {
170
+ debugInspectUtils('adaptBboxToRect', bbox, width, height, 'offset', offsetX, offsetY, 'limit', rightLimit, bottomLimit, 'vlMode', vlMode);
171
+ const [left, top, right, bottom] = adaptBbox(bbox, width, height, rightLimit, bottomLimit, vlMode);
172
+ const rectLeft = left;
173
+ const rectTop = top;
174
+ let rectWidth = right - left;
175
+ let rectHeight = bottom - top;
176
+ if (rectLeft + rectWidth > width) rectWidth = width - rectLeft;
177
+ if (rectTop + rectHeight > height) rectHeight = height - rectTop;
178
+ rectWidth = Math.max(1, rectWidth);
179
+ rectHeight = Math.max(1, rectHeight);
180
+ const rect = {
181
+ left: rectLeft + offsetX,
182
+ top: rectTop + offsetY,
183
+ width: rectWidth,
184
+ height: rectHeight
185
+ };
186
+ debugInspectUtils('adaptBboxToRect, result=', rect);
187
+ return rect;
188
+ }
189
+ let warned = false;
190
+ function warnGPT4oSizeLimit(size, modelName) {
191
+ if (warned) return;
192
+ if (modelName.toLowerCase().includes('gpt-4o')) {
193
+ const warningMsg = `GPT-4o has a maximum image input size of 2000x768 or 768x2000, but got ${size.width}x${size.height}. Please set your interface to a smaller resolution. Otherwise, the result may be inaccurate.`;
194
+ if (Math.max(size.width, size.height) > 2000 || Math.min(size.width, size.height) > 768) {
195
+ console.warn(warningMsg);
196
+ warned = true;
197
+ }
198
+ } else if (size.width > 1800 || size.height > 1800) {
199
+ console.warn(`The image size seems too large (${size.width}x${size.height}). It may lead to more token usage, slower response, and inaccurate result.`);
200
+ warned = true;
201
+ }
202
+ }
203
+ function mergeRects(rects) {
204
+ const minLeft = Math.min(...rects.map((r)=>r.left));
205
+ const minTop = Math.min(...rects.map((r)=>r.top));
206
+ const maxRight = Math.max(...rects.map((r)=>r.left + r.width));
207
+ const maxBottom = Math.max(...rects.map((r)=>r.top + r.height));
208
+ return {
209
+ left: minLeft,
210
+ top: minTop,
211
+ width: maxRight - minLeft,
212
+ height: maxBottom - minTop
213
+ };
214
+ }
215
+ function expandSearchArea(rect, screenSize, vlMode) {
216
+ const minEdgeSize = 'doubao-vision' === vlMode ? 500 : 300;
217
+ const defaultPadding = 160;
218
+ const paddingSizeHorizontal = rect.width < minEdgeSize ? Math.ceil((minEdgeSize - rect.width) / 2) : defaultPadding;
219
+ const paddingSizeVertical = rect.height < minEdgeSize ? Math.ceil((minEdgeSize - rect.height) / 2) : defaultPadding;
220
+ let newWidth = Math.max(minEdgeSize, rect.width + 2 * paddingSizeHorizontal);
221
+ let newHeight = Math.max(minEdgeSize, rect.height + 2 * paddingSizeVertical);
222
+ let newLeft = rect.left - paddingSizeHorizontal;
223
+ let newTop = rect.top - paddingSizeVertical;
224
+ if (newLeft + newWidth > screenSize.width) newLeft = screenSize.width - newWidth;
225
+ if (newTop + newHeight > screenSize.height) newTop = screenSize.height - newHeight;
226
+ newLeft = Math.max(0, newLeft);
227
+ newTop = Math.max(0, newTop);
228
+ if (newLeft + newWidth > screenSize.width) newWidth = screenSize.width - newLeft;
229
+ if (newTop + newHeight > screenSize.height) newHeight = screenSize.height - newTop;
230
+ rect.left = newLeft;
231
+ rect.top = newTop;
232
+ rect.width = newWidth;
233
+ rect.height = newHeight;
234
+ return rect;
235
+ }
236
+ async function markupImageForLLM(screenshotBase64, tree, size) {
237
+ const elementsInfo = (0, extractor_namespaceObject.treeToList)(tree);
238
+ const elementsPositionInfoWithoutText = elementsInfo.filter((elementInfo)=>{
239
+ if (elementInfo.attributes.nodeType === constants_namespaceObject.NodeType.TEXT) return false;
240
+ return true;
241
+ });
242
+ const imagePayload = await (0, img_namespaceObject.compositeElementInfoImg)({
243
+ inputImgBase64: screenshotBase64,
244
+ elementsPositionInfo: elementsPositionInfoWithoutText,
245
+ size
246
+ });
247
+ return imagePayload;
248
+ }
249
+ function buildYamlFlowFromPlans(plans, actionSpace, sleep) {
250
+ const flow = [];
251
+ for (const plan of plans){
252
+ const verb = plan.type;
253
+ const action = actionSpace.find((action)=>action.name === verb);
254
+ if (!action) {
255
+ console.warn(`Cannot convert action ${verb} to yaml flow. Will ignore it.`);
256
+ continue;
257
+ }
258
+ const flowKey = action.interfaceAlias || verb;
259
+ const flowParam = action.paramSchema ? dumpActionParam(plan.param || {}, action.paramSchema) : {};
260
+ const flowItem = {
261
+ [flowKey]: '',
262
+ ...flowParam
263
+ };
264
+ flow.push(flowItem);
265
+ }
266
+ if (sleep) flow.push({
267
+ sleep
268
+ });
269
+ return flow;
270
+ }
271
+ const PointSchema = external_zod_namespaceObject.z.object({
272
+ left: external_zod_namespaceObject.z.number(),
273
+ top: external_zod_namespaceObject.z.number()
274
+ });
275
+ const SizeSchema = external_zod_namespaceObject.z.object({
276
+ width: external_zod_namespaceObject.z.number(),
277
+ height: external_zod_namespaceObject.z.number(),
278
+ dpr: external_zod_namespaceObject.z.number().optional()
279
+ });
280
+ const RectSchema = PointSchema.and(SizeSchema).and(external_zod_namespaceObject.z.object({
281
+ zoom: external_zod_namespaceObject.z.number().optional()
282
+ }));
283
+ const TMultimodalPromptSchema = external_zod_namespaceObject.z.object({
284
+ images: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.object({
285
+ name: external_zod_namespaceObject.z.string(),
286
+ url: external_zod_namespaceObject.z.string()
287
+ })).optional(),
288
+ convertHttpImage2Base64: external_zod_namespaceObject.z.boolean().optional()
289
+ });
290
+ const TUserPromptSchema = external_zod_namespaceObject.z.union([
291
+ external_zod_namespaceObject.z.string(),
292
+ external_zod_namespaceObject.z.object({
293
+ prompt: external_zod_namespaceObject.z.string()
294
+ }).and(TMultimodalPromptSchema.partial())
295
+ ]);
296
+ const locateFieldFlagName = 'rpascene_location_field_flag';
297
+ const RpasceneLocationInput = external_zod_namespaceObject.z.object({
298
+ prompt: TUserPromptSchema,
299
+ deepThink: external_zod_namespaceObject.z.boolean().optional(),
300
+ cacheable: external_zod_namespaceObject.z.boolean().optional(),
301
+ xpath: external_zod_namespaceObject.z.union([
302
+ external_zod_namespaceObject.z.string(),
303
+ external_zod_namespaceObject.z.boolean()
304
+ ]).optional()
305
+ }).passthrough();
306
+ external_zod_namespaceObject.z.object({
307
+ [locateFieldFlagName]: external_zod_namespaceObject.z.literal(true),
308
+ prompt: TUserPromptSchema,
309
+ deepThink: external_zod_namespaceObject.z.boolean().optional(),
310
+ cacheable: external_zod_namespaceObject.z.boolean().optional(),
311
+ xpath: external_zod_namespaceObject.z.boolean().optional(),
312
+ center: external_zod_namespaceObject.z.tuple([
313
+ external_zod_namespaceObject.z.number(),
314
+ external_zod_namespaceObject.z.number()
315
+ ]),
316
+ rect: RectSchema
317
+ }).passthrough();
318
+ const getRpasceneLocationSchema = ()=>RpasceneLocationInput;
319
+ const ifRpasceneLocatorField = (field)=>{
320
+ var _actualField__def, _actualField__def1;
321
+ let actualField = field;
322
+ if ((null == (_actualField__def = actualField._def) ? void 0 : _actualField__def.typeName) === 'ZodOptional') actualField = actualField._def.innerType;
323
+ if ((null == (_actualField__def1 = actualField._def) ? void 0 : _actualField__def1.typeName) === 'ZodObject') {
324
+ const shape = actualField._def.shape();
325
+ if (locateFieldFlagName in shape) return true;
326
+ if ('prompt' in shape && shape.prompt) return true;
327
+ }
328
+ return false;
329
+ };
330
+ const dumpRpasceneLocatorField = (field)=>{
331
+ (0, utils_namespaceObject.assert)(ifRpasceneLocatorField(field), 'field is not a rpascene locator field');
332
+ if ('string' == typeof field) return field;
333
+ if (field && 'object' == typeof field && field.prompt) {
334
+ if ('string' == typeof field.prompt) return field.prompt;
335
+ if ('object' == typeof field.prompt && field.prompt.prompt) return field.prompt.prompt;
336
+ }
337
+ return String(field);
338
+ };
339
+ const findAllRpasceneLocatorField = (zodType, requiredOnly)=>{
340
+ var _zodObject__def;
341
+ if (!zodType) return [];
342
+ const zodObject = zodType;
343
+ if ((null == (_zodObject__def = zodObject._def) ? void 0 : _zodObject__def.typeName) === 'ZodObject' && zodObject.shape) {
344
+ const keys = Object.keys(zodObject.shape);
345
+ return keys.filter((key)=>{
346
+ const field = zodObject.shape[key];
347
+ if (!ifRpasceneLocatorField(field)) return false;
348
+ if (requiredOnly) {
349
+ var _field__def;
350
+ return (null == (_field__def = field._def) ? void 0 : _field__def.typeName) !== 'ZodOptional';
351
+ }
352
+ return true;
353
+ });
354
+ }
355
+ return [];
356
+ };
357
+ const dumpActionParam = (jsonObject, zodSchema)=>{
358
+ const locatorFields = findAllRpasceneLocatorField(zodSchema);
359
+ const result = {
360
+ ...jsonObject
361
+ };
362
+ for (const fieldName of locatorFields){
363
+ const fieldValue = result[fieldName];
364
+ if (fieldValue) {
365
+ if ('string' == typeof fieldValue) result[fieldName] = fieldValue;
366
+ else if ('object' == typeof fieldValue) {
367
+ if (fieldValue.prompt) {
368
+ if ('string' == typeof fieldValue.prompt) result[fieldName] = fieldValue.prompt;
369
+ else if ('object' == typeof fieldValue.prompt && fieldValue.prompt.prompt) result[fieldName] = fieldValue.prompt.prompt;
370
+ }
371
+ }
372
+ }
373
+ }
374
+ return result;
375
+ };
376
+ const loadActionParam = (jsonObject, zodSchema)=>{
377
+ const locatorFields = findAllRpasceneLocatorField(zodSchema);
378
+ const result = {
379
+ ...jsonObject
380
+ };
381
+ for (const fieldName of locatorFields){
382
+ const fieldValue = result[fieldName];
383
+ if (fieldValue && 'string' == typeof fieldValue) result[fieldName] = {
384
+ [locateFieldFlagName]: true,
385
+ prompt: fieldValue
386
+ };
387
+ }
388
+ return result;
389
+ };
390
+ const parseActionParam = (rawParam, zodSchema)=>{
391
+ const param = rawParam ?? {};
392
+ const locateFields = findAllRpasceneLocatorField(zodSchema);
393
+ if (0 === locateFields.length) return zodSchema.parse(param);
394
+ const locateFieldValues = {};
395
+ for (const fieldName of locateFields)if (fieldName in param) locateFieldValues[fieldName] = param[fieldName];
396
+ const paramsForValidation = {};
397
+ for(const key in param)if (locateFields.includes(key)) paramsForValidation[key] = {
398
+ prompt: '_dummy_'
399
+ };
400
+ else paramsForValidation[key] = param[key];
401
+ const validated = zodSchema.parse(paramsForValidation);
402
+ for(const fieldName in locateFieldValues)validated[fieldName] = locateFieldValues[fieldName];
403
+ return validated;
404
+ };
405
+ exports.AIActionType = __webpack_exports__.AIActionType;
406
+ exports.PointSchema = __webpack_exports__.PointSchema;
407
+ exports.RectSchema = __webpack_exports__.RectSchema;
408
+ exports.SizeSchema = __webpack_exports__.SizeSchema;
409
+ exports.TMultimodalPromptSchema = __webpack_exports__.TMultimodalPromptSchema;
410
+ exports.TUserPromptSchema = __webpack_exports__.TUserPromptSchema;
411
+ exports.adaptBbox = __webpack_exports__.adaptBbox;
412
+ exports.adaptBboxToRect = __webpack_exports__.adaptBboxToRect;
413
+ exports.adaptDoubaoBbox = __webpack_exports__.adaptDoubaoBbox;
414
+ exports.adaptGeminiBbox = __webpack_exports__.adaptGeminiBbox;
415
+ exports.adaptQwenBbox = __webpack_exports__.adaptQwenBbox;
416
+ exports.buildYamlFlowFromPlans = __webpack_exports__.buildYamlFlowFromPlans;
417
+ exports.dumpActionParam = __webpack_exports__.dumpActionParam;
418
+ exports.dumpRpasceneLocatorField = __webpack_exports__.dumpRpasceneLocatorField;
419
+ exports.expandSearchArea = __webpack_exports__.expandSearchArea;
420
+ exports.fillBboxParam = __webpack_exports__.fillBboxParam;
421
+ exports.findAllRpasceneLocatorField = __webpack_exports__.findAllRpasceneLocatorField;
422
+ exports.getRpasceneLocationSchema = __webpack_exports__.getRpasceneLocationSchema;
423
+ exports.ifRpasceneLocatorField = __webpack_exports__.ifRpasceneLocatorField;
424
+ exports.loadActionParam = __webpack_exports__.loadActionParam;
425
+ exports.markupImageForLLM = __webpack_exports__.markupImageForLLM;
426
+ exports.mergeRects = __webpack_exports__.mergeRects;
427
+ exports.normalized01000 = __webpack_exports__.normalized01000;
428
+ exports.parseActionParam = __webpack_exports__.parseActionParam;
429
+ exports.warnGPT4oSizeLimit = __webpack_exports__.warnGPT4oSizeLimit;
430
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
431
+ "AIActionType",
432
+ "PointSchema",
433
+ "RectSchema",
434
+ "SizeSchema",
435
+ "TMultimodalPromptSchema",
436
+ "TUserPromptSchema",
437
+ "adaptBbox",
438
+ "adaptBboxToRect",
439
+ "adaptDoubaoBbox",
440
+ "adaptGeminiBbox",
441
+ "adaptQwenBbox",
442
+ "buildYamlFlowFromPlans",
443
+ "dumpActionParam",
444
+ "dumpRpasceneLocatorField",
445
+ "expandSearchArea",
446
+ "fillBboxParam",
447
+ "findAllRpasceneLocatorField",
448
+ "getRpasceneLocationSchema",
449
+ "ifRpasceneLocatorField",
450
+ "loadActionParam",
451
+ "markupImageForLLM",
452
+ "mergeRects",
453
+ "normalized01000",
454
+ "parseActionParam",
455
+ "warnGPT4oSizeLimit"
456
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
457
+ Object.defineProperty(exports, '__esModule', {
458
+ value: true
459
+ });
460
+
461
+ //# sourceMappingURL=common.js.map