@houwert/conductor 0.2.0 → 0.4.0
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/.claude-plugin/plugin.json +4 -1
- package/README.md +121 -21
- package/dist/commands/assert-not-visible.js +5 -0
- package/dist/commands/assert-visible.js +15 -0
- package/dist/commands/back.js +6 -1
- package/dist/commands/cheat-sheet.js +4 -0
- package/dist/commands/clear-state.js +27 -0
- package/dist/commands/copy-app.js +55 -0
- package/dist/commands/daemon.js +4 -0
- package/dist/commands/device-pool.js +4 -0
- package/dist/commands/erase-text.js +2 -0
- package/dist/commands/focused.js +233 -0
- package/dist/commands/foreground-app.js +2 -0
- package/dist/commands/hide-keyboard.js +2 -0
- package/dist/commands/inspect.js +23 -1
- package/dist/commands/install.js +69 -4
- package/dist/commands/launch-app.js +6 -0
- package/dist/commands/list-apps.js +3 -1
- package/dist/commands/list-devices.js +70 -7
- package/dist/commands/open-link.js +2 -0
- package/dist/commands/press-key.js +73 -7
- package/dist/commands/run-flow-inline.js +3 -0
- package/dist/commands/run-flow.js +4 -0
- package/dist/commands/run-parallel.js +2 -0
- package/dist/commands/screenshot.js +2 -0
- package/dist/commands/scroll-until-visible.js +6 -0
- package/dist/commands/scroll.js +6 -0
- package/dist/commands/session.js +2 -0
- package/dist/commands/set-location.js +2 -0
- package/dist/commands/set-orientation.js +2 -0
- package/dist/commands/start-device.js +311 -9
- package/dist/commands/stop-app.js +2 -0
- package/dist/commands/swipe.js +10 -0
- package/dist/commands/tap.js +20 -0
- package/dist/commands/type.js +2 -0
- package/dist/commands/uninstall-app.js +31 -0
- package/dist/daemon/server.js +64 -22
- package/dist/device-picker.js +65 -0
- package/dist/drivers/android.js +18 -13
- package/dist/drivers/bootstrap.js +179 -6
- package/dist/drivers/element-resolver.js +10 -0
- package/dist/drivers/flow-runner.js +21 -5
- package/dist/drivers/ios.js +7 -1
- package/dist/index.js +134 -97
- package/dist/postinstall.js +2 -2
- package/dist/runner.js +40 -6
- package/drivers/ios/conductor-driver-ios.zip +0 -0
- package/drivers/ios/conductor-driver-iosUITests-Runner.zip +0 -0
- package/drivers/tvos/conductor-driver-tvos-config.xctestrun +121 -0
- package/drivers/tvos/conductor-driver-tvos.zip +0 -0
- package/drivers/tvos/conductor-driver-tvosUITests-Runner.zip +0 -0
- package/package.json +1 -1
- package/skills/conductor/SKILL.md +66 -6
- package/skills/conductor/references/flow-syntax.md +3 -0
- package/skills/skills.yaml +8 -0
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: conductor
|
|
3
|
+
version: 0.2.0
|
|
4
|
+
description: "Token-efficient CLI for mobile UI testing (iOS simulator + Android emulator), designed for AI agents"
|
|
5
|
+
metadata.openclaw:
|
|
6
|
+
category: service
|
|
7
|
+
requires:
|
|
8
|
+
bins: [conductor]
|
|
9
|
+
---
|
|
10
|
+
|
|
1
11
|
# conductor
|
|
2
12
|
|
|
3
13
|
A token-efficient CLI for Conductor mobile UI testing, designed for AI agents.
|
|
@@ -10,6 +20,7 @@ conductor <command> [args] [options]
|
|
|
10
20
|
|
|
11
21
|
Global options:
|
|
12
22
|
- `--device <id>` — target device ID; also keys the session and daemon (auto-detected if omitted)
|
|
23
|
+
- `--device-name <name>` — target a booted device by its human-readable name (resolved to ID from booted devices); mutually exclusive with `--device`
|
|
13
24
|
- `--help` — show help
|
|
14
25
|
- `--json` — machine-readable JSON output (avoid unless you need structured parsing)
|
|
15
26
|
- `--verbose / -v` — log daemon calls, driver fallbacks, and raw output
|
|
@@ -20,7 +31,7 @@ Global options:
|
|
|
20
31
|
|
|
21
32
|
### `list-devices`
|
|
22
33
|
|
|
23
|
-
List connected Android emulators and iOS simulators.
|
|
34
|
+
List connected Android emulators and iOS simulators. Shows both booted (running) devices and available (shutdown) simulators/emulators that can be started with `start-device`.
|
|
24
35
|
|
|
25
36
|
```bash
|
|
26
37
|
conductor list-devices
|
|
@@ -28,10 +39,17 @@ conductor list-devices
|
|
|
28
39
|
|
|
29
40
|
Output:
|
|
30
41
|
```
|
|
31
|
-
|
|
32
|
-
|
|
42
|
+
Booted devices:
|
|
43
|
+
android device emulator-5554 Pixel_6_API_33
|
|
44
|
+
ios booted ABC123-DEF456 iPhone 15
|
|
45
|
+
|
|
46
|
+
Available devices:
|
|
47
|
+
ios shutdown DEF789-ABC012 iPhone 16 Pro
|
|
48
|
+
android available Pixel_7_API_34 Pixel_7_API_34
|
|
33
49
|
```
|
|
34
50
|
|
|
51
|
+
Exits with code 0 if any booted or available devices exist, 1 only if both lists are empty.
|
|
52
|
+
|
|
35
53
|
---
|
|
36
54
|
|
|
37
55
|
### `foreground-app`
|
|
@@ -56,6 +74,22 @@ conductor list-apps --device emulator-5554
|
|
|
56
74
|
|
|
57
75
|
---
|
|
58
76
|
|
|
77
|
+
### `copy-app <bundleId>`
|
|
78
|
+
|
|
79
|
+
Copy an installed app from one iOS simulator to another. Useful when you have a compiled `.app` bundle on one simulator and want to install it on others without recompiling.
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
conductor copy-app com.example.myapp --from C59D3241-FB6A-4E3B-AE7B-A82D3C933889 --to 86B1BC33-7D83-47FF-AAFE-1BD70FC53038
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Flags:
|
|
86
|
+
- `--from <id>` — source device ID (must be an iOS simulator)
|
|
87
|
+
- `--to <id>` — target device ID (must be an iOS simulator)
|
|
88
|
+
|
|
89
|
+
Both flags are required. The command reads the `.app` bundle path from the source simulator and installs it on the target.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
59
93
|
### `launch-app <appId>`
|
|
60
94
|
|
|
61
95
|
Launch an app by bundle ID and save it to the session.
|
|
@@ -90,6 +124,28 @@ conductor stop-app com.example.myapp
|
|
|
90
124
|
|
|
91
125
|
---
|
|
92
126
|
|
|
127
|
+
### `clear-state [<appId>]`
|
|
128
|
+
|
|
129
|
+
Clear app data/state without relaunching. Uses the session `appId` if not specified. On iOS this terminates the app, preserves the .app bundle, uninstalls, and reinstalls (clearing all user data). On Android this runs `pm clear`.
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
conductor clear-state
|
|
133
|
+
conductor clear-state com.example.myapp
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### `uninstall-app <appId>`
|
|
139
|
+
|
|
140
|
+
Uninstall an app from the device. The app ID is required.
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
conductor uninstall-app com.example.myapp
|
|
144
|
+
conductor uninstall-app com.example.myapp --device emulator-5554
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
93
149
|
### `tap <element>`
|
|
94
150
|
|
|
95
151
|
Tap a UI element by its text label or accessibility ID. **Try the most obvious text label or ID first** — e.g. `"Sign In"`, `"Submit"`, `"btn_login"`. Only run `inspect` to look up the exact identifier if your first attempt fails. **For icon-only buttons (no visible text label), always run `inspect` first** to find the accessibility ID before tapping.
|
|
@@ -159,9 +215,9 @@ conductor back
|
|
|
159
215
|
|
|
160
216
|
### `press-key <key>`
|
|
161
217
|
|
|
162
|
-
Press a hardware or keyboard key. Valid keys: `Enter`, `Backspace`, `Home`, `End`, `Tab`, `Delete`, `Escape`, `VolumeUp`, `VolumeDown`, `Power`, `Lock`, `Back`, `Camera`, `Search`.
|
|
218
|
+
Press a hardware or keyboard key. Valid keys: `Enter`, `Backspace`, `Home`, `End`, `Tab`, `Delete`, `Escape`, `VolumeUp`, `VolumeDown`, `Power`, `Lock`, `Back`, `Camera`, `Search`, `Remote Dpad Up`, `Remote Dpad Down`, `Remote Dpad Left`, `Remote Dpad Right`, `Remote Dpad Center`.
|
|
163
219
|
|
|
164
|
-
Not all keys are supported on all platforms — unsupported keys are silently ignored (e.g. `Back` on iOS).
|
|
220
|
+
Not all keys are supported on all platforms — unsupported keys are silently ignored (e.g. `Back` on iOS). The `Remote Dpad *` keys are Android TV only.
|
|
165
221
|
|
|
166
222
|
```bash
|
|
167
223
|
conductor press-key Enter
|
|
@@ -659,6 +715,8 @@ Boot an iOS simulator or Android emulator. Creates the Simulator window and wait
|
|
|
659
715
|
conductor start-device --platform ios
|
|
660
716
|
conductor start-device --platform android
|
|
661
717
|
conductor start-device --platform ios --os-version 18
|
|
718
|
+
conductor start-device --platform ios --device-type "iPhone 16 Pro"
|
|
719
|
+
conductor start-device --platform ios --name "Test Device"
|
|
662
720
|
conductor start-device --platform android --avd Pixel_6_API_33
|
|
663
721
|
```
|
|
664
722
|
|
|
@@ -666,8 +724,10 @@ Flags:
|
|
|
666
724
|
- `--platform <ios|android>` — required
|
|
667
725
|
- `--os-version <n>` — filter by OS version (iOS: e.g. `18`; Android: API level e.g. `33`)
|
|
668
726
|
- `--avd <name>` — Android AVD name to launch (default: first available AVD)
|
|
727
|
+
- `--name <name>` — set a custom name on the simulator after boot (iOS only)
|
|
728
|
+
- `--device-type <name>` — iOS device type to boot (e.g. `"iPhone 16 Pro"`); if no existing simulator matches, one is created automatically
|
|
669
729
|
|
|
670
|
-
iOS picks the first available iPhone simulator matching the OS version
|
|
730
|
+
iOS picks the first available iPhone simulator matching the OS version and device type filters (or any if unfiltered). Android launches the named AVD, or the first AVD found.
|
|
671
731
|
|
|
672
732
|
---
|
|
673
733
|
|
|
@@ -26,6 +26,8 @@ appId: com.example.myapp
|
|
|
26
26
|
appId: com.other.app
|
|
27
27
|
- clearState # clear app data
|
|
28
28
|
- clearKeychain # clear keychain (iOS: full keychain; Android: account credentials)
|
|
29
|
+
- uninstallApp # uninstall app from device
|
|
30
|
+
- uninstallApp: com.other.app # uninstall a specific app
|
|
29
31
|
```
|
|
30
32
|
|
|
31
33
|
### Tapping
|
|
@@ -51,6 +53,7 @@ appId: com.example.myapp
|
|
|
51
53
|
- pressKey: Enter
|
|
52
54
|
- pressKey: Backspace
|
|
53
55
|
- pressKey: Home
|
|
56
|
+
- pressKey: Remote Dpad Down # Android TV only; also Up, Left, Right, Center, Remote Media Play Pause, Remote Media Stop, Remote Media Next, Remote Media Previous, Remote Media Rewind, Remote Media Fast Forward, Remote System Navigation Up, Remote System Navigation Down, Remote Button A, Remote Button B, Remote Menu, TV Input, TV Input HDMI 1/2/3
|
|
54
57
|
- pasteText: "pasted content" # paste text into focused field
|
|
55
58
|
- copyTextFrom: "Element" # copy element's text to output.textContent
|
|
56
59
|
```
|