Skip to content

feat: add Maestro replay compatibility#581

Open
thymikee wants to merge 1 commit into
mainfrom
codex/maestro-replay-compat
Open

feat: add Maestro replay compatibility#581
thymikee wants to merge 1 commit into
mainfrom
codex/maestro-replay-compat

Conversation

@thymikee
Copy link
Copy Markdown
Member

Summary

Adds a minimal Maestro replay compatibility path for existing YAML flows, including command mapping, variable/runScript handling, flow-control shims, and replay-only runtime helpers for scroll/tap behavior. Also adds the iOS non-hittable selector tap backdoor needed for hidden RN E2E controls and documents the expanded replay support.

Updates #558.

Touched 32 files. Scope is replay compatibility plus the narrow iOS runner tap fallback required by that workflow.

Validation

Verified with pnpm format, focused replay tests, pnpm build, git diff --check, pnpm check:unit outside the sandbox, and pnpm build:xcuitest for iOS and macOS. Manual Bluesky replay comparison produced Agent Device and Maestro recordings during validation; Maestro still fails the selected Bluesky flow earlier than Agent Device because its precondition does not reach the target screen.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 21, 2026

PR Preview Action v1.8.1

QR code for preview link

🚀 View preview at
https://callstackincubator.github.io/agent-device/pr-preview/pr-581/

Built to branch gh-pages at 2026-05-21 19:37 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

@thymikee thymikee force-pushed the codex/maestro-replay-compat branch from 6794225 to baaee00 Compare May 21, 2026 19:36
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6794225256

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +145 to +147
typeof value.direction === 'string'
? readScrollPositionalsFromDirectionSwipe(value.direction)[0]
: 'down';
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve scrollUntilVisible direction instead of inverting it

The scrollUntilVisible mapper currently derives direction via readScrollPositionalsFromDirectionSwipe(...)[0], which flips UP/DOWN/LEFT/RIGHT. That inversion is correct for Maestro swipe gestures, but scrollUntilVisible.direction is already a scroll direction; e.g. DOWN should keep scrolling toward lower content. With this mapping, flows that specify a direction scroll the opposite way and can consistently time out before finding elements.

Useful? React with 👍 / 👎.

Comment on lines +231 to +233
if (!conditionResponse.ok) {
return { ok: true, data: { skipped: true, condition: mode, selector } };
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Fail runFlow.when on runtime errors instead of silently skipping

When evaluating runFlow.when, any failed is response is treated as a skipped condition (ok: true). This conflates expected predicate-false outcomes with real runtime failures (for example transport/session errors), so a broken condition check can silently bypass required subflow steps and let replay continue as a false pass. The handler should only skip on genuine condition-miss cases and propagate operational errors.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant