@aiscene/shared 8.0.3 → 8.0.5

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 (105) hide show
  1. package/dist/es/agent-tools/agent-behavior-init-args.mjs +44 -0
  2. package/dist/es/agent-tools/base-tools.mjs +163 -0
  3. package/dist/es/agent-tools/chrome-path.mjs +50 -0
  4. package/dist/es/agent-tools/cli-report-session.mjs +78 -0
  5. package/dist/es/agent-tools/error-formatter.mjs +106 -0
  6. package/dist/es/agent-tools/index.mjs +9 -0
  7. package/dist/es/agent-tools/init-arg-utils.mjs +38 -0
  8. package/dist/es/agent-tools/observation-artifact.mjs +5 -0
  9. package/dist/es/agent-tools/observation-record.mjs +248 -0
  10. package/dist/es/agent-tools/tool-defaults.mjs +54 -0
  11. package/dist/es/agent-tools/tool-generator.mjs +529 -0
  12. package/dist/es/agent-tools/types.mjs +3 -0
  13. package/dist/es/agent-tools/user-prompt.mjs +66 -0
  14. package/dist/es/cli/interrupt.mjs +116 -0
  15. package/dist/es/cli/record-command.mjs +130 -0
  16. package/dist/es/cli/screenshot-file.mjs +24 -0
  17. package/dist/es/cli/verbose-ai-act.mjs +230 -0
  18. package/dist/es/cli/verbose-screenshot.mjs +134 -0
  19. package/dist/es/cli/verbose.mjs +404 -0
  20. package/dist/es/env/parse-model-config.mjs +1 -1
  21. package/dist/es/env/types.mjs +18 -3
  22. package/dist/es/img/index.mjs +3 -3
  23. package/dist/es/img/info.mjs +45 -1
  24. package/dist/es/img/photon-loader.mjs +4 -0
  25. package/dist/es/img/transform.mjs +113 -3
  26. package/dist/es/recorder.mjs +249 -0
  27. package/dist/lib/agent-tools/agent-behavior-init-args.js +87 -0
  28. package/dist/lib/agent-tools/base-tools.js +197 -0
  29. package/dist/lib/agent-tools/chrome-path.js +87 -0
  30. package/dist/lib/agent-tools/cli-report-session.js +121 -0
  31. package/dist/lib/agent-tools/error-formatter.js +149 -0
  32. package/dist/lib/agent-tools/index.js +114 -0
  33. package/dist/lib/agent-tools/init-arg-utils.js +78 -0
  34. package/dist/lib/agent-tools/observation-artifact.js +42 -0
  35. package/dist/lib/agent-tools/observation-record.js +297 -0
  36. package/dist/lib/agent-tools/tool-defaults.js +97 -0
  37. package/dist/lib/agent-tools/tool-generator.js +569 -0
  38. package/dist/lib/agent-tools/types.js +40 -0
  39. package/dist/lib/agent-tools/user-prompt.js +103 -0
  40. package/dist/lib/cli/interrupt.js +156 -0
  41. package/dist/lib/cli/record-command.js +164 -0
  42. package/dist/lib/cli/screenshot-file.js +58 -0
  43. package/dist/lib/cli/verbose-ai-act.js +273 -0
  44. package/dist/lib/cli/verbose-screenshot.js +177 -0
  45. package/dist/lib/cli/verbose.js +465 -0
  46. package/dist/lib/env/parse-model-config.js +1 -1
  47. package/dist/lib/env/types.js +32 -2
  48. package/dist/lib/img/index.js +29 -5
  49. package/dist/lib/img/info.js +48 -1
  50. package/dist/lib/img/photon-loader.js +38 -0
  51. package/dist/lib/img/transform.js +135 -4
  52. package/dist/lib/recorder.js +307 -0
  53. package/dist/types/agent-tools/agent-behavior-init-args.d.ts +17 -0
  54. package/dist/types/agent-tools/base-tools.d.ts +158 -0
  55. package/dist/types/agent-tools/chrome-path.d.ts +2 -0
  56. package/dist/types/agent-tools/cli-report-session.d.ts +12 -0
  57. package/dist/types/agent-tools/error-formatter.d.ts +30 -0
  58. package/dist/types/agent-tools/index.d.ts +9 -0
  59. package/dist/types/agent-tools/init-arg-utils.d.ts +13 -0
  60. package/dist/types/agent-tools/observation-artifact.d.ts +10 -0
  61. package/dist/types/agent-tools/observation-record.d.ts +38 -0
  62. package/dist/types/agent-tools/tool-defaults.d.ts +63 -0
  63. package/dist/types/agent-tools/tool-generator.d.ts +13 -0
  64. package/dist/types/agent-tools/types.d.ts +213 -0
  65. package/dist/types/agent-tools/user-prompt.d.ts +13 -0
  66. package/dist/types/cli/interrupt.d.ts +49 -0
  67. package/dist/types/cli/record-command.d.ts +3 -0
  68. package/dist/types/cli/screenshot-file.d.ts +10 -0
  69. package/dist/types/cli/verbose-ai-act.d.ts +44 -0
  70. package/dist/types/cli/verbose-screenshot.d.ts +10 -0
  71. package/dist/types/cli/verbose.d.ts +40 -0
  72. package/dist/types/env/types.d.ts +16 -7
  73. package/dist/types/img/index.d.ts +2 -2
  74. package/dist/types/img/info.d.ts +2 -0
  75. package/dist/types/img/photon-loader.d.ts +2 -0
  76. package/dist/types/img/transform.d.ts +22 -2
  77. package/dist/types/mcp/types.d.ts +1 -0
  78. package/dist/types/recorder.d.ts +113 -0
  79. package/package.json +1 -1
  80. package/src/agent-tools/agent-behavior-init-args.ts +109 -0
  81. package/src/agent-tools/base-tools.ts +399 -0
  82. package/src/agent-tools/chrome-path.ts +74 -0
  83. package/src/agent-tools/cli-report-session.ts +130 -0
  84. package/src/agent-tools/error-formatter.ts +177 -0
  85. package/src/agent-tools/index.ts +9 -0
  86. package/src/agent-tools/init-arg-utils.ts +105 -0
  87. package/src/agent-tools/observation-artifact.ts +29 -0
  88. package/src/agent-tools/observation-record.ts +331 -0
  89. package/src/agent-tools/tool-defaults.ts +119 -0
  90. package/src/agent-tools/tool-generator.ts +866 -0
  91. package/src/agent-tools/types.ts +250 -0
  92. package/src/agent-tools/user-prompt.ts +102 -0
  93. package/src/cli/interrupt.ts +207 -0
  94. package/src/cli/record-command.ts +177 -0
  95. package/src/cli/screenshot-file.ts +61 -0
  96. package/src/cli/verbose-ai-act.ts +387 -0
  97. package/src/cli/verbose-screenshot.ts +269 -0
  98. package/src/cli/verbose.ts +753 -0
  99. package/src/env/types.ts +30 -2
  100. package/src/img/index.ts +12 -0
  101. package/src/img/info.ts +61 -0
  102. package/src/img/photon-loader.ts +5 -0
  103. package/src/img/transform.ts +262 -3
  104. package/src/mcp/types.ts +2 -0
  105. package/src/recorder.ts +625 -0
@@ -36,6 +36,7 @@ __webpack_require__.d(__webpack_exports__, {
36
36
  MIDSCENE_ANDROID_IME_STRATEGY: ()=>MIDSCENE_ANDROID_IME_STRATEGY,
37
37
  MIDSCENE_CACHE: ()=>MIDSCENE_CACHE,
38
38
  MIDSCENE_CACHE_MAX_FILENAME_LENGTH: ()=>MIDSCENE_CACHE_MAX_FILENAME_LENGTH,
39
+ MIDSCENE_CHROME_PATH: ()=>MIDSCENE_CHROME_PATH,
39
40
  MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG: ()=>MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG,
40
41
  MIDSCENE_DEBUG_MODE: ()=>MIDSCENE_DEBUG_MODE,
41
42
  MIDSCENE_DEBUG_MODEL_PROFILE: ()=>MIDSCENE_DEBUG_MODEL_PROFILE,
@@ -50,6 +51,7 @@ __webpack_require__.d(__webpack_exports__, {
50
51
  MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET: ()=>MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET,
51
52
  MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT: ()=>MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT,
52
53
  MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED: ()=>MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED,
54
+ MIDSCENE_INSIGHT_MODEL_RESPONSE_FORMAT: ()=>MIDSCENE_INSIGHT_MODEL_RESPONSE_FORMAT,
53
55
  MIDSCENE_INSIGHT_MODEL_RETRY_COUNT: ()=>MIDSCENE_INSIGHT_MODEL_RETRY_COUNT,
54
56
  MIDSCENE_INSIGHT_MODEL_RETRY_INTERVAL: ()=>MIDSCENE_INSIGHT_MODEL_RETRY_INTERVAL,
55
57
  MIDSCENE_INSIGHT_MODEL_SOCKS_PROXY: ()=>MIDSCENE_INSIGHT_MODEL_SOCKS_PROXY,
@@ -74,6 +76,7 @@ __webpack_require__.d(__webpack_exports__, {
74
76
  MIDSCENE_MODEL_REASONING_BUDGET: ()=>MIDSCENE_MODEL_REASONING_BUDGET,
75
77
  MIDSCENE_MODEL_REASONING_EFFORT: ()=>MIDSCENE_MODEL_REASONING_EFFORT,
76
78
  MIDSCENE_MODEL_REASONING_ENABLED: ()=>MIDSCENE_MODEL_REASONING_ENABLED,
79
+ MIDSCENE_MODEL_RESPONSE_FORMAT: ()=>MIDSCENE_MODEL_RESPONSE_FORMAT,
77
80
  MIDSCENE_MODEL_RETRY_COUNT: ()=>MIDSCENE_MODEL_RETRY_COUNT,
78
81
  MIDSCENE_MODEL_RETRY_INTERVAL: ()=>MIDSCENE_MODEL_RETRY_INTERVAL,
79
82
  MIDSCENE_MODEL_SOCKS_PROXY: ()=>MIDSCENE_MODEL_SOCKS_PROXY,
@@ -92,12 +95,14 @@ __webpack_require__.d(__webpack_exports__, {
92
95
  MIDSCENE_PLANNING_MODEL_REASONING_BUDGET: ()=>MIDSCENE_PLANNING_MODEL_REASONING_BUDGET,
93
96
  MIDSCENE_PLANNING_MODEL_REASONING_EFFORT: ()=>MIDSCENE_PLANNING_MODEL_REASONING_EFFORT,
94
97
  MIDSCENE_PLANNING_MODEL_REASONING_ENABLED: ()=>MIDSCENE_PLANNING_MODEL_REASONING_ENABLED,
98
+ MIDSCENE_PLANNING_MODEL_RESPONSE_FORMAT: ()=>MIDSCENE_PLANNING_MODEL_RESPONSE_FORMAT,
95
99
  MIDSCENE_PLANNING_MODEL_RETRY_COUNT: ()=>MIDSCENE_PLANNING_MODEL_RETRY_COUNT,
96
100
  MIDSCENE_PLANNING_MODEL_RETRY_INTERVAL: ()=>MIDSCENE_PLANNING_MODEL_RETRY_INTERVAL,
97
101
  MIDSCENE_PLANNING_MODEL_SOCKS_PROXY: ()=>MIDSCENE_PLANNING_MODEL_SOCKS_PROXY,
98
102
  MIDSCENE_PLANNING_MODEL_TEMPERATURE: ()=>MIDSCENE_PLANNING_MODEL_TEMPERATURE,
99
103
  MIDSCENE_PLANNING_MODEL_TIMEOUT: ()=>MIDSCENE_PLANNING_MODEL_TIMEOUT,
100
104
  MIDSCENE_PREFERRED_LANGUAGE: ()=>MIDSCENE_PREFERRED_LANGUAGE,
105
+ MIDSCENE_RECORD_MODEL_CALL: ()=>MIDSCENE_RECORD_MODEL_CALL,
101
106
  MIDSCENE_REPLANNING_CYCLE_LIMIT: ()=>MIDSCENE_REPLANNING_CYCLE_LIMIT,
102
107
  MIDSCENE_REPORT_QUIET: ()=>MIDSCENE_REPORT_QUIET,
103
108
  MIDSCENE_REPORT_TAG_NAME: ()=>MIDSCENE_REPORT_TAG_NAME,
@@ -126,6 +131,7 @@ const MIDSCENE_DEBUG_MODEL_RESPONSE = 'MIDSCENE_DEBUG_MODEL_RESPONSE';
126
131
  const MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG = 'MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG';
127
132
  const MIDSCENE_DEBUG_MODE = 'MIDSCENE_DEBUG_MODE';
128
133
  const MIDSCENE_MCP_USE_PUPPETEER_MODE = 'MIDSCENE_MCP_USE_PUPPETEER_MODE';
134
+ const MIDSCENE_CHROME_PATH = 'MIDSCENE_CHROME_PATH';
129
135
  const MIDSCENE_MCP_CHROME_PATH = 'MIDSCENE_MCP_CHROME_PATH';
130
136
  const MIDSCENE_MCP_ANDROID_MODE = 'MIDSCENE_MCP_ANDROID_MODE';
131
137
  const DOCKER_CONTAINER = 'DOCKER_CONTAINER';
@@ -143,6 +149,7 @@ const MIDSCENE_MODEL_RETRY_INTERVAL = 'MIDSCENE_MODEL_RETRY_INTERVAL';
143
149
  const MIDSCENE_MODEL_REASONING_EFFORT = 'MIDSCENE_MODEL_REASONING_EFFORT';
144
150
  const MIDSCENE_MODEL_REASONING_ENABLED = 'MIDSCENE_MODEL_REASONING_ENABLED';
145
151
  const MIDSCENE_MODEL_REASONING_BUDGET = 'MIDSCENE_MODEL_REASONING_BUDGET';
152
+ const MIDSCENE_MODEL_RESPONSE_FORMAT = 'MIDSCENE_MODEL_RESPONSE_FORMAT';
146
153
  const OPENAI_API_KEY = 'OPENAI_API_KEY';
147
154
  const OPENAI_BASE_URL = 'OPENAI_BASE_URL';
148
155
  const MIDSCENE_OPENAI_INIT_CONFIG_JSON = 'MIDSCENE_OPENAI_INIT_CONFIG_JSON';
@@ -170,6 +177,7 @@ const MIDSCENE_PREFERRED_LANGUAGE = 'MIDSCENE_PREFERRED_LANGUAGE';
170
177
  const MIDSCENE_CACHE_MAX_FILENAME_LENGTH = 'MIDSCENE_CACHE_MAX_FILENAME_LENGTH';
171
178
  const MIDSCENE_REPLANNING_CYCLE_LIMIT = 'MIDSCENE_REPLANNING_CYCLE_LIMIT';
172
179
  const MIDSCENE_RUN_DIR = 'MIDSCENE_RUN_DIR';
180
+ const MIDSCENE_RECORD_MODEL_CALL = 'MIDSCENE_RECORD_MODEL_CALL';
173
181
  const MIDSCENE_INSIGHT_MODEL_NAME = 'MIDSCENE_INSIGHT_MODEL_NAME';
174
182
  const MIDSCENE_INSIGHT_MODEL_SOCKS_PROXY = 'MIDSCENE_INSIGHT_MODEL_SOCKS_PROXY';
175
183
  const MIDSCENE_INSIGHT_MODEL_HTTP_PROXY = 'MIDSCENE_INSIGHT_MODEL_HTTP_PROXY';
@@ -185,6 +193,7 @@ const MIDSCENE_INSIGHT_MODEL_FAMILY = 'MIDSCENE_INSIGHT_MODEL_FAMILY';
185
193
  const MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT = 'MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT';
186
194
  const MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED = 'MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED';
187
195
  const MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET = 'MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET';
196
+ const MIDSCENE_INSIGHT_MODEL_RESPONSE_FORMAT = 'MIDSCENE_INSIGHT_MODEL_RESPONSE_FORMAT';
188
197
  const MIDSCENE_PLANNING_MODEL_NAME = 'MIDSCENE_PLANNING_MODEL_NAME';
189
198
  const MIDSCENE_PLANNING_MODEL_SOCKS_PROXY = 'MIDSCENE_PLANNING_MODEL_SOCKS_PROXY';
190
199
  const MIDSCENE_PLANNING_MODEL_HTTP_PROXY = 'MIDSCENE_PLANNING_MODEL_HTTP_PROXY';
@@ -200,6 +209,7 @@ const MIDSCENE_PLANNING_MODEL_FAMILY = 'MIDSCENE_PLANNING_MODEL_FAMILY';
200
209
  const MIDSCENE_PLANNING_MODEL_REASONING_EFFORT = 'MIDSCENE_PLANNING_MODEL_REASONING_EFFORT';
201
210
  const MIDSCENE_PLANNING_MODEL_REASONING_ENABLED = 'MIDSCENE_PLANNING_MODEL_REASONING_ENABLED';
202
211
  const MIDSCENE_PLANNING_MODEL_REASONING_BUDGET = 'MIDSCENE_PLANNING_MODEL_REASONING_BUDGET';
212
+ const MIDSCENE_PLANNING_MODEL_RESPONSE_FORMAT = 'MIDSCENE_PLANNING_MODEL_RESPONSE_FORMAT';
203
213
  const MIDSCENE_MODEL_FAMILY = 'MIDSCENE_MODEL_FAMILY';
204
214
  const UNUSED_ENV_KEYS = [
205
215
  MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG
@@ -208,7 +218,8 @@ const BASIC_ENV_KEYS = [
208
218
  MIDSCENE_DEBUG_MODE,
209
219
  MIDSCENE_DEBUG_MODEL_PROFILE,
210
220
  MIDSCENE_DEBUG_MODEL_RESPONSE,
211
- MIDSCENE_RUN_DIR
221
+ MIDSCENE_RUN_DIR,
222
+ MIDSCENE_RECORD_MODEL_CALL
212
223
  ];
213
224
  const BOOLEAN_ENV_KEYS = [
214
225
  MIDSCENE_CACHE,
@@ -235,6 +246,7 @@ const STRING_ENV_KEYS = [
235
246
  MIDSCENE_REPORT_TAG_NAME,
236
247
  MIDSCENE_PREFERRED_LANGUAGE,
237
248
  MATCH_BY_POSITION,
249
+ MIDSCENE_CHROME_PATH,
238
250
  MIDSCENE_MCP_CHROME_PATH,
239
251
  DOCKER_CONTAINER
240
252
  ];
@@ -258,6 +270,7 @@ const MODEL_ENV_KEYS = [
258
270
  MIDSCENE_MODEL_REASONING_EFFORT,
259
271
  MIDSCENE_MODEL_REASONING_ENABLED,
260
272
  MIDSCENE_MODEL_REASONING_BUDGET,
273
+ MIDSCENE_MODEL_RESPONSE_FORMAT,
261
274
  MIDSCENE_USE_VLM_UI_TARS,
262
275
  MIDSCENE_USE_QWEN_VL,
263
276
  MIDSCENE_USE_QWEN3_VL,
@@ -284,6 +297,7 @@ const MODEL_ENV_KEYS = [
284
297
  MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT,
285
298
  MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED,
286
299
  MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET,
300
+ MIDSCENE_INSIGHT_MODEL_RESPONSE_FORMAT,
287
301
  MIDSCENE_PLANNING_MODEL_NAME,
288
302
  MIDSCENE_PLANNING_MODEL_SOCKS_PROXY,
289
303
  MIDSCENE_PLANNING_MODEL_HTTP_PROXY,
@@ -299,6 +313,7 @@ const MODEL_ENV_KEYS = [
299
313
  MIDSCENE_PLANNING_MODEL_REASONING_EFFORT,
300
314
  MIDSCENE_PLANNING_MODEL_REASONING_ENABLED,
301
315
  MIDSCENE_PLANNING_MODEL_REASONING_BUDGET,
316
+ MIDSCENE_PLANNING_MODEL_RESPONSE_FORMAT,
302
317
  MIDSCENE_MODEL_FAMILY
303
318
  ];
304
319
  const ALL_ENV_KEYS = [
@@ -313,6 +328,7 @@ const MODEL_FAMILY_VALUES = [
313
328
  'gemini',
314
329
  'qwen2.5-vl',
315
330
  'qwen3-vl',
331
+ 'qwen3',
316
332
  'qwen3.5',
317
333
  'qwen3.6',
318
334
  'vlm-ui-tars',
@@ -321,7 +337,11 @@ const MODEL_FAMILY_VALUES = [
321
337
  'glm-v',
322
338
  'auto-glm',
323
339
  'auto-glm-multilingual',
324
- 'gpt-5'
340
+ 'gpt-5',
341
+ 'deepseek',
342
+ 'kimi',
343
+ 'kimi3',
344
+ 'xiaomi-mimo'
325
345
  ];
326
346
  var UITarsModelVersion = /*#__PURE__*/ function(UITarsModelVersion) {
327
347
  UITarsModelVersion["V1_0"] = "1.0";
@@ -342,6 +362,7 @@ exports.MIDSCENE_ADB_REMOTE_PORT = __webpack_exports__.MIDSCENE_ADB_REMOTE_PORT;
342
362
  exports.MIDSCENE_ANDROID_IME_STRATEGY = __webpack_exports__.MIDSCENE_ANDROID_IME_STRATEGY;
343
363
  exports.MIDSCENE_CACHE = __webpack_exports__.MIDSCENE_CACHE;
344
364
  exports.MIDSCENE_CACHE_MAX_FILENAME_LENGTH = __webpack_exports__.MIDSCENE_CACHE_MAX_FILENAME_LENGTH;
365
+ exports.MIDSCENE_CHROME_PATH = __webpack_exports__.MIDSCENE_CHROME_PATH;
345
366
  exports.MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG = __webpack_exports__.MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG;
346
367
  exports.MIDSCENE_DEBUG_MODE = __webpack_exports__.MIDSCENE_DEBUG_MODE;
347
368
  exports.MIDSCENE_DEBUG_MODEL_PROFILE = __webpack_exports__.MIDSCENE_DEBUG_MODEL_PROFILE;
@@ -356,6 +377,7 @@ exports.MIDSCENE_INSIGHT_MODEL_NAME = __webpack_exports__.MIDSCENE_INSIGHT_MODEL
356
377
  exports.MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET = __webpack_exports__.MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET;
357
378
  exports.MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT = __webpack_exports__.MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT;
358
379
  exports.MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED = __webpack_exports__.MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED;
380
+ exports.MIDSCENE_INSIGHT_MODEL_RESPONSE_FORMAT = __webpack_exports__.MIDSCENE_INSIGHT_MODEL_RESPONSE_FORMAT;
359
381
  exports.MIDSCENE_INSIGHT_MODEL_RETRY_COUNT = __webpack_exports__.MIDSCENE_INSIGHT_MODEL_RETRY_COUNT;
360
382
  exports.MIDSCENE_INSIGHT_MODEL_RETRY_INTERVAL = __webpack_exports__.MIDSCENE_INSIGHT_MODEL_RETRY_INTERVAL;
361
383
  exports.MIDSCENE_INSIGHT_MODEL_SOCKS_PROXY = __webpack_exports__.MIDSCENE_INSIGHT_MODEL_SOCKS_PROXY;
@@ -380,6 +402,7 @@ exports.MIDSCENE_MODEL_NAME = __webpack_exports__.MIDSCENE_MODEL_NAME;
380
402
  exports.MIDSCENE_MODEL_REASONING_BUDGET = __webpack_exports__.MIDSCENE_MODEL_REASONING_BUDGET;
381
403
  exports.MIDSCENE_MODEL_REASONING_EFFORT = __webpack_exports__.MIDSCENE_MODEL_REASONING_EFFORT;
382
404
  exports.MIDSCENE_MODEL_REASONING_ENABLED = __webpack_exports__.MIDSCENE_MODEL_REASONING_ENABLED;
405
+ exports.MIDSCENE_MODEL_RESPONSE_FORMAT = __webpack_exports__.MIDSCENE_MODEL_RESPONSE_FORMAT;
383
406
  exports.MIDSCENE_MODEL_RETRY_COUNT = __webpack_exports__.MIDSCENE_MODEL_RETRY_COUNT;
384
407
  exports.MIDSCENE_MODEL_RETRY_INTERVAL = __webpack_exports__.MIDSCENE_MODEL_RETRY_INTERVAL;
385
408
  exports.MIDSCENE_MODEL_SOCKS_PROXY = __webpack_exports__.MIDSCENE_MODEL_SOCKS_PROXY;
@@ -398,12 +421,14 @@ exports.MIDSCENE_PLANNING_MODEL_NAME = __webpack_exports__.MIDSCENE_PLANNING_MOD
398
421
  exports.MIDSCENE_PLANNING_MODEL_REASONING_BUDGET = __webpack_exports__.MIDSCENE_PLANNING_MODEL_REASONING_BUDGET;
399
422
  exports.MIDSCENE_PLANNING_MODEL_REASONING_EFFORT = __webpack_exports__.MIDSCENE_PLANNING_MODEL_REASONING_EFFORT;
400
423
  exports.MIDSCENE_PLANNING_MODEL_REASONING_ENABLED = __webpack_exports__.MIDSCENE_PLANNING_MODEL_REASONING_ENABLED;
424
+ exports.MIDSCENE_PLANNING_MODEL_RESPONSE_FORMAT = __webpack_exports__.MIDSCENE_PLANNING_MODEL_RESPONSE_FORMAT;
401
425
  exports.MIDSCENE_PLANNING_MODEL_RETRY_COUNT = __webpack_exports__.MIDSCENE_PLANNING_MODEL_RETRY_COUNT;
402
426
  exports.MIDSCENE_PLANNING_MODEL_RETRY_INTERVAL = __webpack_exports__.MIDSCENE_PLANNING_MODEL_RETRY_INTERVAL;
403
427
  exports.MIDSCENE_PLANNING_MODEL_SOCKS_PROXY = __webpack_exports__.MIDSCENE_PLANNING_MODEL_SOCKS_PROXY;
404
428
  exports.MIDSCENE_PLANNING_MODEL_TEMPERATURE = __webpack_exports__.MIDSCENE_PLANNING_MODEL_TEMPERATURE;
405
429
  exports.MIDSCENE_PLANNING_MODEL_TIMEOUT = __webpack_exports__.MIDSCENE_PLANNING_MODEL_TIMEOUT;
406
430
  exports.MIDSCENE_PREFERRED_LANGUAGE = __webpack_exports__.MIDSCENE_PREFERRED_LANGUAGE;
431
+ exports.MIDSCENE_RECORD_MODEL_CALL = __webpack_exports__.MIDSCENE_RECORD_MODEL_CALL;
407
432
  exports.MIDSCENE_REPLANNING_CYCLE_LIMIT = __webpack_exports__.MIDSCENE_REPLANNING_CYCLE_LIMIT;
408
433
  exports.MIDSCENE_REPORT_QUIET = __webpack_exports__.MIDSCENE_REPORT_QUIET;
409
434
  exports.MIDSCENE_REPORT_TAG_NAME = __webpack_exports__.MIDSCENE_REPORT_TAG_NAME;
@@ -436,6 +461,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
436
461
  "MIDSCENE_ANDROID_IME_STRATEGY",
437
462
  "MIDSCENE_CACHE",
438
463
  "MIDSCENE_CACHE_MAX_FILENAME_LENGTH",
464
+ "MIDSCENE_CHROME_PATH",
439
465
  "MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG",
440
466
  "MIDSCENE_DEBUG_MODE",
441
467
  "MIDSCENE_DEBUG_MODEL_PROFILE",
@@ -450,6 +476,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
450
476
  "MIDSCENE_INSIGHT_MODEL_REASONING_BUDGET",
451
477
  "MIDSCENE_INSIGHT_MODEL_REASONING_EFFORT",
452
478
  "MIDSCENE_INSIGHT_MODEL_REASONING_ENABLED",
479
+ "MIDSCENE_INSIGHT_MODEL_RESPONSE_FORMAT",
453
480
  "MIDSCENE_INSIGHT_MODEL_RETRY_COUNT",
454
481
  "MIDSCENE_INSIGHT_MODEL_RETRY_INTERVAL",
455
482
  "MIDSCENE_INSIGHT_MODEL_SOCKS_PROXY",
@@ -474,6 +501,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
474
501
  "MIDSCENE_MODEL_REASONING_BUDGET",
475
502
  "MIDSCENE_MODEL_REASONING_EFFORT",
476
503
  "MIDSCENE_MODEL_REASONING_ENABLED",
504
+ "MIDSCENE_MODEL_RESPONSE_FORMAT",
477
505
  "MIDSCENE_MODEL_RETRY_COUNT",
478
506
  "MIDSCENE_MODEL_RETRY_INTERVAL",
479
507
  "MIDSCENE_MODEL_SOCKS_PROXY",
@@ -492,12 +520,14 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
492
520
  "MIDSCENE_PLANNING_MODEL_REASONING_BUDGET",
493
521
  "MIDSCENE_PLANNING_MODEL_REASONING_EFFORT",
494
522
  "MIDSCENE_PLANNING_MODEL_REASONING_ENABLED",
523
+ "MIDSCENE_PLANNING_MODEL_RESPONSE_FORMAT",
495
524
  "MIDSCENE_PLANNING_MODEL_RETRY_COUNT",
496
525
  "MIDSCENE_PLANNING_MODEL_RETRY_INTERVAL",
497
526
  "MIDSCENE_PLANNING_MODEL_SOCKS_PROXY",
498
527
  "MIDSCENE_PLANNING_MODEL_TEMPERATURE",
499
528
  "MIDSCENE_PLANNING_MODEL_TIMEOUT",
500
529
  "MIDSCENE_PREFERRED_LANGUAGE",
530
+ "MIDSCENE_RECORD_MODEL_CALL",
501
531
  "MIDSCENE_REPLANNING_CYCLE_LIMIT",
502
532
  "MIDSCENE_REPORT_QUIET",
503
533
  "MIDSCENE_REPORT_TAG_NAME",
@@ -24,24 +24,32 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- paddingToMatchBlockByBase64: ()=>external_transform_js_namespaceObject.paddingToMatchBlockByBase64,
27
+ convertImgBufferToJpeg: ()=>external_transform_js_namespaceObject.convertImgBufferToJpeg,
28
+ convertBase64ImageToJpeg: ()=>external_transform_js_namespaceObject.convertBase64ImageToJpeg,
29
+ inferBase64ImageFormat: ()=>external_transform_js_namespaceObject.inferBase64ImageFormat,
28
30
  localImg2Base64: ()=>external_transform_js_namespaceObject.localImg2Base64,
31
+ constrainBase64ImageToMaxSize: ()=>external_transform_js_namespaceObject.constrainBase64ImageToMaxSize,
32
+ paddingToMatchBlockByBase64: ()=>external_transform_js_namespaceObject.paddingToMatchBlockByBase64,
29
33
  parseBase64: ()=>external_transform_js_namespaceObject.parseBase64,
30
34
  resizeAndConvertImgBuffer: ()=>external_transform_js_namespaceObject.resizeAndConvertImgBuffer,
31
35
  resizeImgBase64: ()=>external_transform_js_namespaceObject.resizeImgBase64,
32
- saveBase64Image: ()=>external_transform_js_namespaceObject.saveBase64Image,
33
36
  isValidImageBuffer: ()=>external_info_js_namespaceObject.isValidImageBuffer,
37
+ saveBase64Image: ()=>external_transform_js_namespaceObject.saveBase64Image,
34
38
  validateScreenshotBuffer: ()=>external_info_js_namespaceObject.validateScreenshotBuffer,
39
+ normalizeScreenshotBase64: ()=>external_transform_js_namespaceObject.normalizeScreenshotBase64,
35
40
  preProcessImageUrl: ()=>external_transform_js_namespaceObject.preProcessImageUrl,
36
41
  annotateRects: ()=>external_box_select_js_namespaceObject.annotateRects,
37
42
  compositeElementInfoImg: ()=>external_box_select_js_namespaceObject.compositeElementInfoImg,
38
43
  isValidPNGImageBuffer: ()=>external_info_js_namespaceObject.isValidPNGImageBuffer,
39
- processImageElementInfo: ()=>external_box_select_js_namespaceObject.processImageElementInfo,
40
44
  cropByRect: ()=>external_transform_js_namespaceObject.cropByRect,
41
- scaleImage: ()=>external_transform_js_namespaceObject.scaleImage,
45
+ normalizeBase64Image: ()=>external_transform_js_namespaceObject.normalizeBase64Image,
46
+ processImageElementInfo: ()=>external_box_select_js_namespaceObject.processImageElementInfo,
42
47
  isValidJPEGImageBuffer: ()=>external_info_js_namespaceObject.isValidJPEGImageBuffer,
43
- zoomForGPT4o: ()=>external_transform_js_namespaceObject.zoomForGPT4o,
48
+ resizeBase64ImageToJpeg: ()=>external_transform_js_namespaceObject.resizeBase64ImageToJpeg,
49
+ scaleImage: ()=>external_transform_js_namespaceObject.scaleImage,
50
+ encodedImageInfoOfBuffer: ()=>external_info_js_namespaceObject.encodedImageInfoOfBuffer,
44
51
  createImgBase64ByFormat: ()=>external_transform_js_namespaceObject.createImgBase64ByFormat,
52
+ zoomForGPT4o: ()=>external_transform_js_namespaceObject.zoomForGPT4o,
45
53
  imageInfoOfBase64: ()=>external_info_js_namespaceObject.imageInfoOfBase64,
46
54
  httpImg2Base64: ()=>external_transform_js_namespaceObject.httpImg2Base64
47
55
  });
@@ -50,19 +58,27 @@ const external_transform_js_namespaceObject = require("./transform.js");
50
58
  const external_box_select_js_namespaceObject = require("./box-select.js");
51
59
  exports.annotateRects = __webpack_exports__.annotateRects;
52
60
  exports.compositeElementInfoImg = __webpack_exports__.compositeElementInfoImg;
61
+ exports.constrainBase64ImageToMaxSize = __webpack_exports__.constrainBase64ImageToMaxSize;
62
+ exports.convertBase64ImageToJpeg = __webpack_exports__.convertBase64ImageToJpeg;
63
+ exports.convertImgBufferToJpeg = __webpack_exports__.convertImgBufferToJpeg;
53
64
  exports.createImgBase64ByFormat = __webpack_exports__.createImgBase64ByFormat;
54
65
  exports.cropByRect = __webpack_exports__.cropByRect;
66
+ exports.encodedImageInfoOfBuffer = __webpack_exports__.encodedImageInfoOfBuffer;
55
67
  exports.httpImg2Base64 = __webpack_exports__.httpImg2Base64;
56
68
  exports.imageInfoOfBase64 = __webpack_exports__.imageInfoOfBase64;
69
+ exports.inferBase64ImageFormat = __webpack_exports__.inferBase64ImageFormat;
57
70
  exports.isValidImageBuffer = __webpack_exports__.isValidImageBuffer;
58
71
  exports.isValidJPEGImageBuffer = __webpack_exports__.isValidJPEGImageBuffer;
59
72
  exports.isValidPNGImageBuffer = __webpack_exports__.isValidPNGImageBuffer;
60
73
  exports.localImg2Base64 = __webpack_exports__.localImg2Base64;
74
+ exports.normalizeBase64Image = __webpack_exports__.normalizeBase64Image;
75
+ exports.normalizeScreenshotBase64 = __webpack_exports__.normalizeScreenshotBase64;
61
76
  exports.paddingToMatchBlockByBase64 = __webpack_exports__.paddingToMatchBlockByBase64;
62
77
  exports.parseBase64 = __webpack_exports__.parseBase64;
63
78
  exports.preProcessImageUrl = __webpack_exports__.preProcessImageUrl;
64
79
  exports.processImageElementInfo = __webpack_exports__.processImageElementInfo;
65
80
  exports.resizeAndConvertImgBuffer = __webpack_exports__.resizeAndConvertImgBuffer;
81
+ exports.resizeBase64ImageToJpeg = __webpack_exports__.resizeBase64ImageToJpeg;
66
82
  exports.resizeImgBase64 = __webpack_exports__.resizeImgBase64;
67
83
  exports.saveBase64Image = __webpack_exports__.saveBase64Image;
68
84
  exports.scaleImage = __webpack_exports__.scaleImage;
@@ -71,19 +87,27 @@ exports.zoomForGPT4o = __webpack_exports__.zoomForGPT4o;
71
87
  for(var __rspack_i in __webpack_exports__)if (-1 === [
72
88
  "annotateRects",
73
89
  "compositeElementInfoImg",
90
+ "constrainBase64ImageToMaxSize",
91
+ "convertBase64ImageToJpeg",
92
+ "convertImgBufferToJpeg",
74
93
  "createImgBase64ByFormat",
75
94
  "cropByRect",
95
+ "encodedImageInfoOfBuffer",
76
96
  "httpImg2Base64",
77
97
  "imageInfoOfBase64",
98
+ "inferBase64ImageFormat",
78
99
  "isValidImageBuffer",
79
100
  "isValidJPEGImageBuffer",
80
101
  "isValidPNGImageBuffer",
81
102
  "localImg2Base64",
103
+ "normalizeBase64Image",
104
+ "normalizeScreenshotBase64",
82
105
  "paddingToMatchBlockByBase64",
83
106
  "parseBase64",
84
107
  "preProcessImageUrl",
85
108
  "processImageElementInfo",
86
109
  "resizeAndConvertImgBuffer",
110
+ "resizeBase64ImageToJpeg",
87
111
  "resizeImgBase64",
88
112
  "saveBase64Image",
89
113
  "scaleImage",
@@ -33,8 +33,9 @@ var __webpack_require__ = {};
33
33
  var __webpack_exports__ = {};
34
34
  __webpack_require__.r(__webpack_exports__);
35
35
  __webpack_require__.d(__webpack_exports__, {
36
- isValidPNGImageBuffer: ()=>isValidPNGImageBuffer,
36
+ encodedImageInfoOfBuffer: ()=>encodedImageInfoOfBuffer,
37
37
  isValidImageBuffer: ()=>isValidImageBuffer,
38
+ isValidPNGImageBuffer: ()=>isValidPNGImageBuffer,
38
39
  validateScreenshotBuffer: ()=>validateScreenshotBuffer,
39
40
  imageInfoOfBase64: ()=>imageInfoOfBase64,
40
41
  isValidJPEGImageBuffer: ()=>isValidJPEGImageBuffer
@@ -43,6 +44,50 @@ const external_node_assert_namespaceObject = require("node:assert");
43
44
  var external_node_assert_default = /*#__PURE__*/ __webpack_require__.n(external_node_assert_namespaceObject);
44
45
  const external_get_photon_js_namespaceObject = require("./get-photon.js");
45
46
  var external_get_photon_js_default = /*#__PURE__*/ __webpack_require__.n(external_get_photon_js_namespaceObject);
47
+ const isJpegStartOfFrameMarker = (marker)=>marker >= 0xc0 && marker <= 0xcf && 0xc4 !== marker && 0xc8 !== marker && 0xcc !== marker;
48
+ function jpegInfoFromBuffer(imageBuffer) {
49
+ let offset = 2;
50
+ while(offset < imageBuffer.length){
51
+ if (0xff !== imageBuffer[offset]) {
52
+ offset += 1;
53
+ continue;
54
+ }
55
+ while(offset < imageBuffer.length && 0xff === imageBuffer[offset])offset += 1;
56
+ if (offset >= imageBuffer.length) break;
57
+ const marker = imageBuffer[offset];
58
+ offset += 1;
59
+ if (0xd9 === marker || 0xda === marker) break;
60
+ if (0x01 === marker || 0xd8 === marker || marker >= 0xd0 && marker <= 0xd7) continue;
61
+ if (offset + 2 > imageBuffer.length) break;
62
+ const segmentLength = imageBuffer.readUInt16BE(offset);
63
+ if (segmentLength < 2 || offset + segmentLength > imageBuffer.length) break;
64
+ if (isJpegStartOfFrameMarker(marker)) {
65
+ if (segmentLength < 7) break;
66
+ const height = imageBuffer.readUInt16BE(offset + 3);
67
+ const width = imageBuffer.readUInt16BE(offset + 5);
68
+ external_node_assert_default()(width && height, 'Invalid image: cannot get width or height');
69
+ return {
70
+ width,
71
+ height
72
+ };
73
+ }
74
+ offset += segmentLength;
75
+ }
76
+ throw new Error('Invalid image: cannot get JPEG width or height');
77
+ }
78
+ function encodedImageInfoOfBuffer(imageBuffer) {
79
+ if (isValidPNGImageBuffer(imageBuffer)) {
80
+ const width = imageBuffer.readUInt32BE(16);
81
+ const height = imageBuffer.readUInt32BE(20);
82
+ external_node_assert_default()(width && height, 'Invalid image: cannot get width or height');
83
+ return {
84
+ width,
85
+ height
86
+ };
87
+ }
88
+ if (isValidJPEGImageBuffer(imageBuffer)) return jpegInfoFromBuffer(imageBuffer);
89
+ throw new Error('Invalid image: unsupported format');
90
+ }
46
91
  async function imageInfoOfBase64(imageBase64) {
47
92
  const { PhotonImage } = await external_get_photon_js_default()();
48
93
  const base64Data = imageBase64.replace(/^data:image\/\w+;base64,/, '');
@@ -75,12 +120,14 @@ function validateScreenshotBuffer(screenshotBuffer, { label, minBufferSize = 0 }
75
120
  if (!isValidImageBuffer(screenshotBuffer)) throw new Error(`${label} buffer has invalid image format`);
76
121
  if (minBufferSize > 0 && bufferSize < minBufferSize) throw new Error(`${label} validation failed: buffer size ${bufferSize} bytes (minimum: ${minBufferSize})`);
77
122
  }
123
+ exports.encodedImageInfoOfBuffer = __webpack_exports__.encodedImageInfoOfBuffer;
78
124
  exports.imageInfoOfBase64 = __webpack_exports__.imageInfoOfBase64;
79
125
  exports.isValidImageBuffer = __webpack_exports__.isValidImageBuffer;
80
126
  exports.isValidJPEGImageBuffer = __webpack_exports__.isValidJPEGImageBuffer;
81
127
  exports.isValidPNGImageBuffer = __webpack_exports__.isValidPNGImageBuffer;
82
128
  exports.validateScreenshotBuffer = __webpack_exports__.validateScreenshotBuffer;
83
129
  for(var __rspack_i in __webpack_exports__)if (-1 === [
130
+ "encodedImageInfoOfBuffer",
84
131
  "imageInfoOfBase64",
85
132
  "isValidImageBuffer",
86
133
  "isValidJPEGImageBuffer",
@@ -0,0 +1,38 @@
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
+ loadPhotonModule: ()=>loadPhotonModule
28
+ });
29
+ async function loadPhotonModule() {
30
+ return import("@silvia-odwyer/photon");
31
+ }
32
+ exports.loadPhotonModule = __webpack_exports__.loadPhotonModule;
33
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
34
+ "loadPhotonModule"
35
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
36
+ Object.defineProperty(exports, '__esModule', {
37
+ value: true
38
+ });
@@ -33,18 +33,25 @@ var __webpack_require__ = {};
33
33
  var __webpack_exports__ = {};
34
34
  __webpack_require__.r(__webpack_exports__);
35
35
  __webpack_require__.d(__webpack_exports__, {
36
- paddingToMatchBlockByBase64: ()=>paddingToMatchBlockByBase64,
36
+ convertImgBufferToJpeg: ()=>convertImgBufferToJpeg,
37
+ convertBase64ImageToJpeg: ()=>convertBase64ImageToJpeg,
38
+ inferBase64ImageFormat: ()=>inferBase64ImageFormat,
37
39
  localImg2Base64: ()=>localImg2Base64,
40
+ constrainBase64ImageToMaxSize: ()=>constrainBase64ImageToMaxSize,
41
+ paddingToMatchBlockByBase64: ()=>paddingToMatchBlockByBase64,
42
+ parseBase64: ()=>parseBase64,
38
43
  photonFromBase64: ()=>photonFromBase64,
39
44
  photonToBase64: ()=>photonToBase64,
40
- parseBase64: ()=>parseBase64,
41
45
  resizeAndConvertImgBuffer: ()=>resizeAndConvertImgBuffer,
42
46
  resizeImgBase64: ()=>resizeImgBase64,
43
47
  saveBase64Image: ()=>saveBase64Image,
48
+ normalizeScreenshotBase64: ()=>normalizeScreenshotBase64,
44
49
  preProcessImageUrl: ()=>preProcessImageUrl,
45
50
  cropByRect: ()=>cropByRect,
46
51
  scaleImage: ()=>scaleImage,
52
+ normalizeBase64Image: ()=>normalizeBase64Image,
47
53
  zoomForGPT4o: ()=>zoomForGPT4o,
54
+ resizeBase64ImageToJpeg: ()=>resizeBase64ImageToJpeg,
48
55
  createImgBase64ByFormat: ()=>createImgBase64ByFormat,
49
56
  paddingToMatchBlock: ()=>paddingToMatchBlock,
50
57
  httpImg2Base64: ()=>httpImg2Base64
@@ -62,6 +69,7 @@ const external_get_photon_js_namespaceObject = require("./get-photon.js");
62
69
  var external_get_photon_js_default = /*#__PURE__*/ __webpack_require__.n(external_get_photon_js_namespaceObject);
63
70
  const external_get_sharp_js_namespaceObject = require("./get-sharp.js");
64
71
  var external_get_sharp_js_default = /*#__PURE__*/ __webpack_require__.n(external_get_sharp_js_namespaceObject);
72
+ const external_info_js_namespaceObject = require("./info.js");
65
73
  const imgDebug = (0, external_logger_js_namespaceObject.getDebug)('img');
66
74
  async function saveBase64Image(options) {
67
75
  const { base64Data, outputPath } = options;
@@ -124,7 +132,116 @@ async function resizeAndConvertImgBuffer(inputFormat, inputData, newSize) {
124
132
  format: 'jpeg'
125
133
  };
126
134
  }
127
- const createImgBase64ByFormat = (format, body)=>`data:image/${format};base64,${body}`;
135
+ const rawBase64BodyPattern = /^[A-Za-z0-9+/]+={0,2}$/;
136
+ const base64ImageDataUrlPattern = /^data:image\/(?:png|jpe?g);base64,[A-Za-z0-9+/=\s]+$/i;
137
+ const supportedScreenshotDataUriPattern = /^data:image\/(png|jpe?g);base64,([A-Za-z0-9+/=\s]+)$/i;
138
+ function normalizeBase64Body(body) {
139
+ return body.replace(/\s/g, '');
140
+ }
141
+ function detectImageMimeTypeFromBuffer(buffer) {
142
+ if (buffer.length >= 8 && 0x89 === buffer[0] && 0x50 === buffer[1] && 0x4e === buffer[2] && 0x47 === buffer[3] && 0x0d === buffer[4] && 0x0a === buffer[5] && 0x1a === buffer[6] && 0x0a === buffer[7]) return 'image/png';
143
+ if (buffer.length >= 3 && 0xff === buffer[0] && 0xd8 === buffer[1] && 0xff === buffer[2]) return 'image/jpeg';
144
+ }
145
+ function inferBase64ImageFormat(base64Body) {
146
+ const buffer = external_node_buffer_namespaceObject.Buffer.from(normalizeBase64Body(base64Body), 'base64');
147
+ const mimeType = detectImageMimeTypeFromBuffer(buffer);
148
+ if ('image/jpeg' === mimeType) return 'jpeg';
149
+ return 'png';
150
+ }
151
+ const createImgBase64ByFormat = (format, body)=>`data:image/${format};base64,${normalizeBase64Body(body)}`;
152
+ const normalizeScreenshotBase64 = (base64, options)=>{
153
+ const label = options?.label ?? 'screenshot base64';
154
+ const trimmedBase64 = base64.trim();
155
+ if (!trimmedBase64) throw new Error(`${label} cannot be empty`);
156
+ const dataUriMatch = trimmedBase64.match(supportedScreenshotDataUriPattern);
157
+ if (dataUriMatch) {
158
+ const imageFormat = 'jpg' === dataUriMatch[1].toLowerCase() ? 'jpeg' : dataUriMatch[1].toLowerCase();
159
+ const body = normalizeBase64Body(dataUriMatch[2]);
160
+ if (!body) throw new Error(`${label} cannot be empty`);
161
+ return createImgBase64ByFormat(imageFormat, body);
162
+ }
163
+ if (trimmedBase64.startsWith('data:')) throw new Error(`${label} must be a PNG/JPEG data URI or raw PNG base64 string`);
164
+ if (!rawBase64BodyPattern.test(normalizeBase64Body(trimmedBase64))) throw new Error(`${label} must be a PNG/JPEG data URI or raw PNG base64 string`);
165
+ return createImgBase64ByFormat('png', trimmedBase64);
166
+ };
167
+ const normalizeBase64Image = (base64)=>{
168
+ const trimmedBase64 = base64.trim();
169
+ if (base64ImageDataUrlPattern.test(trimmedBase64)) return trimmedBase64.replace(/\s/g, '');
170
+ const base64Body = normalizeBase64Body(trimmedBase64);
171
+ external_node_assert_default()(base64Body, 'base64 image must include image data');
172
+ return createImgBase64ByFormat(inferBase64ImageFormat(base64Body), base64Body);
173
+ };
174
+ function assertValidJpegQuality(jpegQuality) {
175
+ if (!Number.isInteger(jpegQuality) || jpegQuality < 1 || jpegQuality > 100) throw new Error(`jpegQuality must be an integer between 1 and 100. Received: ${jpegQuality}`);
176
+ }
177
+ function assertValidImageSize(size, label) {
178
+ if (!Number.isInteger(size.width) || !Number.isInteger(size.height) || size.width <= 0 || size.height <= 0) throw new Error(`${label} width and height must be positive integers. Received width: ${size.width}, height: ${size.height}`);
179
+ }
180
+ async function convertImgBufferToJpeg(inputData, jpegQuality = 90) {
181
+ assertValidJpegQuality(jpegQuality);
182
+ if (external_utils_js_namespaceObject.ifInNode) try {
183
+ const Sharp = await external_get_sharp_js_default()();
184
+ return await Sharp(inputData).jpeg({
185
+ quality: jpegQuality
186
+ }).toBuffer();
187
+ } catch (error) {
188
+ imgDebug('Sharp failed, falling back to Photon:', error);
189
+ }
190
+ const { PhotonImage } = await external_get_photon_js_default()();
191
+ const inputBytes = new Uint8Array(inputData);
192
+ const bytesliceResult = PhotonImage.new_from_byteslice(inputBytes);
193
+ const image = bytesliceResult instanceof Promise ? await bytesliceResult : bytesliceResult;
194
+ try {
195
+ return external_node_buffer_namespaceObject.Buffer.from(image.get_bytes_jpeg(jpegQuality));
196
+ } finally{
197
+ image.free();
198
+ }
199
+ }
200
+ async function convertBase64ImageToJpeg(inputBase64, jpegQuality = 90) {
201
+ assertValidJpegQuality(jpegQuality);
202
+ const normalized = normalizeBase64Image(inputBase64);
203
+ const { body } = parseBase64(normalized);
204
+ const imageBuffer = external_node_buffer_namespaceObject.Buffer.from(body, 'base64');
205
+ const detectedMimeType = detectImageMimeTypeFromBuffer(imageBuffer);
206
+ if ('image/jpeg' === detectedMimeType) return createImgBase64ByFormat('jpeg', body);
207
+ if ('image/png' !== detectedMimeType) throw new Error(`inputBase64 must contain a PNG or JPEG image. Detected: ${detectedMimeType ?? 'unsupported format'}`);
208
+ const jpegBuffer = await convertImgBufferToJpeg(imageBuffer, jpegQuality);
209
+ return createImgBase64ByFormat('jpeg', jpegBuffer.toString('base64'));
210
+ }
211
+ async function resizeBase64ImageToJpeg(inputBase64, options) {
212
+ const jpegQuality = options.jpegQuality ?? 90;
213
+ assertValidJpegQuality(jpegQuality);
214
+ assertValidImageSize(options.targetSize, 'targetSize');
215
+ const normalized = normalizeBase64Image(inputBase64);
216
+ const { body, mimeType } = parseBase64(normalized);
217
+ const imageBuffer = external_node_buffer_namespaceObject.Buffer.from(body, 'base64');
218
+ const sourceSize = (0, external_info_js_namespaceObject.encodedImageInfoOfBuffer)(imageBuffer);
219
+ if (options.sourceSize) {
220
+ assertValidImageSize(options.sourceSize, 'sourceSize');
221
+ if (options.sourceSize.width !== sourceSize.width || options.sourceSize.height !== sourceSize.height) throw new Error(`sourceSize ${options.sourceSize.width}x${options.sourceSize.height} does not match encoded image dimensions ${sourceSize.width}x${sourceSize.height}`);
222
+ }
223
+ const dimensionsUnchanged = sourceSize.width === options.targetSize.width && sourceSize.height === options.targetSize.height;
224
+ if (dimensionsUnchanged) return convertBase64ImageToJpeg(normalized, jpegQuality);
225
+ const { buffer } = await resizeAndConvertImgBuffer(mimeType.split('/')[1], imageBuffer, options.targetSize);
226
+ return createImgBase64ByFormat('jpeg', buffer.toString('base64'));
227
+ }
228
+ async function constrainBase64ImageToMaxSize(inputBase64, options) {
229
+ if (!Number.isInteger(options.maxSize) || options.maxSize <= 0) throw new Error(`maxSize must be a positive integer. Received: ${options.maxSize}`);
230
+ const normalized = normalizeBase64Image(inputBase64);
231
+ const { body } = parseBase64(normalized);
232
+ const sourceSize = (0, external_info_js_namespaceObject.encodedImageInfoOfBuffer)(external_node_buffer_namespaceObject.Buffer.from(body, 'base64'));
233
+ const largestDimension = Math.max(sourceSize.width, sourceSize.height);
234
+ if (largestDimension <= options.maxSize) return normalized;
235
+ const scale = options.maxSize / largestDimension;
236
+ return resizeBase64ImageToJpeg(normalized, {
237
+ targetSize: {
238
+ width: Math.max(1, Math.round(sourceSize.width * scale)),
239
+ height: Math.max(1, Math.round(sourceSize.height * scale))
240
+ },
241
+ sourceSize,
242
+ jpegQuality: options.jpegQuality
243
+ });
244
+ }
128
245
  async function resizeImgBase64(inputBase64, newSize) {
129
246
  const { body, mimeType } = parseBase64(inputBase64);
130
247
  const imageBuffer = external_node_buffer_namespaceObject.Buffer.from(body, 'base64');
@@ -201,7 +318,7 @@ async function paddingToMatchBlockByBase64(imageBase64, blockSize = 28) {
201
318
  photonImage.free();
202
319
  }
203
320
  }
204
- async function cropByRect(imageBase64, rect, paddingImage) {
321
+ async function cropByRect(imageBase64, rect, paddingImage = false) {
205
322
  const { crop } = await external_get_photon_js_default()();
206
323
  const photonImage = await photonFromBase64(imageBase64);
207
324
  const { left, top, width, height } = rect;
@@ -327,10 +444,16 @@ async function scaleImage(imageBase64, scale) {
327
444
  imageBase64: base64
328
445
  };
329
446
  }
447
+ exports.constrainBase64ImageToMaxSize = __webpack_exports__.constrainBase64ImageToMaxSize;
448
+ exports.convertBase64ImageToJpeg = __webpack_exports__.convertBase64ImageToJpeg;
449
+ exports.convertImgBufferToJpeg = __webpack_exports__.convertImgBufferToJpeg;
330
450
  exports.createImgBase64ByFormat = __webpack_exports__.createImgBase64ByFormat;
331
451
  exports.cropByRect = __webpack_exports__.cropByRect;
332
452
  exports.httpImg2Base64 = __webpack_exports__.httpImg2Base64;
453
+ exports.inferBase64ImageFormat = __webpack_exports__.inferBase64ImageFormat;
333
454
  exports.localImg2Base64 = __webpack_exports__.localImg2Base64;
455
+ exports.normalizeBase64Image = __webpack_exports__.normalizeBase64Image;
456
+ exports.normalizeScreenshotBase64 = __webpack_exports__.normalizeScreenshotBase64;
334
457
  exports.paddingToMatchBlock = __webpack_exports__.paddingToMatchBlock;
335
458
  exports.paddingToMatchBlockByBase64 = __webpack_exports__.paddingToMatchBlockByBase64;
336
459
  exports.parseBase64 = __webpack_exports__.parseBase64;
@@ -338,15 +461,22 @@ exports.photonFromBase64 = __webpack_exports__.photonFromBase64;
338
461
  exports.photonToBase64 = __webpack_exports__.photonToBase64;
339
462
  exports.preProcessImageUrl = __webpack_exports__.preProcessImageUrl;
340
463
  exports.resizeAndConvertImgBuffer = __webpack_exports__.resizeAndConvertImgBuffer;
464
+ exports.resizeBase64ImageToJpeg = __webpack_exports__.resizeBase64ImageToJpeg;
341
465
  exports.resizeImgBase64 = __webpack_exports__.resizeImgBase64;
342
466
  exports.saveBase64Image = __webpack_exports__.saveBase64Image;
343
467
  exports.scaleImage = __webpack_exports__.scaleImage;
344
468
  exports.zoomForGPT4o = __webpack_exports__.zoomForGPT4o;
345
469
  for(var __rspack_i in __webpack_exports__)if (-1 === [
470
+ "constrainBase64ImageToMaxSize",
471
+ "convertBase64ImageToJpeg",
472
+ "convertImgBufferToJpeg",
346
473
  "createImgBase64ByFormat",
347
474
  "cropByRect",
348
475
  "httpImg2Base64",
476
+ "inferBase64ImageFormat",
349
477
  "localImg2Base64",
478
+ "normalizeBase64Image",
479
+ "normalizeScreenshotBase64",
350
480
  "paddingToMatchBlock",
351
481
  "paddingToMatchBlockByBase64",
352
482
  "parseBase64",
@@ -354,6 +484,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
354
484
  "photonToBase64",
355
485
  "preProcessImageUrl",
356
486
  "resizeAndConvertImgBuffer",
487
+ "resizeBase64ImageToJpeg",
357
488
  "resizeImgBase64",
358
489
  "saveBase64Image",
359
490
  "scaleImage",