Repository navigation
Phone push: Channel title, preview and approval buttons, plus registration retry and Simulator flow timeout - #1874
Merged
Merged
Conversation
The runner killed each Maestro flow after 300 s, the same time Maestro may spend starting its iOS driver. On a busy Mac the driver start and the app reinstall took about 4.5 minutes, so the first flow was killed before the app loaded. Issue: #1655 Agent-Task: claude/cloud/session_01Eg4d3a4zKNVhnV2ke5b7sX Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Eg4d3a4zKNVhnV2ke5b7sX
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
The app sent its push token to each paired Host only at launch, on pair, and from the off-state button. A Host that was unreachable at launch stayed in the failed list until the app was relaunched. The push session now retries the failed Hosts when the current Host's connection comes up and when the app returns to the foreground. Issue: #1655 Agent-Task: claude/cloud/session_01Eg4d3a4zKNVhnV2ke5b7sX Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Eg4d3a4zKNVhnV2ke5b7sX
A push now has a title and a body. The title is the Channel name (#name), or the PersonaBot's name for its DM. The body says what the PersonaBot needs, followed by a short preview: the tool and its main argument for an approval, the question text, or the message text. Private input requests stay content-free, and previews stop at 140 characters. ADR-0212 replaces ADR-0202's content-free payload rule, and the Notifications settings hint now says what a notification shows. Issue: #1655 Agent-Task: claude/cloud/session_01Eg4d3a4zKNVhnV2ke5b7sX Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Eg4d3a4zKNVhnV2ke5b7sX
Main took ADR-0212 for PersonaBot creation, so the push preview record moves to the next free number. Issue: #1655 Agent-Task: claude/cloud/session_01Eg4d3a4zKNVhnV2ke5b7sX Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Eg4d3a4zKNVhnV2ke5b7sX
A Tool approval push now carries the tool-approval category. The app registers Allow once and Reject buttons for it, both requiring unlock. A button opens the app, which sends the decision to the Host named in the push (trying each saved route), then shows the card in its conversation. If the decision cannot be sent, the card stays pending there. The buttons open the app because iOS does not run JavaScript for a background action when the app was closed. Issue: #1655 Agent-Task: claude/cloud/session_01Eg4d3a4zKNVhnV2ke5b7sX Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Eg4d3a4zKNVhnV2ke5b7sX
Swiping a notification away already leaves the approval undecided, so the buttons now lead with the two ways to allow: Always allow (this exact command, as on the card), Allow once, then Reject, marked destructive. The Host picks tool-approval-once, without Always allow, for secret_cli or when it cannot read the request. Issue: #1655 Agent-Task: claude/cloud/session_01Eg4d3a4zKNVhnV2ke5b7sX Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Eg4d3a4zKNVhnV2ke5b7sX
Contributor
Author
Batch QA — push (heads 223ccde → ad30e66)Real iPhone (Release build of the batch with #1884's projectId, APNs key on the EAS project) + QA Host.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Vain
Why the change
Two-line notifications (Host)
Before: a phone notification only named the PersonaBot and the kind of request, for example "Ada needs your approval". You couldn't tell from the lock screen what it was about.
After: the title is the Channel (
#ops), or the PersonaBot's name for its DM. The body says what's needed plus a short preview, for exampleAda needs your approval: bash · date > nowin a Channel, orHas a question for you: Which branch?in a DM.Decide from the notification
Before: to decide a Tool approval you tapped the notification, waited for the conversation and then tapped the card.
After: a Tool approval notification has Always allow, Allow once and Reject buttons (long-press on iOS, expand on Android).
secret_cligets only Allow once and Reject, because its card has no Always allow. The same applies when the Host can't read the request.The buttons open the app because iOS doesn't run the app's JavaScript for a background action once the app has been closed. Deciding without opening the app would need native code.
Push registration retry (mobile app)
Before: if a computer was unreachable when the app launched, Notifications kept showing "还没能把这台手机告诉 " until the app was relaunched.
After: the app retries the computers that failed when the current one's connection comes back, and when the app returns to the foreground.
Simulator flow timeout (
scripts/e2e-mobile-sim.mjs)Before: each Maestro flow was killed after 300 s, which is also how long Maestro gets just to start its iOS driver.
After: each flow gets the driver startup time plus five minutes.
Issue / Discussion: Refs #1655. Follows #1837.
Special things to note
pushdeveloper log are unchanged and still hold ids only.packages/core/test/push-delivery.test.tscovers titles, bodies, thetool-approvalandtool-approval-oncecategories, approval previews and truncation, and private input staying content-free.apps/mobile/test/push.test.tscovers each button's decision: the right Host, falling back across routes, ignoring other buttons and kinds, and an unpaired or unreachable Host. It also covers the retry for a computer that was offline at launch.tscandpnpm lint(including the CLI parity check) are clean.🤖 Generated with Claude Code
https://claude.ai/code/session_01Eg4d3a4zKNVhnV2ke5b7sX