@donggui/core 1.5.4-donggui.3

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 (269) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/dist/es/agent/agent.mjs +709 -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/execution-session.mjs +41 -0
  7. package/dist/es/agent/execution-session.mjs.map +1 -0
  8. package/dist/es/agent/index.mjs +6 -0
  9. package/dist/es/agent/task-builder.mjs +330 -0
  10. package/dist/es/agent/task-builder.mjs.map +1 -0
  11. package/dist/es/agent/task-cache.mjs +186 -0
  12. package/dist/es/agent/task-cache.mjs.map +1 -0
  13. package/dist/es/agent/tasks.mjs +422 -0
  14. package/dist/es/agent/tasks.mjs.map +1 -0
  15. package/dist/es/agent/ui-utils.mjs +91 -0
  16. package/dist/es/agent/ui-utils.mjs.map +1 -0
  17. package/dist/es/agent/utils.mjs +198 -0
  18. package/dist/es/agent/utils.mjs.map +1 -0
  19. package/dist/es/ai-model/auto-glm/actions.mjs +224 -0
  20. package/dist/es/ai-model/auto-glm/actions.mjs.map +1 -0
  21. package/dist/es/ai-model/auto-glm/index.mjs +6 -0
  22. package/dist/es/ai-model/auto-glm/parser.mjs +239 -0
  23. package/dist/es/ai-model/auto-glm/parser.mjs.map +1 -0
  24. package/dist/es/ai-model/auto-glm/planning.mjs +71 -0
  25. package/dist/es/ai-model/auto-glm/planning.mjs.map +1 -0
  26. package/dist/es/ai-model/auto-glm/prompt.mjs +222 -0
  27. package/dist/es/ai-model/auto-glm/prompt.mjs.map +1 -0
  28. package/dist/es/ai-model/auto-glm/util.mjs +9 -0
  29. package/dist/es/ai-model/auto-glm/util.mjs.map +1 -0
  30. package/dist/es/ai-model/conversation-history.mjs +195 -0
  31. package/dist/es/ai-model/conversation-history.mjs.map +1 -0
  32. package/dist/es/ai-model/index.mjs +11 -0
  33. package/dist/es/ai-model/inspect.mjs +386 -0
  34. package/dist/es/ai-model/inspect.mjs.map +1 -0
  35. package/dist/es/ai-model/llm-planning.mjs +233 -0
  36. package/dist/es/ai-model/llm-planning.mjs.map +1 -0
  37. package/dist/es/ai-model/prompt/common.mjs +7 -0
  38. package/dist/es/ai-model/prompt/common.mjs.map +1 -0
  39. package/dist/es/ai-model/prompt/describe.mjs +66 -0
  40. package/dist/es/ai-model/prompt/describe.mjs.map +1 -0
  41. package/dist/es/ai-model/prompt/extraction.mjs +129 -0
  42. package/dist/es/ai-model/prompt/extraction.mjs.map +1 -0
  43. package/dist/es/ai-model/prompt/llm-locator.mjs +51 -0
  44. package/dist/es/ai-model/prompt/llm-locator.mjs.map +1 -0
  45. package/dist/es/ai-model/prompt/llm-planning.mjs +364 -0
  46. package/dist/es/ai-model/prompt/llm-planning.mjs.map +1 -0
  47. package/dist/es/ai-model/prompt/llm-section-locator.mjs +44 -0
  48. package/dist/es/ai-model/prompt/llm-section-locator.mjs.map +1 -0
  49. package/dist/es/ai-model/prompt/order-sensitive-judge.mjs +35 -0
  50. package/dist/es/ai-model/prompt/order-sensitive-judge.mjs.map +1 -0
  51. package/dist/es/ai-model/prompt/playwright-generator.mjs +117 -0
  52. package/dist/es/ai-model/prompt/playwright-generator.mjs.map +1 -0
  53. package/dist/es/ai-model/prompt/ui-tars-planning.mjs +36 -0
  54. package/dist/es/ai-model/prompt/ui-tars-planning.mjs.map +1 -0
  55. package/dist/es/ai-model/prompt/util.mjs +59 -0
  56. package/dist/es/ai-model/prompt/util.mjs.map +1 -0
  57. package/dist/es/ai-model/prompt/yaml-generator.mjs +219 -0
  58. package/dist/es/ai-model/prompt/yaml-generator.mjs.map +1 -0
  59. package/dist/es/ai-model/service-caller/index.mjs +466 -0
  60. package/dist/es/ai-model/service-caller/index.mjs.map +1 -0
  61. package/dist/es/ai-model/ui-tars-planning.mjs +249 -0
  62. package/dist/es/ai-model/ui-tars-planning.mjs.map +1 -0
  63. package/dist/es/common.mjs +371 -0
  64. package/dist/es/common.mjs.map +1 -0
  65. package/dist/es/device/device-options.mjs +0 -0
  66. package/dist/es/device/index.mjs +300 -0
  67. package/dist/es/device/index.mjs.map +1 -0
  68. package/dist/es/dump/html-utils.mjs +211 -0
  69. package/dist/es/dump/html-utils.mjs.map +1 -0
  70. package/dist/es/dump/image-restoration.mjs +43 -0
  71. package/dist/es/dump/image-restoration.mjs.map +1 -0
  72. package/dist/es/dump/index.mjs +3 -0
  73. package/dist/es/index.mjs +15 -0
  74. package/dist/es/index.mjs.map +1 -0
  75. package/dist/es/report-generator.mjs +134 -0
  76. package/dist/es/report-generator.mjs.map +1 -0
  77. package/dist/es/report.mjs +111 -0
  78. package/dist/es/report.mjs.map +1 -0
  79. package/dist/es/screenshot-item.mjs +105 -0
  80. package/dist/es/screenshot-item.mjs.map +1 -0
  81. package/dist/es/service/index.mjs +256 -0
  82. package/dist/es/service/index.mjs.map +1 -0
  83. package/dist/es/service/utils.mjs +15 -0
  84. package/dist/es/service/utils.mjs.map +1 -0
  85. package/dist/es/skill/index.mjs +38 -0
  86. package/dist/es/skill/index.mjs.map +1 -0
  87. package/dist/es/task-runner.mjs +258 -0
  88. package/dist/es/task-runner.mjs.map +1 -0
  89. package/dist/es/task-timing.mjs +12 -0
  90. package/dist/es/task-timing.mjs.map +1 -0
  91. package/dist/es/tree.mjs +13 -0
  92. package/dist/es/tree.mjs.map +1 -0
  93. package/dist/es/types.mjs +196 -0
  94. package/dist/es/types.mjs.map +1 -0
  95. package/dist/es/utils.mjs +218 -0
  96. package/dist/es/utils.mjs.map +1 -0
  97. package/dist/es/yaml/builder.mjs +13 -0
  98. package/dist/es/yaml/builder.mjs.map +1 -0
  99. package/dist/es/yaml/index.mjs +4 -0
  100. package/dist/es/yaml/player.mjs +418 -0
  101. package/dist/es/yaml/player.mjs.map +1 -0
  102. package/dist/es/yaml/utils.mjs +73 -0
  103. package/dist/es/yaml/utils.mjs.map +1 -0
  104. package/dist/es/yaml.mjs +0 -0
  105. package/dist/lib/agent/agent.js +757 -0
  106. package/dist/lib/agent/agent.js.map +1 -0
  107. package/dist/lib/agent/common.js +5 -0
  108. package/dist/lib/agent/execution-session.js +75 -0
  109. package/dist/lib/agent/execution-session.js.map +1 -0
  110. package/dist/lib/agent/index.js +81 -0
  111. package/dist/lib/agent/index.js.map +1 -0
  112. package/dist/lib/agent/task-builder.js +367 -0
  113. package/dist/lib/agent/task-builder.js.map +1 -0
  114. package/dist/lib/agent/task-cache.js +238 -0
  115. package/dist/lib/agent/task-cache.js.map +1 -0
  116. package/dist/lib/agent/tasks.js +465 -0
  117. package/dist/lib/agent/tasks.js.map +1 -0
  118. package/dist/lib/agent/ui-utils.js +143 -0
  119. package/dist/lib/agent/ui-utils.js.map +1 -0
  120. package/dist/lib/agent/utils.js +275 -0
  121. package/dist/lib/agent/utils.js.map +1 -0
  122. package/dist/lib/ai-model/auto-glm/actions.js +258 -0
  123. package/dist/lib/ai-model/auto-glm/actions.js.map +1 -0
  124. package/dist/lib/ai-model/auto-glm/index.js +66 -0
  125. package/dist/lib/ai-model/auto-glm/index.js.map +1 -0
  126. package/dist/lib/ai-model/auto-glm/parser.js +282 -0
  127. package/dist/lib/ai-model/auto-glm/parser.js.map +1 -0
  128. package/dist/lib/ai-model/auto-glm/planning.js +105 -0
  129. package/dist/lib/ai-model/auto-glm/planning.js.map +1 -0
  130. package/dist/lib/ai-model/auto-glm/prompt.js +259 -0
  131. package/dist/lib/ai-model/auto-glm/prompt.js.map +1 -0
  132. package/dist/lib/ai-model/auto-glm/util.js +46 -0
  133. package/dist/lib/ai-model/auto-glm/util.js.map +1 -0
  134. package/dist/lib/ai-model/conversation-history.js +229 -0
  135. package/dist/lib/ai-model/conversation-history.js.map +1 -0
  136. package/dist/lib/ai-model/index.js +125 -0
  137. package/dist/lib/ai-model/index.js.map +1 -0
  138. package/dist/lib/ai-model/inspect.js +429 -0
  139. package/dist/lib/ai-model/inspect.js.map +1 -0
  140. package/dist/lib/ai-model/llm-planning.js +270 -0
  141. package/dist/lib/ai-model/llm-planning.js.map +1 -0
  142. package/dist/lib/ai-model/prompt/common.js +41 -0
  143. package/dist/lib/ai-model/prompt/common.js.map +1 -0
  144. package/dist/lib/ai-model/prompt/describe.js +100 -0
  145. package/dist/lib/ai-model/prompt/describe.js.map +1 -0
  146. package/dist/lib/ai-model/prompt/extraction.js +169 -0
  147. package/dist/lib/ai-model/prompt/extraction.js.map +1 -0
  148. package/dist/lib/ai-model/prompt/llm-locator.js +88 -0
  149. package/dist/lib/ai-model/prompt/llm-locator.js.map +1 -0
  150. package/dist/lib/ai-model/prompt/llm-planning.js +401 -0
  151. package/dist/lib/ai-model/prompt/llm-planning.js.map +1 -0
  152. package/dist/lib/ai-model/prompt/llm-section-locator.js +81 -0
  153. package/dist/lib/ai-model/prompt/llm-section-locator.js.map +1 -0
  154. package/dist/lib/ai-model/prompt/order-sensitive-judge.js +72 -0
  155. package/dist/lib/ai-model/prompt/order-sensitive-judge.js.map +1 -0
  156. package/dist/lib/ai-model/prompt/playwright-generator.js +178 -0
  157. package/dist/lib/ai-model/prompt/playwright-generator.js.map +1 -0
  158. package/dist/lib/ai-model/prompt/ui-tars-planning.js +73 -0
  159. package/dist/lib/ai-model/prompt/ui-tars-planning.js.map +1 -0
  160. package/dist/lib/ai-model/prompt/util.js +105 -0
  161. package/dist/lib/ai-model/prompt/util.js.map +1 -0
  162. package/dist/lib/ai-model/prompt/yaml-generator.js +280 -0
  163. package/dist/lib/ai-model/prompt/yaml-generator.js.map +1 -0
  164. package/dist/lib/ai-model/service-caller/index.js +531 -0
  165. package/dist/lib/ai-model/service-caller/index.js.map +1 -0
  166. package/dist/lib/ai-model/ui-tars-planning.js +283 -0
  167. package/dist/lib/ai-model/ui-tars-planning.js.map +1 -0
  168. package/dist/lib/common.js +480 -0
  169. package/dist/lib/common.js.map +1 -0
  170. package/dist/lib/device/device-options.js +20 -0
  171. package/dist/lib/device/device-options.js.map +1 -0
  172. package/dist/lib/device/index.js +418 -0
  173. package/dist/lib/device/index.js.map +1 -0
  174. package/dist/lib/dump/html-utils.js +281 -0
  175. package/dist/lib/dump/html-utils.js.map +1 -0
  176. package/dist/lib/dump/image-restoration.js +77 -0
  177. package/dist/lib/dump/image-restoration.js.map +1 -0
  178. package/dist/lib/dump/index.js +60 -0
  179. package/dist/lib/dump/index.js.map +1 -0
  180. package/dist/lib/index.js +146 -0
  181. package/dist/lib/index.js.map +1 -0
  182. package/dist/lib/report-generator.js +172 -0
  183. package/dist/lib/report-generator.js.map +1 -0
  184. package/dist/lib/report.js +145 -0
  185. package/dist/lib/report.js.map +1 -0
  186. package/dist/lib/screenshot-item.js +139 -0
  187. package/dist/lib/screenshot-item.js.map +1 -0
  188. package/dist/lib/service/index.js +290 -0
  189. package/dist/lib/service/index.js.map +1 -0
  190. package/dist/lib/service/utils.js +49 -0
  191. package/dist/lib/service/utils.js.map +1 -0
  192. package/dist/lib/skill/index.js +72 -0
  193. package/dist/lib/skill/index.js.map +1 -0
  194. package/dist/lib/task-runner.js +295 -0
  195. package/dist/lib/task-runner.js.map +1 -0
  196. package/dist/lib/task-timing.js +46 -0
  197. package/dist/lib/task-timing.js.map +1 -0
  198. package/dist/lib/tree.js +53 -0
  199. package/dist/lib/tree.js.map +1 -0
  200. package/dist/lib/types.js +285 -0
  201. package/dist/lib/types.js.map +1 -0
  202. package/dist/lib/utils.js +297 -0
  203. package/dist/lib/utils.js.map +1 -0
  204. package/dist/lib/yaml/builder.js +57 -0
  205. package/dist/lib/yaml/builder.js.map +1 -0
  206. package/dist/lib/yaml/index.js +81 -0
  207. package/dist/lib/yaml/index.js.map +1 -0
  208. package/dist/lib/yaml/player.js +452 -0
  209. package/dist/lib/yaml/player.js.map +1 -0
  210. package/dist/lib/yaml/utils.js +126 -0
  211. package/dist/lib/yaml/utils.js.map +1 -0
  212. package/dist/lib/yaml.js +20 -0
  213. package/dist/lib/yaml.js.map +1 -0
  214. package/dist/types/agent/agent.d.ts +190 -0
  215. package/dist/types/agent/common.d.ts +0 -0
  216. package/dist/types/agent/execution-session.d.ts +36 -0
  217. package/dist/types/agent/index.d.ts +10 -0
  218. package/dist/types/agent/task-builder.d.ts +34 -0
  219. package/dist/types/agent/task-cache.d.ts +48 -0
  220. package/dist/types/agent/tasks.d.ts +70 -0
  221. package/dist/types/agent/ui-utils.d.ts +14 -0
  222. package/dist/types/agent/utils.d.ts +29 -0
  223. package/dist/types/ai-model/auto-glm/actions.d.ts +77 -0
  224. package/dist/types/ai-model/auto-glm/index.d.ts +6 -0
  225. package/dist/types/ai-model/auto-glm/parser.d.ts +18 -0
  226. package/dist/types/ai-model/auto-glm/planning.d.ts +10 -0
  227. package/dist/types/ai-model/auto-glm/prompt.d.ts +27 -0
  228. package/dist/types/ai-model/auto-glm/util.d.ts +13 -0
  229. package/dist/types/ai-model/conversation-history.d.ts +105 -0
  230. package/dist/types/ai-model/index.d.ts +14 -0
  231. package/dist/types/ai-model/inspect.d.ts +58 -0
  232. package/dist/types/ai-model/llm-planning.d.ts +19 -0
  233. package/dist/types/ai-model/prompt/common.d.ts +2 -0
  234. package/dist/types/ai-model/prompt/describe.d.ts +1 -0
  235. package/dist/types/ai-model/prompt/extraction.d.ts +7 -0
  236. package/dist/types/ai-model/prompt/llm-locator.d.ts +3 -0
  237. package/dist/types/ai-model/prompt/llm-planning.d.ts +10 -0
  238. package/dist/types/ai-model/prompt/llm-section-locator.d.ts +3 -0
  239. package/dist/types/ai-model/prompt/order-sensitive-judge.d.ts +2 -0
  240. package/dist/types/ai-model/prompt/playwright-generator.d.ts +26 -0
  241. package/dist/types/ai-model/prompt/ui-tars-planning.d.ts +2 -0
  242. package/dist/types/ai-model/prompt/util.d.ts +33 -0
  243. package/dist/types/ai-model/prompt/yaml-generator.d.ts +100 -0
  244. package/dist/types/ai-model/service-caller/index.d.ts +49 -0
  245. package/dist/types/ai-model/ui-tars-planning.d.ts +72 -0
  246. package/dist/types/common.d.ts +288 -0
  247. package/dist/types/device/device-options.d.ts +142 -0
  248. package/dist/types/device/index.d.ts +2315 -0
  249. package/dist/types/dump/html-utils.d.ts +52 -0
  250. package/dist/types/dump/image-restoration.d.ts +6 -0
  251. package/dist/types/dump/index.d.ts +5 -0
  252. package/dist/types/index.d.ts +17 -0
  253. package/dist/types/report-generator.d.ts +48 -0
  254. package/dist/types/report.d.ts +15 -0
  255. package/dist/types/screenshot-item.d.ts +66 -0
  256. package/dist/types/service/index.d.ts +23 -0
  257. package/dist/types/service/utils.d.ts +2 -0
  258. package/dist/types/skill/index.d.ts +25 -0
  259. package/dist/types/task-runner.d.ts +48 -0
  260. package/dist/types/task-timing.d.ts +8 -0
  261. package/dist/types/tree.d.ts +4 -0
  262. package/dist/types/types.d.ts +645 -0
  263. package/dist/types/utils.d.ts +40 -0
  264. package/dist/types/yaml/builder.d.ts +2 -0
  265. package/dist/types/yaml/index.d.ts +4 -0
  266. package/dist/types/yaml/player.d.ts +34 -0
  267. package/dist/types/yaml/utils.d.ts +9 -0
  268. package/dist/types/yaml.d.ts +203 -0
  269. package/package.json +111 -0
@@ -0,0 +1,52 @@
1
+ export declare const escapeContent: (html: string) => string;
2
+ export declare const unescapeContent: (html: string) => string;
3
+ /** Chunk size for streaming file operations (64KB) */
4
+ export declare const STREAMING_CHUNK_SIZE: number;
5
+ /**
6
+ * Callback for processing matched tags during streaming.
7
+ * @param content - The content between open and close tags
8
+ * @returns true to stop scanning, false to continue
9
+ */
10
+ type TagMatchCallback = (content: string) => boolean;
11
+ /**
12
+ * Stream through a file and find tags matching the pattern.
13
+ * Memory usage: O(chunk_size + tag_size), not O(file_size).
14
+ *
15
+ * @param filePath - Absolute path to the file
16
+ * @param openTag - Opening tag to search for
17
+ * @param closeTag - Closing tag
18
+ * @param onMatch - Callback for each matched tag content
19
+ */
20
+ export declare function streamScanTags(filePath: string, openTag: string, closeTag: string, onMatch: TagMatchCallback): void;
21
+ /**
22
+ * Synchronously extract a specific image's base64 data from an HTML file by its id.
23
+ * Uses streaming to avoid loading the entire file into memory.
24
+ *
25
+ * @param htmlPath - Absolute path to the HTML file
26
+ * @param imageId - The id of the image to extract
27
+ * @returns The base64 data string, or null if not found
28
+ */
29
+ export declare function extractImageByIdSync(htmlPath: string, imageId: string): string | null;
30
+ /**
31
+ * Stream image script tags from source file directly to output file.
32
+ * Memory usage: O(single_image_size), not O(all_images_size).
33
+ *
34
+ * @param srcFilePath - Source HTML file path
35
+ * @param destFilePath - Destination file path to append to
36
+ */
37
+ export declare function streamImageScriptsToFile(srcFilePath: string, destFilePath: string): void;
38
+ /**
39
+ * Extract the LAST dump script content from HTML file using streaming.
40
+ * Memory usage: O(dump_size), not O(file_size).
41
+ *
42
+ * @param filePath - Absolute path to the HTML file
43
+ * @returns The dump script content (trimmed), or empty string if not found
44
+ */
45
+ export declare function extractLastDumpScriptSync(filePath: string): string;
46
+ export declare function parseImageScripts(html: string): Record<string, string>;
47
+ export declare function parseDumpScript(html: string): string;
48
+ export declare function parseDumpScriptAttributes(html: string): Record<string, string>;
49
+ export declare function generateImageScriptTag(id: string, data: string): string;
50
+ export declare function getBaseUrlFixScript(): string;
51
+ export declare function generateDumpScriptTag(json: string, attributes?: Record<string, string>): string;
52
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Recursively restore image references in parsed data.
3
+ * Replaces { $screenshot: "id" } with lazy { get base64() {...}, capturedAt } objects.
4
+ * The resolver is only called when .base64 is first accessed.
5
+ */
6
+ export declare function restoreImageReferences<T>(data: T, resolveImage: (id: string) => string): T;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Dump module - utilities for HTML parsing and image restoration.
3
+ */
4
+ export { restoreImageReferences } from './image-restoration';
5
+ export { escapeContent, unescapeContent, parseImageScripts, parseDumpScript, parseDumpScriptAttributes, generateImageScriptTag, generateDumpScriptTag, } from './html-utils';
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ import Service from './service/index';
3
+ import { TaskRunner } from './task-runner';
4
+ import { getVersion } from './utils';
5
+ export { plan, AiLocateElement, getMidsceneLocationSchema, PointSchema, SizeSchema, RectSchema, TMultimodalPromptSchema, TUserPromptSchema, type TMultimodalPrompt, type TUserPrompt, } from './ai-model/index';
6
+ export { MIDSCENE_MODEL_NAME, type CreateOpenAIClientFn, } from '@midscene/shared/env';
7
+ export type * from './types';
8
+ export { ServiceError, ExecutionDump, GroupedActionDump, type IExecutionDump, type IGroupedActionDump, } from './types';
9
+ export { z };
10
+ export default Service;
11
+ export { TaskRunner, Service, getVersion };
12
+ export type { MidsceneYamlScript, MidsceneYamlTask, MidsceneYamlFlowItem, MidsceneYamlConfigResult, MidsceneYamlConfig, MidsceneYamlScriptWebEnv, MidsceneYamlScriptAndroidEnv, MidsceneYamlScriptIOSEnv, MidsceneYamlScriptEnv, LocateOption, DetailedLocateParam, } from './yaml';
13
+ export { Agent, type AgentOpt, type AiActOptions, createAgent } from './agent';
14
+ export { restoreImageReferences, escapeContent, unescapeContent, parseImageScripts, parseDumpScript, parseDumpScriptAttributes, generateImageScriptTag, generateDumpScriptTag, } from './dump';
15
+ export type { IReportGenerator } from './report-generator';
16
+ export { ReportGenerator, nullReportGenerator } from './report-generator';
17
+ export { ScreenshotItem } from './screenshot-item';
@@ -0,0 +1,48 @@
1
+ import type { GroupedActionDump } from './types';
2
+ export interface IReportGenerator {
3
+ /**
4
+ * Schedule a dump update. Writes are queued internally to guarantee serial execution.
5
+ * This method returns immediately (fire-and-forget).
6
+ * Screenshots are written and memory is released during this call.
7
+ */
8
+ onDumpUpdate(dump: GroupedActionDump): void;
9
+ /**
10
+ * Wait for all queued write operations to complete.
11
+ */
12
+ flush(): Promise<void>;
13
+ /**
14
+ * Finalize the report. Calls flush() internally.
15
+ */
16
+ finalize(dump: GroupedActionDump): Promise<string | undefined>;
17
+ getReportPath(): string | undefined;
18
+ }
19
+ export declare const nullReportGenerator: IReportGenerator;
20
+ export declare class ReportGenerator implements IReportGenerator {
21
+ private reportPath;
22
+ private screenshotMode;
23
+ private autoPrint;
24
+ private writtenScreenshots;
25
+ private firstWriteDone;
26
+ private imageEndOffset;
27
+ private initialized;
28
+ private writeQueue;
29
+ private destroyed;
30
+ constructor(options: {
31
+ reportPath: string;
32
+ screenshotMode: 'inline' | 'directory';
33
+ autoPrint?: boolean;
34
+ });
35
+ static create(reportFileName: string, opts: {
36
+ generateReport?: boolean;
37
+ outputFormat?: 'single-html' | 'html-and-external-assets';
38
+ autoPrintReportMsg?: boolean;
39
+ }): IReportGenerator;
40
+ onDumpUpdate(dump: GroupedActionDump): void;
41
+ flush(): Promise<void>;
42
+ finalize(dump: GroupedActionDump): Promise<string | undefined>;
43
+ getReportPath(): string | undefined;
44
+ private printReportPath;
45
+ private doWrite;
46
+ private writeInlineReport;
47
+ private writeDirectoryReport;
48
+ }
@@ -0,0 +1,15 @@
1
+ import type { ReportFileWithAttributes } from './types';
2
+ export declare class ReportMergingTool {
3
+ private reportInfos;
4
+ append(reportInfo: ReportFileWithAttributes): void;
5
+ clear(): void;
6
+ /**
7
+ * Check if a report is in directory mode (html-and-external-assets).
8
+ * Directory mode reports: {name}/index.html + {name}/screenshots/
9
+ */
10
+ private isDirectoryModeReport;
11
+ mergeReports(reportFileName?: 'AUTO' | string, opts?: {
12
+ rmOriginalReports?: boolean;
13
+ overwrite?: boolean;
14
+ }): string | null;
15
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Serialization format for ScreenshotItem
3
+ * - { $screenshot: "id" } - inline mode, references imageMap in HTML
4
+ * - { base64: "path" } - directory mode, references external file path
5
+ */
6
+ export type ScreenshotSerializeFormat = {
7
+ $screenshot: string;
8
+ capturedAt: number;
9
+ } | {
10
+ base64: string;
11
+ capturedAt: number;
12
+ };
13
+ /**
14
+ * ScreenshotItem encapsulates screenshot data.
15
+ *
16
+ * Supports lazy loading after memory release:
17
+ * - inline mode: reads from HTML file using streaming (extractImageByIdSync)
18
+ * - directory mode: reads from file on disk
19
+ *
20
+ * After persistence, memory is released but the screenshot can be recovered
21
+ * on-demand from disk, making it safe to release memory at any time.
22
+ */
23
+ export declare class ScreenshotItem {
24
+ private _id;
25
+ private _base64;
26
+ private _format;
27
+ private _capturedAt;
28
+ private _persistedAs;
29
+ private _persistedPath;
30
+ private _persistedHtmlPath;
31
+ private constructor();
32
+ /** Create a new ScreenshotItem from base64 data */
33
+ static create(base64: string, capturedAt: number): ScreenshotItem;
34
+ get id(): string;
35
+ /** Get the image format (png or jpeg) */
36
+ get format(): 'png' | 'jpeg';
37
+ /** Get the file extension for this screenshot */
38
+ get extension(): string;
39
+ /** Get screenshot capture timestamp in milliseconds */
40
+ get capturedAt(): number;
41
+ get base64(): string;
42
+ /** Check if base64 data is still available in memory (not yet released) */
43
+ hasBase64(): boolean;
44
+ /**
45
+ * Mark as persisted to HTML (inline mode).
46
+ * Releases base64 memory, but keeps HTML path for lazy loading recovery.
47
+ * @param htmlPath - absolute path to the HTML file containing the image
48
+ */
49
+ markPersistedInline(htmlPath: string): void;
50
+ /**
51
+ * Mark as persisted to file (directory mode).
52
+ * Releases base64 memory, but keeps file path for lazy loading recovery.
53
+ * @param relativePath - relative path for serialization (e.g., "./screenshots/id.jpeg")
54
+ * @param absolutePath - absolute path for lazy loading recovery
55
+ */
56
+ markPersistedToPath(relativePath: string, absolutePath: string): void;
57
+ /** Serialize for JSON - format depends on persistence state */
58
+ toSerializable(): ScreenshotSerializeFormat;
59
+ /** Check if a value is a serialized ScreenshotItem reference (inline or directory mode) */
60
+ static isSerialized(value: unknown): value is ScreenshotSerializeFormat;
61
+ /**
62
+ * Get base64 data without the data URI prefix.
63
+ * Useful for writing raw binary data to files.
64
+ */
65
+ get rawBase64(): string;
66
+ }
@@ -0,0 +1,23 @@
1
+ import type { AIDescribeElementResponse, DetailedLocateParam, LocateResultWithDump, Rect, ServiceExtractOption, ServiceExtractParam, ServiceExtractResult, ServiceTaskInfo, UIContext } from '../types';
2
+ import type { IModelConfig } from '@midscene/shared/env';
3
+ import type { TMultimodalPrompt } from '../common';
4
+ export interface LocateOpts {
5
+ context?: UIContext;
6
+ }
7
+ export type AnyValue<T> = {
8
+ [K in keyof T]: unknown extends T[K] ? any : T[K];
9
+ };
10
+ interface ServiceOptions {
11
+ taskInfo?: Omit<ServiceTaskInfo, 'durationMs'>;
12
+ }
13
+ export default class Service {
14
+ contextRetrieverFn: () => Promise<UIContext> | UIContext;
15
+ taskInfo?: Omit<ServiceTaskInfo, 'durationMs'>;
16
+ constructor(context: UIContext | (() => Promise<UIContext> | UIContext), opt?: ServiceOptions);
17
+ locate(query: DetailedLocateParam, opt: LocateOpts, modelConfig: IModelConfig, abortSignal?: AbortSignal): Promise<LocateResultWithDump>;
18
+ extract<T>(dataDemand: ServiceExtractParam, modelConfig: IModelConfig, opt?: ServiceExtractOption, pageDescription?: string, multimodalPrompt?: TMultimodalPrompt, context?: UIContext): Promise<ServiceExtractResult<T>>;
19
+ describe(target: Rect | [number, number], modelConfig: IModelConfig, opt?: {
20
+ deepLocate?: boolean;
21
+ }): Promise<Pick<AIDescribeElementResponse, 'description'>>;
22
+ }
23
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { PartialServiceDumpFromSDK, ServiceDump } from '../types';
2
+ export declare function createServiceDump(data: PartialServiceDumpFromSDK): ServiceDump;
@@ -0,0 +1,25 @@
1
+ import type { AbstractInterface } from '../device';
2
+ type DeviceClass = new (...args: any[]) => AbstractInterface;
3
+ export interface SkillCLIOptions {
4
+ scriptName: string;
5
+ DeviceClass: DeviceClass;
6
+ }
7
+ /**
8
+ * Launch a Skill CLI for a custom interface Device class.
9
+ * This enables AI coding assistants (Claude Code, Cline, etc.) to control
10
+ * your custom interface through CLI commands.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * #!/usr/bin/env node
15
+ * import { runSkillCLI } from '@midscene/core/skill';
16
+ * import { SampleDevice } from './sample-device';
17
+ *
18
+ * runSkillCLI({
19
+ * DeviceClass: SampleDevice,
20
+ * scriptName: 'my-device',
21
+ * });
22
+ * ```
23
+ */
24
+ export declare function runSkillCLI(options: SkillCLIOptions): Promise<void>;
25
+ export {};
@@ -0,0 +1,48 @@
1
+ import { ExecutionDump, type ExecutionTask, type ExecutionTaskApply, type ExecutionTaskProgressOptions, type UIContext } from './types';
2
+ type TaskRunnerInitOptions = ExecutionTaskProgressOptions & {
3
+ tasks?: ExecutionTaskApply[];
4
+ onTaskUpdate?: (runner: TaskRunner, error?: TaskExecutionError) => Promise<void> | void;
5
+ };
6
+ type TaskRunnerOperationOptions = {
7
+ allowWhenError?: boolean;
8
+ };
9
+ export declare class TaskRunner {
10
+ name: string;
11
+ tasks: ExecutionTask[];
12
+ status: 'init' | 'pending' | 'running' | 'completed' | 'error';
13
+ onTaskStart?: ExecutionTaskProgressOptions['onTaskStart'];
14
+ private readonly uiContextBuilder;
15
+ private readonly onTaskUpdate?;
16
+ constructor(name: string, uiContextBuilder: () => Promise<UIContext>, options?: TaskRunnerInitOptions);
17
+ private emitOnTaskUpdate;
18
+ private lastUiContext?;
19
+ private getUiContext;
20
+ private captureScreenshot;
21
+ private attachRecorderItem;
22
+ private markTaskAsPending;
23
+ private normalizeStatusFromError;
24
+ append(task: ExecutionTaskApply[] | ExecutionTaskApply, options?: TaskRunnerOperationOptions): Promise<void>;
25
+ appendAndFlush(task: ExecutionTaskApply[] | ExecutionTaskApply, options?: TaskRunnerOperationOptions): Promise<{
26
+ output: any;
27
+ thought?: string;
28
+ } | undefined>;
29
+ flush(options?: TaskRunnerOperationOptions): Promise<{
30
+ output: any;
31
+ thought?: string;
32
+ } | undefined>;
33
+ isInErrorState(): boolean;
34
+ latestErrorTask(): ExecutionTask | null;
35
+ dump(): ExecutionDump;
36
+ appendErrorPlan(errorMsg: string): Promise<{
37
+ output: undefined;
38
+ runner: TaskRunner;
39
+ }>;
40
+ }
41
+ export declare class TaskExecutionError extends Error {
42
+ runner: TaskRunner;
43
+ errorTask: ExecutionTask | null;
44
+ constructor(message: string, runner: TaskRunner, errorTask: ExecutionTask | null, options?: {
45
+ cause?: unknown;
46
+ });
47
+ }
48
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { ExecutionTask } from './types';
2
+ type ExecutionTaskTiming = NonNullable<ExecutionTask['timing']>;
3
+ type NumericTimingField = {
4
+ [K in keyof ExecutionTaskTiming]-?: ExecutionTaskTiming[K] extends number | undefined ? K : never;
5
+ }[keyof ExecutionTaskTiming];
6
+ export type TimingSettableField = Exclude<NumericTimingField, 'start' | 'end' | 'cost'>;
7
+ export declare function setTimingFieldOnce(timing: ExecutionTaskTiming | undefined, field: TimingSettableField): void;
8
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { BaseElement, ElementTreeNode } from '@midscene/shared/types';
2
+ import { trimAttributes, truncateText } from '@midscene/shared/extractor';
3
+ export { trimAttributes, truncateText };
4
+ export declare function descriptionOfTree<ElementType extends BaseElement = BaseElement>(tree: ElementTreeNode<ElementType>, truncateTextLength?: number, filterNonTextContent?: boolean, visibleOnly?: boolean): string;