@loadmill/droid-cua 2.0.0 → 2.0.4
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.
- package/README.md +1 -1
- package/build/src/cli/device-selector.js +7 -2
- package/build/src/core/prompts.js +12 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ Under the hood, `droid-cua` uses an AI agent to explore your app, execute action
|
|
|
38
38
|
|
|
39
39
|
**1. Download the desktop app**
|
|
40
40
|
|
|
41
|
-
Get the latest stable desktop build from [GitHub Releases](https://github.com/loadmill/droid-cua/releases).
|
|
41
|
+
Get the latest stable desktop build from [GitHub Releases](https://github.com/loadmill/droid-cua-release/releases/latest/download/Loadmill-Droid-CUA-arm64.dmg).
|
|
42
42
|
|
|
43
43
|
**2. Launch the app**
|
|
44
44
|
|
|
@@ -54,6 +54,11 @@ function renderSelection(title, items) {
|
|
|
54
54
|
* Get a unified Android list: connected ADB devices + launchable AVDs
|
|
55
55
|
*/
|
|
56
56
|
async function getAndroidDevices() {
|
|
57
|
+
const normalizeAvdName = (value) => value
|
|
58
|
+
.split(/\r?\n/)
|
|
59
|
+
.map((line) => line.trim())
|
|
60
|
+
.filter(Boolean)
|
|
61
|
+
.filter((line) => line.toUpperCase() !== "OK")[0] ?? "";
|
|
57
62
|
const connectedDevices = [];
|
|
58
63
|
const availableAvds = [];
|
|
59
64
|
const avdInventory = new Set();
|
|
@@ -82,7 +87,7 @@ async function getAndroidDevices() {
|
|
|
82
87
|
if (id.startsWith("emulator-")) {
|
|
83
88
|
try {
|
|
84
89
|
const { stdout } = await execAsync(`adb -s "${id}" emu avd name`);
|
|
85
|
-
avdName = stdout
|
|
90
|
+
avdName = normalizeAvdName(stdout);
|
|
86
91
|
}
|
|
87
92
|
catch { }
|
|
88
93
|
}
|
|
@@ -101,7 +106,7 @@ async function getAndroidDevices() {
|
|
|
101
106
|
const { stdout } = await execAsync("emulator -list-avds");
|
|
102
107
|
const avds = stdout
|
|
103
108
|
.split("\n")
|
|
104
|
-
.map((line) => line
|
|
109
|
+
.map((line) => normalizeAvdName(line))
|
|
105
110
|
.filter(Boolean);
|
|
106
111
|
for (const avd of avds) {
|
|
107
112
|
avdInventory.add(avd);
|
|
@@ -160,8 +160,20 @@ CRITICAL - Test Script Format Rules:
|
|
|
160
160
|
- Merge duplicate or near-duplicate validation lines into one clear assertion
|
|
161
161
|
- End with "exit"
|
|
162
162
|
- Keep it simple and executable
|
|
163
|
+
- When you generate the final result, include a suggested test name before the script
|
|
164
|
+
- The suggested test name must be very short: prefer 2 to 4 words
|
|
165
|
+
- Focus on the main user goal, not every assertion or detail
|
|
166
|
+
- The suggested test name must be lowercase, kebab-case, and filename-safe
|
|
167
|
+
- Use this exact final format:
|
|
168
|
+
Suggested test name: short-kebab-case-name
|
|
169
|
+
|
|
170
|
+
\`\`\`
|
|
171
|
+
<test script here>
|
|
172
|
+
\`\`\`
|
|
163
173
|
|
|
164
174
|
CORRECT Example:
|
|
175
|
+
Suggested test name: calculator-addition
|
|
176
|
+
|
|
165
177
|
\`\`\`
|
|
166
178
|
Open Calculator app
|
|
167
179
|
assert: Calculator app is visible
|