@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 @@
1
+ export { imageInfo, imageInfoOfBase64, localImg2Base64, httpImg2Base64, resizeAndConvertImgBuffer, saveBase64Image, zoomForGPT4o, } from '@rpascene/shared/img';
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ import { Executor } from './ai-model/action-executor';
3
+ import Insight from './insight/index';
4
+ import { getVersion } from './utils';
5
+ export { plan, describeUserPage, AiLocateElement, getRpasceneLocationSchema, type RpasceneLocationResultType, PointSchema, SizeSchema, RectSchema, TMultimodalPromptSchema, TUserPromptSchema, type TMultimodalPrompt, type TUserPrompt, } from './ai-model/index';
6
+ export { RPASCENE_MODEL_NAME } from '@rpascene/shared/env';
7
+ export type * from './types';
8
+ export { z };
9
+ export default Insight;
10
+ export { Executor, Insight, getVersion };
11
+ export type { RpasceneYamlScript, RpasceneYamlTask, RpasceneYamlFlowItem, RpasceneYamlConfigResult, RpasceneYamlConfig, RpasceneYamlScriptWebEnv, RpasceneYamlScriptAndroidEnv, RpasceneYamlScriptIOSEnv, RpasceneYamlScriptEnv, LocateOption, DetailedLocateParam, } from './yaml';
12
+ export { Agent, type AgentOpt, createAgent } from './agent';
@@ -0,0 +1,31 @@
1
+ import { callAIWithObjectResponse } from '../ai-model/index';
2
+ import type { AIDescribeElementResponse, AIUsageInfo, BaseElement, DetailedLocateParam, DumpSubscriber, InsightAction, InsightExtractOption, InsightExtractParam, InsightTaskInfo, LocateResult, Rect, UIContext } from '../types';
3
+ import { type IModelConfig } from '@rpascene/shared/env';
4
+ import type { TMultimodalPrompt } from '../ai-model/common';
5
+ export interface LocateOpts {
6
+ context?: UIContext<BaseElement>;
7
+ }
8
+ export type AnyValue<T> = {
9
+ [K in keyof T]: unknown extends T[K] ? any : T[K];
10
+ };
11
+ interface InsightOptions {
12
+ taskInfo?: Omit<InsightTaskInfo, 'durationMs'>;
13
+ aiVendorFn?: typeof callAIWithObjectResponse;
14
+ }
15
+ export default class Insight<ElementType extends BaseElement = BaseElement, ContextType extends UIContext<ElementType> = UIContext<ElementType>> {
16
+ contextRetrieverFn: (action: InsightAction) => Promise<ContextType> | ContextType;
17
+ aiVendorFn: Exclude<InsightOptions['aiVendorFn'], undefined>;
18
+ onceDumpUpdatedFn?: DumpSubscriber;
19
+ taskInfo?: Omit<InsightTaskInfo, 'durationMs'>;
20
+ constructor(context: ContextType | ((action: InsightAction) => Promise<ContextType> | ContextType), opt?: InsightOptions);
21
+ locate(query: DetailedLocateParam, opt: LocateOpts, modelConfig: IModelConfig): Promise<LocateResult>;
22
+ extract<T>(dataDemand: InsightExtractParam, modelConfig: IModelConfig, opt?: InsightExtractOption, multimodalPrompt?: TMultimodalPrompt): Promise<{
23
+ data: T;
24
+ thought?: string;
25
+ usage?: AIUsageInfo;
26
+ }>;
27
+ describe(target: Rect | [number, number], modelConfig: IModelConfig, opt?: {
28
+ deepThink?: boolean;
29
+ }): Promise<Pick<AIDescribeElementResponse, 'description'>>;
30
+ }
31
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { DumpSubscriber, PartialInsightDumpFromSDK } from '../types';
2
+ export declare function emitInsightDump(data: PartialInsightDumpFromSDK, dumpSubscriber?: DumpSubscriber): void;
@@ -0,0 +1,12 @@
1
+ import type { ReportFileWithAttributes } from './types';
2
+ export declare class ReportMergingTool {
3
+ private reportInfos;
4
+ append(reportInfo: ReportFileWithAttributes): void;
5
+ clear(): void;
6
+ private extractScriptContent;
7
+ mergeReports(reportFileName?: 'AUTO' | string, // user custom report filename, save into rpascene report dir if undefined
8
+ opts?: {
9
+ rmOriginalReports?: boolean;
10
+ overwrite?: boolean;
11
+ }): string | null;
12
+ }
@@ -0,0 +1 @@
1
+ export { truncateText, trimAttributes, descriptionOfTree, } from '@rpascene/shared/extractor';
@@ -0,0 +1,414 @@
1
+ import type { NodeType } from '@rpascene/shared/constants';
2
+ import type { TModelConfigFn } from '@rpascene/shared/env';
3
+ import type { BaseElement, ElementTreeNode, Rect, Size } from '@rpascene/shared/types';
4
+ import type { z } from 'zod';
5
+ import type { TUserPrompt } from './ai-model/common';
6
+ import type { DetailedLocateParam, RpasceneYamlFlowItem } from './yaml';
7
+ export type { ElementTreeNode, BaseElement, Rect, Size, Point, } from '@rpascene/shared/types';
8
+ export * from './yaml';
9
+ export type AIUsageInfo = Record<string, any> & {
10
+ prompt_tokens: number | undefined;
11
+ completion_tokens: number | undefined;
12
+ total_tokens: number | undefined;
13
+ time_cost: number | undefined;
14
+ model_name: string | undefined;
15
+ model_description: string | undefined;
16
+ intent: string | undefined;
17
+ };
18
+ /**
19
+ * openai
20
+ *
21
+ */
22
+ export declare enum AIResponseFormat {
23
+ JSON = "json_object",
24
+ TEXT = "text"
25
+ }
26
+ export type AISingleElementResponseById = {
27
+ id: string;
28
+ reason?: string;
29
+ text?: string;
30
+ xpaths?: string[];
31
+ };
32
+ export type AISingleElementResponseByPosition = {
33
+ position?: {
34
+ x: number;
35
+ y: number;
36
+ };
37
+ bbox?: [number, number, number, number];
38
+ reason: string;
39
+ text: string;
40
+ };
41
+ export type AISingleElementResponse = AISingleElementResponseById;
42
+ export interface AIElementLocatorResponse {
43
+ elements: {
44
+ id: string;
45
+ reason?: string;
46
+ text?: string;
47
+ xpaths?: string[];
48
+ }[];
49
+ bbox?: [number, number, number, number];
50
+ isOrderSensitive?: boolean;
51
+ errors?: string[];
52
+ }
53
+ export interface AIElementCoordinatesResponse {
54
+ bbox: [number, number, number, number];
55
+ isOrderSensitive?: boolean;
56
+ errors?: string[];
57
+ }
58
+ export type AIElementResponse = AIElementLocatorResponse | AIElementCoordinatesResponse;
59
+ export interface AIDataExtractionResponse<DataDemand> {
60
+ data: DataDemand;
61
+ errors?: string[];
62
+ thought?: string;
63
+ }
64
+ export interface AISectionLocatorResponse {
65
+ bbox: [number, number, number, number];
66
+ references_bbox?: [number, number, number, number][];
67
+ error?: string;
68
+ }
69
+ export interface AIAssertionResponse {
70
+ pass: boolean;
71
+ thought: string;
72
+ }
73
+ export interface AIDescribeElementResponse {
74
+ description: string;
75
+ error?: string;
76
+ }
77
+ export interface LocatorValidatorOption {
78
+ centerDistanceThreshold?: number;
79
+ }
80
+ export interface LocateValidatorResult {
81
+ pass: boolean;
82
+ rect: Rect;
83
+ center: [number, number];
84
+ centerDistance?: number;
85
+ }
86
+ export interface AgentDescribeElementAtPointResult {
87
+ prompt: string;
88
+ deepThink: boolean;
89
+ verifyResult?: LocateValidatorResult;
90
+ }
91
+ /**
92
+ * context
93
+ */
94
+ export declare abstract class UIContext<ElementType extends BaseElement = BaseElement> {
95
+ abstract screenshotBase64: string;
96
+ abstract tree: ElementTreeNode<ElementType>;
97
+ abstract size: Size;
98
+ abstract _isFrozen?: boolean;
99
+ }
100
+ export type EnsureObject<T> = {
101
+ [K in keyof T]: any;
102
+ };
103
+ export type InsightAction = 'locate' | 'extract' | 'assert' | 'describe';
104
+ export type InsightExtractParam = string | Record<string, string>;
105
+ export type ElementCacheFeature = Record<string, unknown>;
106
+ export type LocateResultElement = {
107
+ center: [number, number];
108
+ rect: Rect;
109
+ id: string;
110
+ indexId?: number;
111
+ xpaths: string[];
112
+ attributes: {
113
+ nodeType: NodeType;
114
+ [key: string]: string;
115
+ };
116
+ isOrderSensitive?: boolean;
117
+ containerPaths?: any[];
118
+ allPaths?: any[];
119
+ };
120
+ export interface LocateResult {
121
+ element: LocateResultElement | null;
122
+ rect?: Rect;
123
+ }
124
+ export interface InsightTaskInfo {
125
+ durationMs: number;
126
+ formatResponse?: string;
127
+ rawResponse?: string;
128
+ usage?: AIUsageInfo;
129
+ searchArea?: Rect;
130
+ searchAreaRawResponse?: string;
131
+ searchAreaUsage?: AIUsageInfo;
132
+ }
133
+ export interface DumpMeta {
134
+ logTime: number;
135
+ }
136
+ export interface ReportDumpWithAttributes {
137
+ dumpString: string;
138
+ attributes?: Record<string, any>;
139
+ }
140
+ export interface InsightDump extends DumpMeta {
141
+ type: 'locate' | 'extract' | 'assert';
142
+ logId: string;
143
+ userQuery: {
144
+ element?: TUserPrompt;
145
+ dataDemand?: InsightExtractParam;
146
+ assertion?: TUserPrompt;
147
+ };
148
+ matchedElement: BaseElement[];
149
+ matchedRect?: Rect;
150
+ deepThink?: boolean;
151
+ data: any;
152
+ assertionPass?: boolean;
153
+ assertionThought?: string;
154
+ taskInfo: InsightTaskInfo;
155
+ error?: string;
156
+ output?: any;
157
+ }
158
+ export type PartialInsightDumpFromSDK = Omit<InsightDump, 'logTime' | 'logId' | 'model_name'>;
159
+ export type DumpSubscriber = (dump: InsightDump) => Promise<void> | void;
160
+ export interface LiteUISection {
161
+ name: string;
162
+ description: string;
163
+ sectionCharacteristics: string;
164
+ textIds: string[];
165
+ }
166
+ export type ElementById = (id: string) => BaseElement | null;
167
+ export type InsightAssertionResponse = AIAssertionResponse & {
168
+ usage?: AIUsageInfo;
169
+ };
170
+ /**
171
+ * agent
172
+ */
173
+ export type OnTaskStartTip = (tip: string) => Promise<void> | void;
174
+ export interface AgentWaitForOpt {
175
+ checkIntervalMs?: number;
176
+ timeoutMs?: number;
177
+ }
178
+ export interface AgentAssertOpt {
179
+ keepRawResponse?: boolean;
180
+ }
181
+ /**
182
+ * planning
183
+ *
184
+ */
185
+ export interface PlanningLocateParam extends DetailedLocateParam {
186
+ id?: string;
187
+ bbox?: [number, number, number, number];
188
+ }
189
+ export interface PlanningAction<ParamType = any> {
190
+ thought?: string;
191
+ type: string;
192
+ param: ParamType;
193
+ locate?: PlanningLocateParam | null;
194
+ }
195
+ export interface PlanningAIResponse {
196
+ action?: PlanningAction;
197
+ actions?: PlanningAction[];
198
+ more_actions_needed_by_instruction: boolean;
199
+ log: string;
200
+ sleep?: number;
201
+ error?: string;
202
+ usage?: AIUsageInfo;
203
+ rawResponse?: string;
204
+ yamlFlow?: RpasceneYamlFlowItem[];
205
+ yamlString?: string;
206
+ }
207
+ export type PlanningActionParamTap = null;
208
+ export type PlanningActionParamHover = null;
209
+ export type PlanningActionParamRightClick = null;
210
+ export interface PlanningActionParamInputOrKeyPress {
211
+ value: string;
212
+ autoDismissKeyboard?: boolean;
213
+ }
214
+ export interface PlanningActionParamSleep {
215
+ timeMs: number;
216
+ }
217
+ export interface PlanningActionParamError {
218
+ thought: string;
219
+ }
220
+ export type PlanningActionParamWaitFor = AgentWaitForOpt & {};
221
+ export interface AndroidLongPressParam {
222
+ duration?: number;
223
+ }
224
+ export interface AndroidPullParam {
225
+ direction: 'up' | 'down';
226
+ distance?: number;
227
+ duration?: number;
228
+ }
229
+ /**
230
+ * misc
231
+ */
232
+ export interface Color {
233
+ name: string;
234
+ hex: string;
235
+ }
236
+ export interface BaseAgentParserOpt {
237
+ selector?: string;
238
+ }
239
+ export interface PuppeteerParserOpt extends BaseAgentParserOpt {
240
+ }
241
+ export interface PlaywrightParserOpt extends BaseAgentParserOpt {
242
+ }
243
+ export interface ExecutionTaskProgressOptions {
244
+ onTaskStart?: (task: ExecutionTask) => Promise<void> | void;
245
+ }
246
+ export interface ExecutionRecorderItem {
247
+ type: 'screenshot';
248
+ ts: number;
249
+ screenshot?: string;
250
+ timing?: string;
251
+ }
252
+ export type ExecutionTaskType = 'Planning' | 'Insight' | 'Action' | 'Assertion' | 'Log';
253
+ export interface ExecutorContext {
254
+ task: ExecutionTask;
255
+ element?: LocateResultElement | null;
256
+ }
257
+ export interface ExecutionTaskApply<Type extends ExecutionTaskType = any, TaskParam = any, TaskOutput = any, TaskLog = any> {
258
+ type: Type;
259
+ subType?: string;
260
+ param?: TaskParam;
261
+ thought?: string;
262
+ locate?: PlanningLocateParam | null;
263
+ uiContext?: UIContext;
264
+ executor: (param: TaskParam, context: ExecutorContext) => Promise<ExecutionTaskReturn<TaskOutput, TaskLog> | undefined | void> | undefined | void;
265
+ }
266
+ export interface ExecutionTaskHitBy {
267
+ from: string;
268
+ context: Record<string, any>;
269
+ }
270
+ export interface ExecutionTaskReturn<TaskOutput = unknown, TaskLog = unknown> {
271
+ output?: TaskOutput;
272
+ log?: TaskLog;
273
+ recorder?: ExecutionRecorderItem[];
274
+ hitBy?: ExecutionTaskHitBy;
275
+ }
276
+ export type ExecutionTask<E extends ExecutionTaskApply<any, any, any> = ExecutionTaskApply<any, any, any>> = E & ExecutionTaskReturn<E extends ExecutionTaskApply<any, any, infer TaskOutput, any> ? TaskOutput : unknown, E extends ExecutionTaskApply<any, any, any, infer TaskLog> ? TaskLog : unknown> & {
277
+ status: 'pending' | 'running' | 'finished' | 'failed' | 'cancelled';
278
+ error?: Error;
279
+ errorMessage?: string;
280
+ errorStack?: string;
281
+ timing?: {
282
+ start: number;
283
+ end?: number;
284
+ cost?: number;
285
+ };
286
+ usage?: AIUsageInfo;
287
+ searchAreaUsage?: AIUsageInfo;
288
+ };
289
+ export interface ExecutionDump extends DumpMeta {
290
+ name: string;
291
+ description?: string;
292
+ tasks: ExecutionTask[];
293
+ aiActionContext?: string;
294
+ }
295
+ export type ExecutionTaskInsightLocateParam = PlanningLocateParam;
296
+ export interface ExecutionTaskInsightLocateOutput {
297
+ element: LocateResultElement | null;
298
+ }
299
+ export type ExecutionTaskInsightDump = InsightDump;
300
+ export type ExecutionTaskInsightLocateApply = ExecutionTaskApply<'Insight', ExecutionTaskInsightLocateParam, ExecutionTaskInsightLocateOutput, ExecutionTaskInsightDump>;
301
+ export type ExecutionTaskInsightLocate = ExecutionTask<ExecutionTaskInsightLocateApply>;
302
+ export interface ExecutionTaskInsightQueryParam {
303
+ dataDemand: InsightExtractParam;
304
+ }
305
+ export interface ExecutionTaskInsightQueryOutput {
306
+ data: any;
307
+ }
308
+ export type ExecutionTaskInsightQueryApply = ExecutionTaskApply<'Insight', ExecutionTaskInsightQueryParam, any, ExecutionTaskInsightDump>;
309
+ export type ExecutionTaskInsightQuery = ExecutionTask<ExecutionTaskInsightQueryApply>;
310
+ export interface ExecutionTaskInsightAssertionParam {
311
+ assertion: string;
312
+ }
313
+ export type ExecutionTaskInsightAssertionApply = ExecutionTaskApply<'Insight', ExecutionTaskInsightAssertionParam, InsightAssertionResponse, ExecutionTaskInsightDump>;
314
+ export type ExecutionTaskInsightAssertion = ExecutionTask<ExecutionTaskInsightAssertionApply>;
315
+ export type ExecutionTaskActionApply<ActionParam = any> = ExecutionTaskApply<'Action', ActionParam, void, void>;
316
+ export type ExecutionTaskAction = ExecutionTask<ExecutionTaskActionApply>;
317
+ export type ExecutionTaskLogApply<LogParam = {
318
+ content: string;
319
+ }> = ExecutionTaskApply<'Log', LogParam, void, void>;
320
+ export type ExecutionTaskLog = ExecutionTask<ExecutionTaskLogApply>;
321
+ export type ExecutionTaskPlanningApply = ExecutionTaskApply<'Planning', {
322
+ userInstruction: string;
323
+ }, PlanningAIResponse>;
324
+ export type ExecutionTaskPlanning = ExecutionTask<ExecutionTaskPlanningApply>;
325
+ export interface GroupedActionDump {
326
+ sdkVersion: string;
327
+ groupName: string;
328
+ groupDescription?: string;
329
+ modelBriefs: string[];
330
+ executions: ExecutionDump[];
331
+ }
332
+ export type InterfaceType = 'puppeteer' | 'playwright' | 'static' | 'chrome-extension-proxy' | 'android' | string;
333
+ export interface StreamingCodeGenerationOptions {
334
+ /** Whether to enable streaming output */
335
+ stream?: boolean;
336
+ /** Callback function to handle streaming chunks */
337
+ onChunk?: StreamingCallback;
338
+ /** Callback function to handle streaming completion */
339
+ onComplete?: (finalCode: string) => void;
340
+ /** Callback function to handle streaming errors */
341
+ onError?: (error: Error) => void;
342
+ }
343
+ export type StreamingCallback = (chunk: CodeGenerationChunk) => void;
344
+ export interface CodeGenerationChunk {
345
+ /** The incremental content chunk */
346
+ content: string;
347
+ /** The reasoning content */
348
+ reasoning_content: string;
349
+ /** The accumulated content so far */
350
+ accumulated: string;
351
+ /** Whether this is the final chunk */
352
+ isComplete: boolean;
353
+ /** Token usage information if available */
354
+ usage?: AIUsageInfo;
355
+ }
356
+ export interface StreamingAIResponse {
357
+ /** The final accumulated content */
358
+ content: string;
359
+ /** Token usage information */
360
+ usage?: AIUsageInfo;
361
+ /** Whether the response was streamed */
362
+ isStreamed: boolean;
363
+ }
364
+ export interface DeviceAction<T = any> {
365
+ name: string;
366
+ description?: string;
367
+ interfaceAlias?: string;
368
+ paramSchema?: z.ZodType<T>;
369
+ call: (param: T, context: ExecutorContext) => Promise<void> | void;
370
+ }
371
+ /**
372
+ * Web-specific types
373
+ */
374
+ export interface WebElementInfo extends BaseElement {
375
+ id: string;
376
+ attributes: {
377
+ nodeType: NodeType;
378
+ [key: string]: string;
379
+ };
380
+ }
381
+ export type WebUIContext = UIContext<WebElementInfo>;
382
+ /**
383
+ * Agent
384
+ */
385
+ export type CacheConfig = {
386
+ strategy?: 'read-only' | 'read-write' | 'write-only';
387
+ id: string;
388
+ };
389
+ export type Cache = false | true | CacheConfig;
390
+ export interface AgentOpt {
391
+ testId?: string;
392
+ cacheId?: string;
393
+ groupName?: string;
394
+ groupDescription?: string;
395
+ generateReport?: boolean;
396
+ autoPrintReportMsg?: boolean;
397
+ onTaskStartTip?: OnTaskStartTip;
398
+ aiActionContext?: string;
399
+ reportFileName?: string;
400
+ modelConfig?: TModelConfigFn;
401
+ cache?: Cache;
402
+ replanningCycleLimit?: number;
403
+ }
404
+ export type TestStatus = 'passed' | 'failed' | 'timedOut' | 'skipped' | 'interrupted';
405
+ export interface ReportFileWithAttributes {
406
+ reportFilePath: string;
407
+ reportAttributes: {
408
+ testDuration: number;
409
+ testStatus: TestStatus;
410
+ testTitle: string;
411
+ testId: string;
412
+ testDescription: string;
413
+ };
414
+ }
@@ -0,0 +1,40 @@
1
+ import type { Cache, Rect, ReportDumpWithAttributes } from './types';
2
+ export { appendFileSync } from 'node:fs';
3
+ export declare const groupedActionDumpFileExt = "web-dump.json";
4
+ /**
5
+ * Process cache configuration with environment variable support and backward compatibility.
6
+ *
7
+ * @param cache - The original cache configuration
8
+ * @param cacheId - The cache ID to use as:
9
+ * 1. Fallback ID when cache is true or cache object has no ID
10
+ * 2. Legacy cacheId when cache is undefined (requires RPASCENE_CACHE env var)
11
+ * @returns Processed cache configuration
12
+ */
13
+ export declare function processCacheConfig(cache: Cache | undefined, cacheId: string): Cache | undefined;
14
+ export declare function getReportTpl(): string;
15
+ /**
16
+ * high performance, insert script before </html> in HTML file
17
+ * only truncate and append, no temporary file
18
+ */
19
+ export declare function insertScriptBeforeClosingHtml(filePath: string, scriptContent: string): void;
20
+ export declare function reportHTMLContent(dumpData: string | ReportDumpWithAttributes, reportPath?: string, appendReport?: boolean, withTpl?: boolean): string;
21
+ export declare function writeDumpReport(fileName: string, dumpData: string | ReportDumpWithAttributes, appendReport?: boolean): string | null;
22
+ export declare function writeLogFile(opts: {
23
+ fileName: string;
24
+ fileExt: string;
25
+ fileContent: string | ReportDumpWithAttributes;
26
+ type: 'dump' | 'cache' | 'report' | 'tmp';
27
+ generateReport?: boolean;
28
+ appendReport?: boolean;
29
+ }): string | null;
30
+ export declare function getTmpDir(): string | null;
31
+ export declare function getTmpFile(fileExtWithoutDot: string): string | null;
32
+ export declare function overlapped(container: Rect, target: Rect): boolean;
33
+ export declare function sleep(ms: number): Promise<unknown>;
34
+ export declare function replacerForPageObject(_key: string, value: any): any;
35
+ export declare function stringifyDumpData(data: any, indents?: number): string;
36
+ export declare function getVersion(): string;
37
+ export declare function uploadTestInfoToServer({ testUrl, serverUrl, }: {
38
+ testUrl: string;
39
+ serverUrl?: string;
40
+ }): void;
@@ -0,0 +1,2 @@
1
+ import type { RpasceneYamlScriptWebEnv, RpasceneYamlTask } from '../types';
2
+ export declare function buildYaml(env: RpasceneYamlScriptWebEnv, tasks: RpasceneYamlTask[]): string;
@@ -0,0 +1,3 @@
1
+ export * from './player';
2
+ export * from './builder';
3
+ export * from './utils';
@@ -0,0 +1,34 @@
1
+ import type { Agent } from '../agent/agent';
2
+ import type { FreeFn, RpasceneYamlScript, RpasceneYamlScriptEnv, ScriptPlayerStatusValue, ScriptPlayerTaskStatus } from '../types';
3
+ export declare class ScriptPlayer<T extends RpasceneYamlScriptEnv> {
4
+ private script;
5
+ private setupAgent;
6
+ onTaskStatusChange?: ((taskStatus: ScriptPlayerTaskStatus) => void) | undefined;
7
+ currentTaskIndex?: number;
8
+ taskStatusList: ScriptPlayerTaskStatus[];
9
+ status: ScriptPlayerStatusValue;
10
+ reportFile?: string | null;
11
+ result: Record<string, any>;
12
+ private unnamedResultIndex;
13
+ output?: string | null;
14
+ unstableLogContent?: string | null;
15
+ errorInSetup?: Error;
16
+ private interfaceAgent;
17
+ agentStatusTip?: string;
18
+ target?: RpasceneYamlScriptEnv;
19
+ private actionSpace;
20
+ private scriptPath?;
21
+ constructor(script: RpasceneYamlScript, setupAgent: (platform: T) => Promise<{
22
+ agent: Agent;
23
+ freeFn: FreeFn[];
24
+ }>, onTaskStatusChange?: ((taskStatus: ScriptPlayerTaskStatus) => void) | undefined, scriptPath?: string);
25
+ private setResult;
26
+ private setPlayerStatus;
27
+ private notifyCurrentTaskStatusChange;
28
+ private setTaskStatus;
29
+ private setTaskIndex;
30
+ private flushResult;
31
+ private flushUnstableLogContent;
32
+ playTask(taskStatus: ScriptPlayerTaskStatus, agent: Agent): Promise<void>;
33
+ run(): Promise<void>;
34
+ }
@@ -0,0 +1,9 @@
1
+ import type { TUserPrompt } from '../ai-model/common';
2
+ import type { DetailedLocateParam, LocateOption, RpasceneYamlScript } from '../types';
3
+ export declare function interpolateEnvVars(content: string): string;
4
+ export declare function parseYamlScript(content: string, filePath?: string): RpasceneYamlScript;
5
+ export declare function buildDetailedLocateParam(locatePrompt: TUserPrompt, opt?: LocateOption): DetailedLocateParam | undefined;
6
+ export declare function buildDetailedLocateParamAndRestParams(locatePrompt: TUserPrompt, opt: LocateOption | undefined, excludeKeys?: string[]): {
7
+ locateParam: DetailedLocateParam | undefined;
8
+ restParams: Record<string, any>;
9
+ };