@beeos-ai/device-agent 0.9.5 → 0.9.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 (36) hide show
  1. package/dist/config/schema.js +14 -6
  2. package/dist/config/schema.js.map +1 -1
  3. package/dist/inbound/cli/main.js +2 -2
  4. package/dist/inbound/cli/run-command.js +13 -1
  5. package/dist/inbound/cli/run-command.js.map +1 -1
  6. package/dist/messaging/token-provider.d.ts +15 -14
  7. package/dist/messaging/token-provider.js +16 -16
  8. package/dist/messaging/token-provider.js.map +1 -1
  9. package/dist/model/adapters/guiowl.js +3 -2
  10. package/dist/model/adapters/guiowl.js.map +1 -1
  11. package/dist/model/adapters/maiui.js +80 -53
  12. package/dist/model/adapters/maiui.js.map +1 -1
  13. package/dist/model/adapters/qwenvl.js +147 -51
  14. package/dist/model/adapters/qwenvl.js.map +1 -1
  15. package/dist/model/adapters/tool-call.js +13 -3
  16. package/dist/model/adapters/tool-call.js.map +1 -1
  17. package/dist/model/adapters/uitars.js +80 -84
  18. package/dist/model/adapters/uitars.js.map +1 -1
  19. package/dist/plugins/message-bus/busy-reply.d.ts +5 -5
  20. package/dist/plugins/message-bus/busy-reply.js +30 -9
  21. package/dist/plugins/message-bus/busy-reply.js.map +1 -1
  22. package/dist/plugins/message-bus/cancel.d.ts +5 -11
  23. package/dist/plugins/message-bus/cancel.js +8 -14
  24. package/dist/plugins/message-bus/cancel.js.map +1 -1
  25. package/dist/plugins/message-bus/inbound.d.ts +18 -25
  26. package/dist/plugins/message-bus/inbound.js +23 -55
  27. package/dist/plugins/message-bus/inbound.js.map +1 -1
  28. package/dist/plugins/message-bus/index.d.ts +25 -44
  29. package/dist/plugins/message-bus/index.js +81 -111
  30. package/dist/plugins/message-bus/index.js.map +1 -1
  31. package/dist/plugins/message-bus/ms-channel-notifier.d.ts +24 -37
  32. package/dist/plugins/message-bus/ms-channel-notifier.js +39 -59
  33. package/dist/plugins/message-bus/ms-channel-notifier.js.map +1 -1
  34. package/dist/resources/parsers.js +17 -0
  35. package/dist/resources/parsers.js.map +1 -1
  36. package/package.json +2 -2
@@ -1,84 +1,168 @@
1
1
  import { ModelAdapter, registerAdapter } from "./base.js";
2
2
  import { parseToolCall } from "./tool-call.js";
3
3
  // Qwen-VL adapter
4
- // Output: <tool_call>{"name":"mobile_use","arguments":{...}}</tool_call>
5
- // Always rebuilds: 1 system + 1 user message (no multi-turn context)
6
- // Coordinates: 0–999 normalized (treated as 0-1000)
7
- const SYSTEM_PROMPT_EN = `\
8
- You are a mobile automation assistant. Given a screenshot and task history, output the next action as a tool call.
4
+ // Aligned with ClawGUI prompts_qwenvl.py (PHONE_USE_QWEN_CN / PHONE_USE_QWEN_EN)
5
+ //
6
+ // Message structure (mirrors ClawGUI exactly):
7
+ // Always 2 messages: [system(XML tools schema), user(text then image)]
8
+ // No multi-turn accumulation; action history injected as text.
9
+ //
10
+ // Output format expected:
11
+ // Thought: <one sentence>
12
+ // Action: <one sentence>
13
+ // <tool_call>{"name":"mobile_use","arguments":{...}}</tool_call>
14
+ //
15
+ // Coordinates: 0–999 normalized (resolution declared as 999x999 in schema)
16
+ const TOOL_SCHEMA = JSON.stringify({
17
+ type: "function",
18
+ function: {
19
+ name_for_human: "mobile_use",
20
+ name: "mobile_use",
21
+ description: "Use a touchscreen to interact with a mobile device, and take screenshots.\n" +
22
+ "* This is an interface to a mobile device with touchscreen. You can perform actions like clicking, typing, swiping, etc.\n" +
23
+ "* Some applications may take time to start or process actions, so you may need to wait and take successive screenshots to see the results of your actions.\n" +
24
+ "* The screen's resolution is 999x999.\n" +
25
+ "* Make sure to click any buttons, links, icons, etc with the cursor tip in the center of the element. Don't click boxes on their edges unless asked.",
26
+ parameters: {
27
+ properties: {
28
+ action: {
29
+ description: "The action to perform. The available actions are:\n" +
30
+ "* `click`: Click the point on the screen with coordinate (x, y).\n" +
31
+ "* `long_press`: Press the point on the screen with coordinate (x, y) for specified seconds.\n" +
32
+ "* `swipe`: Swipe from the starting point with coordinate (x, y) to the end point with coordinates2 (x2, y2).\n" +
33
+ "* `type`: Input the specified text into the activated input box.\n" +
34
+ "* `answer`: Output the answer.\n" +
35
+ "* `system_button`: Press the system button.\n" +
36
+ "* `open_app`: Open the specified application.\n" +
37
+ "* `wait`: Wait specified seconds for the change to happen.\n" +
38
+ "* `terminate`: Terminate the current task and report its completion status.",
39
+ enum: ["click", "long_press", "swipe", "type", "answer", "system_button", "open_app", "wait", "terminate"],
40
+ type: "string",
41
+ },
42
+ coordinate: {
43
+ description: "(x, y): The x (pixels from the left edge) and y (pixels from the top edge) coordinates to move the mouse to. Required only by `action=click`, `action=long_press`, and `action=swipe`.",
44
+ type: "array",
45
+ },
46
+ coordinate2: {
47
+ description: "(x, y): The x (pixels from the left edge) and y (pixels from the top edge) coordinates to move the mouse to. Required only by `action=swipe`.",
48
+ type: "array",
49
+ },
50
+ text: {
51
+ description: "Required only by `action=type` and `action=answer`.",
52
+ type: "string",
53
+ },
54
+ time: {
55
+ description: "The seconds to wait. Required only by `action=long_press` and `action=wait`.",
56
+ type: "number",
57
+ },
58
+ button: {
59
+ description: "Back means returning to the previous interface, Home means returning to the desktop, Menu means opening the application background menu, and Enter means pressing the enter. Required only by `action=system_button`",
60
+ enum: ["Back", "Home", "Menu", "Enter"],
61
+ type: "string",
62
+ },
63
+ status: {
64
+ description: "The status of the task. Required only by `action=terminate`.",
65
+ type: "string",
66
+ enum: ["success", "failure"],
67
+ },
68
+ app_name: {
69
+ description: "The name of the app to open. Required only by `action=open_app`.",
70
+ type: "string",
71
+ },
72
+ },
73
+ required: ["action"],
74
+ type: "object",
75
+ },
76
+ },
77
+ });
78
+ const SYSTEM_PROMPT_CN = `# 工具
9
79
 
10
- Use the mobile_use tool:
80
+ 你可以调用一个或多个函数来辅助完成用户的请求。
81
+
82
+ 可用的函数签名定义在 <tools></tools> XML 标签中:
83
+ <tools>
84
+ ${TOOL_SCHEMA}
85
+ </tools>
86
+
87
+ 每次调用函数时,请在 <tool_call></tool_call> XML 标签中返回一个包含函数名和参数的 JSON 对象:
11
88
  <tool_call>
12
- {"name": "mobile_use", "arguments": {"action": "<action>", ...}}
89
+ {"name": <函数名>, "arguments": <参数JSON对象>}
13
90
  </tool_call>
14
91
 
15
- Actions:
16
- - tap: {"action":"tap","coordinate":[x,y]}
17
- - long_press: {"action":"long_press","coordinate":[x,y]}
18
- - swipe: {"action":"swipe","start_coordinate":[x,y],"end_coordinate":[x,y]}
19
- - type: {"action":"type","text":"..."}
20
- - press_back: {"action":"press_back"}
21
- - press_home: {"action":"press_home"}
22
- - open_app: {"action":"open_app","text":"App Name"}
23
- - wait: {"action":"wait"}
24
- - finish: {"action":"finish","text":"reason"}
92
+ # 响应格式
93
+
94
+ 每一步的响应格式:
95
+ 1) Thought(思考):用一句简洁的话解释下一步操作(不要进行多步推理)。
96
+ 2) Action(动作):用一句简短的祈使句描述要在界面上执行的操作。
97
+ 3) 一个 <tool_call>...</tool_call> 代码块,其中只包含 JSON:{"name": <函数名>, "arguments": <参数JSON对象>}。
98
+
99
+ 规则:
100
+ - 严格按照 Thought、Action、<tool_call> 的顺序输出。
101
+ - 保持简洁:Thought 一句话,Action 一句话。
102
+ - 不要在这三部分之外输出任何其他内容。
103
+ - 如果任务完成,请在 tool_call 中使用 action=terminate。`;
104
+ const SYSTEM_PROMPT_EN = `# Tools
105
+
106
+ You can call one or more functions to assist with the user's request.
25
107
 
26
- Coordinates are 0–999 (relative to screen dimensions).`;
27
- const SYSTEM_PROMPT_CN = `\
28
- 你是一个手机自动化助手。根据截图和历史操作,输出下一个动作的工具调用。
108
+ The available function signatures are defined within <tools></tools> XML tags:
109
+ <tools>
110
+ ${TOOL_SCHEMA}
111
+ </tools>
29
112
 
30
- 使用 mobile_use 工具:
113
+ Each time you call a function, return a JSON object containing the function name and arguments within <tool_call></tool_call> XML tags:
31
114
  <tool_call>
32
- {"name": "mobile_use", "arguments": {"action": "<动作>", ...}}
115
+ {"name": <function_name>, "arguments": <arguments_json_object>}
33
116
  </tool_call>
34
117
 
35
- 动作列表:
36
- - tap: {"action":"tap","coordinate":[x,y]}
37
- - long_press: {"action":"long_press","coordinate":[x,y]}
38
- - swipe: {"action":"swipe","start_coordinate":[x,y],"end_coordinate":[x,y]}
39
- - type: {"action":"type","text":"..."}
40
- - press_back: {"action":"press_back"}
41
- - press_home: {"action":"press_home"}
42
- - open_app: {"action":"open_app","text":"App名称"}
43
- - wait: {"action":"wait"}
44
- - finish: {"action":"finish","text":"原因"}
118
+ # Response Format
45
119
 
46
- 坐标范围 0–999(相对屏幕尺寸)。`;
120
+ Response format for each step:
121
+ 1) Thought: Explain the next action in one concise sentence (do not perform multi-step reasoning).
122
+ 2) Action: Describe the UI operation to perform in one short imperative sentence.
123
+ 3) A <tool_call>...</tool_call> code block containing only JSON: {"name": <function_name>, "arguments": <arguments_json_object>}.
124
+
125
+ Rules:
126
+ - Strictly output in the order of Thought, Action, <tool_call>.
127
+ - Keep it concise: one sentence for Thought, one sentence for Action.
128
+ - Do not output anything beyond these three parts.
129
+ - If the task is completed, use action=terminate in the tool_call.`;
47
130
  class QwenVLAdapter extends ModelAdapter {
48
131
  name = "qwenvl";
49
132
  patterns = [/qwen.*vl/, /qwen2.*vl/, /qvq/, /qwen-vl/];
50
133
  actionHistory = [];
51
- buildMessages(task, screenInfo, context, isFirst, lang) {
134
+ buildMessages(task, screenInfo, _context, _isFirst, lang) {
52
135
  const systemPrompt = lang === "cn" ? SYSTEM_PROMPT_CN : SYSTEM_PROMPT_EN;
53
- // Build single user message with task + history + screenshot
54
- const historyText = this.actionHistory.length > 0
55
- ? `\n\nAction history:\n${this.actionHistory.map((a, i) => `${i + 1}. ${a}`).join("\n")}`
56
- : "";
57
- const taskText = isFirst
58
- ? `Task: ${task}${historyText}`
59
- : `Task: ${task}${historyText}\n\nWhat is the next action?`;
60
- const content = [];
136
+ // Build user query: task + history (ClawGUI format)
137
+ const userQuery = buildUserQuery(task, this.actionHistory);
138
+ // Text first, image second — matches ClawGUI
139
+ const content = [
140
+ { type: "text", text: userQuery },
141
+ ];
61
142
  if (screenInfo.imageRef) {
62
143
  content.push({ type: "image_url", image_url: { url: screenInfo.imageRef.url } });
63
144
  }
64
- content.push({ type: "text", text: taskText });
65
145
  return [
66
- { role: "system", content: systemPrompt },
146
+ { role: "system", content: [{ type: "text", text: systemPrompt }] },
67
147
  { role: "user", content },
68
148
  ];
69
149
  }
70
150
  parseResponse(raw) {
71
- const thinking = extractThinking(raw);
151
+ // Extract Thought: line as thinking
152
+ const thoughtM = raw.match(/^Thought\s*[::]\s*(.+?)(?=\nAction\s*[::]|\n<tool_call>|$)/ms);
153
+ const thinking = thoughtM ? thoughtM[1].trim() : extractThinkTag(raw);
72
154
  const toolBlock = raw.includes("<tool_call>") ? raw : `<tool_call>${raw}</tool_call>`;
73
155
  return parseToolCall(toolBlock, thinking) ?? wait(thinking);
74
156
  }
75
- updateContext(context, response, parsed) {
76
- // Record action in history for next rebuild
157
+ updateContext(_context, response, parsed) {
77
158
  if (!parsed.shouldFinish) {
78
- this.actionHistory.push(actionSummary(parsed));
159
+ // Record the Action: line from raw output as history description (ClawGUI format)
160
+ const actionLineM = response.rawContent.match(/^Action\s*[::]\s*(.+?)$/m);
161
+ const desc = actionLineM ? actionLineM[1].trim() : actionSummary(parsed);
162
+ this.actionHistory.push(desc);
79
163
  }
80
- // QwenVL always rebuilds messages, so context is not used for multi-turn
81
- return context;
164
+ // QwenVL always rebuilds messages; context is not accumulated
165
+ return _context;
82
166
  }
83
167
  clearHistory() {
84
168
  this.actionHistory = [];
@@ -86,7 +170,19 @@ class QwenVLAdapter extends ModelAdapter {
86
170
  }
87
171
  registerAdapter(new QwenVLAdapter());
88
172
  // ── Helpers ──────────────────────────────────────────────────────────────────
89
- function extractThinking(raw) {
173
+ function buildUserQuery(task, history) {
174
+ // Mirrors ClawGUI build_qwenvl_user_query exactly:
175
+ // "The user query: {task}.\nTask progress: Step 1: xxx; Step 2: yyy;\n"
176
+ let query = `The user query: ${task}.\n`;
177
+ if (history.length > 0) {
178
+ const progress = history
179
+ .map((h, i) => `Step ${i + 1}: ${h.replace(/\n/g, "").replace(/"/g, "")};`)
180
+ .join(" ");
181
+ query += `Task progress (You have done the following operation on the current device): ${progress}\n`;
182
+ }
183
+ return query;
184
+ }
185
+ function extractThinkTag(raw) {
90
186
  const m = raw.match(/<think(?:ing)?>([\s\S]*?)<\/think(?:ing)?>/i);
91
187
  return m ? m[1].trim() : "";
92
188
  }
@@ -1 +1 @@
1
- {"version":3,"file":"qwenvl.js","sourceRoot":"","sources":["../../../src/model/adapters/qwenvl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qwenvl.js","sourceRoot":"","sources":["../../../src/model/adapters/qwenvl.ts"],"names":[],"mappings":"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"}
@@ -52,8 +52,7 @@ export function argsToAction(args, thinking) {
52
52
  }
53
53
  if (action === "swipe" && coord) {
54
54
  const dir = String(args.direction ?? "down");
55
- const distMap = { short: 150, medium: 300, long: 500 };
56
- const dist = distMap[String(args.distance ?? "medium")] ?? 300;
55
+ const dist = 300;
57
56
  const [sx, sy] = [coord[0], coord[1]];
58
57
  const [ex, ey] = dir === "up" ? [sx, sy + dist] :
59
58
  dir === "down" ? [sx, sy - dist] :
@@ -61,11 +60,18 @@ export function argsToAction(args, thinking) {
61
60
  [sx - dist, sy];
62
61
  return done("swipe", { start_x: sx, start_y: sy, end_x: ex, end_y: ey }, thinking);
63
62
  }
63
+ if (action === "drag") {
64
+ const sc = startCoord ?? coord;
65
+ const ec = endCoord;
66
+ if (sc && ec) {
67
+ return done("swipe", { start_x: sc[0], start_y: sc[1], end_x: ec[0], end_y: ec[1] }, thinking);
68
+ }
69
+ }
64
70
  if (action === "type") {
65
71
  return done("type", { text: String(args.text ?? "") }, thinking);
66
72
  }
67
73
  if (action === "open_app" || action === "open") {
68
- return done("open_app", { app_name: String(args.text ?? args.app_name ?? "") }, thinking);
74
+ return done("open_app", { app_name: String(args.app_name ?? args.text ?? "") }, thinking);
69
75
  }
70
76
  if (action === "press_back" || action === "back") {
71
77
  return done("press_back", {}, thinking);
@@ -90,6 +96,10 @@ export function argsToAction(args, thinking) {
90
96
  const key = String(args.text ?? args.key ?? "").trim();
91
97
  return done("press_key", { key: key.startsWith("KEYCODE_") ? key : `KEYCODE_${key.toUpperCase()}` }, thinking);
92
98
  }
99
+ if (action === "interact") {
100
+ const msg = String(args.text ?? args.message ?? "User interaction required");
101
+ return done("takeover", { message: msg }, thinking);
102
+ }
93
103
  if (action === "wait") {
94
104
  const time = Number(args.time ?? args.duration_seconds ?? 2);
95
105
  return done("wait", { duration_seconds: time }, thinking);
@@ -1 +1 @@
1
- {"version":3,"file":"tool-call.js","sourceRoot":"","sources":["../../../src/model/adapters/tool-call.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-call.js","sourceRoot":"","sources":["../../../src/model/adapters/tool-call.ts"],"names":[],"mappings":"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"}
@@ -1,107 +1,75 @@
1
1
  import { ModelAdapter, registerAdapter } from "./base.js";
2
2
  // UITars / Doubao-1.5-UI-TARS adapter
3
- // Output format: "Thought: ...\nAction: click(point='<point>x y</point>')"
3
+ // Aligned with ClawGUI prompts_uitars.py (PHONE_USE_DOUBAO template)
4
+ //
5
+ // Message structure (mirrors ClawGUI exactly):
6
+ // First turn : [user(text=systemPrompt+task, image)] — no system role
7
+ // Subsequent : [...context, user(image only)]
8
+ // assistant : raw model output appended by updateContext
9
+ // Image window: max 5 (pruned in updateContext)
10
+ //
4
11
  // Coordinate system: smart_resize (normalized to IMAGE_FACTOR=28 grid)
5
12
  const MAX_IMAGES = 5;
6
- const SYSTEM_PROMPT_EN = `\
7
- You are a GUI agent. You receive a screenshot and decide the next action.
13
+ function buildSystemPrompt(task, lang) {
14
+ const language = lang === "cn" ? "Chinese" : "English";
15
+ return `You are a GUI agent. You are given a task and your action history, with screenshots. You need to perform the next action to complete the task.
8
16
 
9
- Output format (always two lines):
10
- Thought: <brief reasoning>
11
- Action: <one action call>
17
+ ## Output Format
18
+ \`\`\`
19
+ Thought: ...
20
+ Action: ...
21
+ \`\`\`
12
22
 
13
- Available actions:
14
- - click(point='<point>x y</point>')
15
- - long_press(point='<point>x y</point>')
16
- - double_click(point='<point>x y</point>')
17
- - type(content='text')
18
- - scroll(point='<point>x y</point>', direction='up|down|left|right', dist='short|medium|long')
19
- - press_back()
20
- - press_home()
21
- - open_app(app_name='App')
22
- - wait()
23
- - finish(message='...')
23
+ ## Action Space
24
+ click(point='<point>x1 y1</point>')
25
+ long_press(point='<point>x1 y1</point>')
26
+ type(content='') #If you want to submit your input, use "\\n" at the end of \`content\`.
27
+ scroll(point='<point>x1 y1</point>', direction='down or up or right or left')
28
+ open_app(app_name='')
29
+ drag(start_point='<point>x1 y1</point>', end_point='<point>x2 y2</point>')
30
+ press_home()
31
+ press_back()
32
+ finished(content='xxx') # Use escape characters \\', \\", and \\n in content part to ensure we can parse the content in normal python string format.
24
33
 
25
- Coordinates are in smart_resize space (relative to resized image grid).`;
26
- const SYSTEM_PROMPT_CN = `\
27
- 你是一个 GUI 自动化 Agent。你会收到截图,决定下一步操作。
34
+ ## Note
35
+ - Use ${language} in \`Thought\` part.
36
+ - Write a small plan and finally summarize your next action (with its target element) in one sentence in \`Thought\` part.
28
37
 
29
- 输出格式(固定两行):
30
- Thought: <简短推理>
31
- Action: <一个动作调用>
32
-
33
- 可用动作:
34
- - click(point='<point>x y</point>')
35
- - long_press(point='<point>x y</point>')
36
- - double_click(point='<point>x y</point>')
37
- - type(content='text')
38
- - scroll(point='<point>x y</point>', direction='up|down|left|right', dist='short|medium|long')
39
- - press_back()
40
- - press_home()
41
- - open_app(app_name='App')
42
- - wait()
43
- - finish(message='...')
44
-
45
- 坐标为 smart_resize 空间(相对于缩放后的图像网格)。`;
38
+ ## User Instruction
39
+ ${task}`;
40
+ }
46
41
  class UITarsAdapter extends ModelAdapter {
47
42
  name = "uitars";
48
43
  patterns = [/uitars/, /ui[-_]?tars/, /doubao.*ui/, /ui.*tars/];
49
- // Sliding window of recent image URLs (data:* or signed https). Kept
50
- // for parity with the reference agent's MAX_IMAGES window — currently
51
- // not replayed into the prompt because the live `context` already
52
- // carries vision parts; future turn-rewinding logic will read this.
53
- imageHistory = [];
54
44
  buildMessages(task, screenInfo, context, isFirst, lang) {
55
- const systemPrompt = lang === "cn" ? SYSTEM_PROMPT_CN : SYSTEM_PROMPT_EN;
56
- if (screenInfo.imageRef) {
57
- this.imageHistory.push(screenInfo.imageRef.url);
58
- if (this.imageHistory.length > MAX_IMAGES) {
59
- this.imageHistory.shift();
60
- }
61
- }
62
- const msgs = [{ role: "system", content: systemPrompt }];
63
45
  if (isFirst) {
64
- const content = [];
46
+ // System prompt embedded in the first user message (no system role).
47
+ // Text first, image second — matches ClawGUI.
48
+ const content = [
49
+ { type: "text", text: buildSystemPrompt(task, lang) },
50
+ ];
65
51
  if (screenInfo.imageRef) {
66
52
  content.push({ type: "image_url", image_url: { url: screenInfo.imageRef.url } });
67
53
  }
68
- content.push({ type: "text", text: `Task: ${task}` });
69
- msgs.push({ role: "user", content });
54
+ return [{ role: "user", content }];
70
55
  }
71
- else {
72
- // Subsequent turns: rebuild with sliding window of images
73
- // Replay context without images, then add current screenshot
74
- const textOnlyContext = context.map((m) => {
75
- if (Array.isArray(m.content)) {
76
- const textParts = m.content
77
- .filter((p) => p.type === "text");
78
- const stripped = textParts.length === 1 && typeof textParts[0].text === "string"
79
- ? textParts[0].text
80
- : textParts;
81
- return { ...m, content: stripped };
82
- }
83
- return m;
84
- });
85
- msgs.push(...textOnlyContext);
86
- const content = [];
87
- if (screenInfo.imageRef) {
88
- content.push({ type: "image_url", image_url: { url: screenInfo.imageRef.url } });
89
- }
90
- content.push({ type: "text", text: "Current screen. What is the next action?" });
91
- msgs.push({ role: "user", content });
56
+ // Subsequent turns: append image-only user message to accumulated context.
57
+ const content = [];
58
+ if (screenInfo.imageRef) {
59
+ content.push({ type: "image_url", image_url: { url: screenInfo.imageRef.url } });
92
60
  }
93
- return msgs;
61
+ return [...context, { role: "user", content }];
94
62
  }
95
63
  parseResponse(raw) {
96
64
  const [thinking, actionStr] = splitThoughtAction(raw);
97
65
  return parseUITarsAction(actionStr, thinking);
98
66
  }
99
- updateContext(context, response, parsed) {
67
+ updateContext(context, response, _parsed) {
100
68
  context.push({ role: "assistant", content: response.rawContent });
101
- return context;
69
+ return pruneImages(context, MAX_IMAGES);
102
70
  }
103
71
  clearHistory() {
104
- this.imageHistory = [];
72
+ // Context is reset externally (OpenAIAdapter clears on new run).
105
73
  }
106
74
  }
107
75
  registerAdapter(new UITarsAdapter());
@@ -114,7 +82,6 @@ function splitThoughtAction(raw) {
114
82
  return [thinking, action];
115
83
  }
116
84
  function parsePoint(s) {
117
- // <point>x y</point> or plain "x y"
118
85
  const m = s.match(/<point>\s*(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?)\s*<\/point>/) ??
119
86
  s.match(/(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?)/);
120
87
  if (!m)
@@ -129,7 +96,8 @@ function parseUITarsAction(s, thinking) {
129
96
  const make = (actionType, params, shouldFinish = false, finishMessage = null) => ({ actionType, params, thinking, coordSystem: "smart_resize", shouldFinish, finishMessage });
130
97
  const trimmed = s.replace(/^```[a-z]*\s*/i, "").replace(/```$/, "").trim();
131
98
  if (trimmed.startsWith("finish")) {
132
- const msg = parseKeyword(trimmed, "message") ?? trimmed;
99
+ // Handles both finish(message=...) and finished(content=...)
100
+ const msg = parseKeyword(trimmed, "content") ?? parseKeyword(trimmed, "message") ?? trimmed;
133
101
  return make("finish", { message: msg }, true, msg);
134
102
  }
135
103
  if (trimmed.startsWith("click")) {
@@ -150,6 +118,13 @@ function parseUITarsAction(s, thinking) {
150
118
  if (pt)
151
119
  return make("double_tap", { x: pt[0], y: pt[1] });
152
120
  }
121
+ if (trimmed.startsWith("drag")) {
122
+ const startStr = parseKeyword(trimmed, "start_point") ?? "";
123
+ const endStr = parseKeyword(trimmed, "end_point") ?? "";
124
+ const start = parsePoint(startStr) ?? [500, 300];
125
+ const end = parsePoint(endStr) ?? [500, 700];
126
+ return make("swipe", { start_x: start[0], start_y: start[1], end_x: end[0], end_y: end[1] });
127
+ }
153
128
  if (trimmed.startsWith("type")) {
154
129
  const text = parseKeyword(trimmed, "content") ?? parseKeyword(trimmed, "text") ?? "";
155
130
  return make("type", { text });
@@ -158,11 +133,12 @@ function parseUITarsAction(s, thinking) {
158
133
  const pointStr = parseKeyword(trimmed, "point") ?? "";
159
134
  const pt = parsePoint(pointStr) ?? [500, 500];
160
135
  const dir = parseKeyword(trimmed, "direction") ?? "down";
161
- const distStr = parseKeyword(trimmed, "dist") ?? "medium";
162
- const distMap = { short: 200, medium: 400, long: 700 };
163
- const dist = distMap[distStr] ?? 400;
136
+ const dist = 300;
164
137
  const [sx, sy] = [pt[0], pt[1]];
165
- const [ex, ey] = dir === "up" ? [sx, sy - dist] : dir === "down" ? [sx, sy + dist] : dir === "left" ? [sx - dist, sy] : [sx + dist, sy];
138
+ const [ex, ey] = dir === "up" ? [sx, sy + dist] :
139
+ dir === "down" ? [sx, sy - dist] :
140
+ dir === "left" ? [sx + dist, sy] :
141
+ [sx - dist, sy];
166
142
  return make("swipe", { start_x: sx, start_y: sy, end_x: ex, end_y: ey });
167
143
  }
168
144
  if (trimmed.startsWith("press_back"))
@@ -177,4 +153,24 @@ function parseUITarsAction(s, thinking) {
177
153
  return make("wait", { duration_seconds: 2 });
178
154
  return make("wait", { duration_seconds: 2 });
179
155
  }
156
+ function pruneImages(context, keepCount) {
157
+ let imageCount = 0;
158
+ for (let i = context.length - 1; i >= 0; i--) {
159
+ const msg = context[i];
160
+ if (Array.isArray(msg.content)) {
161
+ const parts = msg.content;
162
+ const hasImage = parts.some((p) => p.type === "image_url");
163
+ if (hasImage) {
164
+ imageCount++;
165
+ if (imageCount > keepCount) {
166
+ context[i] = {
167
+ ...msg,
168
+ content: parts.filter((p) => p.type !== "image_url"),
169
+ };
170
+ }
171
+ }
172
+ }
173
+ }
174
+ return context;
175
+ }
180
176
  //# sourceMappingURL=uitars.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"uitars.js","sourceRoot":"","sources":["../../../src/model/adapters/uitars.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uitars.js","sourceRoot":"","sources":["../../../src/model/adapters/uitars.ts"],"names":[],"mappings":"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"}