@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.
Files changed (55) hide show
  1. package/.claude-plugin/plugin.json +4 -1
  2. package/README.md +121 -21
  3. package/dist/commands/assert-not-visible.js +5 -0
  4. package/dist/commands/assert-visible.js +15 -0
  5. package/dist/commands/back.js +6 -1
  6. package/dist/commands/cheat-sheet.js +4 -0
  7. package/dist/commands/clear-state.js +27 -0
  8. package/dist/commands/copy-app.js +55 -0
  9. package/dist/commands/daemon.js +4 -0
  10. package/dist/commands/device-pool.js +4 -0
  11. package/dist/commands/erase-text.js +2 -0
  12. package/dist/commands/focused.js +233 -0
  13. package/dist/commands/foreground-app.js +2 -0
  14. package/dist/commands/hide-keyboard.js +2 -0
  15. package/dist/commands/inspect.js +23 -1
  16. package/dist/commands/install.js +69 -4
  17. package/dist/commands/launch-app.js +6 -0
  18. package/dist/commands/list-apps.js +3 -1
  19. package/dist/commands/list-devices.js +70 -7
  20. package/dist/commands/open-link.js +2 -0
  21. package/dist/commands/press-key.js +73 -7
  22. package/dist/commands/run-flow-inline.js +3 -0
  23. package/dist/commands/run-flow.js +4 -0
  24. package/dist/commands/run-parallel.js +2 -0
  25. package/dist/commands/screenshot.js +2 -0
  26. package/dist/commands/scroll-until-visible.js +6 -0
  27. package/dist/commands/scroll.js +6 -0
  28. package/dist/commands/session.js +2 -0
  29. package/dist/commands/set-location.js +2 -0
  30. package/dist/commands/set-orientation.js +2 -0
  31. package/dist/commands/start-device.js +311 -9
  32. package/dist/commands/stop-app.js +2 -0
  33. package/dist/commands/swipe.js +10 -0
  34. package/dist/commands/tap.js +20 -0
  35. package/dist/commands/type.js +2 -0
  36. package/dist/commands/uninstall-app.js +31 -0
  37. package/dist/daemon/server.js +64 -22
  38. package/dist/device-picker.js +65 -0
  39. package/dist/drivers/android.js +18 -13
  40. package/dist/drivers/bootstrap.js +179 -6
  41. package/dist/drivers/element-resolver.js +10 -0
  42. package/dist/drivers/flow-runner.js +21 -5
  43. package/dist/drivers/ios.js +7 -1
  44. package/dist/index.js +134 -97
  45. package/dist/postinstall.js +2 -2
  46. package/dist/runner.js +40 -6
  47. package/drivers/ios/conductor-driver-ios.zip +0 -0
  48. package/drivers/ios/conductor-driver-iosUITests-Runner.zip +0 -0
  49. package/drivers/tvos/conductor-driver-tvos-config.xctestrun +121 -0
  50. package/drivers/tvos/conductor-driver-tvos.zip +0 -0
  51. package/drivers/tvos/conductor-driver-tvosUITests-Runner.zip +0 -0
  52. package/package.json +1 -1
  53. package/skills/conductor/SKILL.md +66 -6
  54. package/skills/conductor/references/flow-syntax.md +3 -0
  55. 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
- android device emulator-5554 Pixel_6_API_33
32
- ios booted ABC123-DEF456 iPhone 15
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 filter (or any if unfiltered). Android launches the named AVD, or the first AVD found.
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
  ```
@@ -0,0 +1,8 @@
1
+ skills:
2
+ - name: conductor
3
+ path: conductor/SKILL.md
4
+ description: "Token-efficient CLI for mobile UI testing, designed for AI agents"
5
+ category: service
6
+ version: 0.2.0
7
+ requires:
8
+ bins: [conductor]