Files
paseo/packages/app/maestro
Mohamed Boudra 53c14d9855 Extract client SDK package (#1052)
* Extract client SDK package

* Polish SDK client identity defaults

* Build client before dependent CI jobs

* Restore daemon client server export

* Extract protocol and client SDK packages

* Fix provider override schema validation

* Fix app test daemon client imports

* Simplify workspace build targets

* Fix CLI test server build bootstrap

* Run SDK package tests in CI

* Fix rebase package split drift

* Restore lockfile registry metadata

* Update SDK config test for prompt default

* Move terminal stream router test to client package

* Fix rebase drift for protocol imports

* Fix SDK agent capability fixture

* Restore legacy server client exports

* Fix server export compatibility test

* Advertise custom mode icon client capability

* Remove server daemon-client exports

* Format rebased mode control import

* Fix rebase drift for protocol imports

Files added by upstream PRs (#893, #1147, #1154) referenced the pre-split
shared/ paths that this branch moves into @getpaseo/protocol. Redirect
those imports to the protocol package so typecheck stays green after the
rebase.
2026-05-28 01:58:18 +08:00
..
2026-04-23 21:44:48 +07:00

Maestro Flows

This directory contains local mobile UI flows. Keep flows small enough that a failure screenshot proves the intended behavior, not just that the app launched.

New Workspace Android Flow

Use these files when debugging or extending workspace creation on Android:

  • test-workspace-create-android-crash.sh runs the full regression harness.
  • workspace-create-android-crash.yaml is the full Maestro flow used by the harness.
  • record-workspace-create-android-focus.sh records only the focused repro window after setup.
  • workspace-create-android-ready-sidebar.yaml stages the app with the Android sidebar open and a prepared project visible.
  • workspace-create-android-create-focused.yaml starts from that staged sidebar and performs the actual workspace creation.

The reusable pieces live in flows/:

  • flows/android-dev-client.yaml handles Expo dev launcher/dev menu screens.
  • flows/connect-direct-if-welcome.yaml connects to the local daemon only when the welcome screen is visible.
  • flows/open-prepared-project-sidebar.yaml waits for the home screen, opens the compact Android sidebar, and waits for the prepared project.
  • flows/new-workspace-open-from-sidebar.yaml taps the project row's new-workspace action and waits for /new.
  • flows/new-workspace-select-codex-gpt54.yaml selects a real provider/model.
  • flows/new-workspace-submit-and-assert-created.yaml taps Create and proves the app landed on the created workspace.

Compose new workspace scenarios out of these primitives instead of copying the old full flow. The shell scripts render the top-level flows and every flows/*.yaml file into the same temp directory, so nested runFlow: flows/... paths keep working with ${PASEO_MAESTRO_*} placeholders.

The flow is intentionally strict. It must:

  1. Open a prepared project from the daemon.
  2. Tap the project row's new-workspace action.
  3. Select an actual provider/model before tapping Create.
  4. Tap Create.
  5. Assert the app lands on a workspace header and the draft composer.
  6. Assert New workspace, Select a model, and the Android redbox text are not visible.
  7. For the shell harness, grep logcat for failed to insert view and specified child already has a parent.

Do not weaken this flow to only wait for message-input-root. That can pass on the wrong route. The header assertion and the New workspace negative assertion are what prove the redirect actually completed.

The scripts assume a development build with package id sh.paseo.debug, an already-running local daemon on 127.0.0.1:6767, and a connected Android device or emulator. They call adb reverse tcp:6767 tcp:6767; they do not restart the daemon.

bash packages/app/maestro/test-workspace-create-android-crash.sh
bash packages/app/maestro/record-workspace-create-android-focus.sh

Optional environment:

PASEO_MAESTRO_APP_ID=sh.paseo.debug
PASEO_MAESTRO_DIRECT_ENDPOINT=127.0.0.1:6767
PASEO_MAESTRO_DAEMON_WS_URL=ws://127.0.0.1:6767/ws
PASEO_MAESTRO_PROJECT_PATH=/path/to/git/repo