Repository navigation
Conversation
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.
Summary
Adds an experimental, opt-in iOS Live Activity for OpenCode 2 work, reusing the existing notification coordinator and native
OpencodeActivitymodule. Default store builds and Android behavior remain unchanged.This is a draft contribution, not a request to enable the feature in store builds immediately. See ADRs 0024/0025/0026 and
docs/product/parity/ios-widget.mdfor boundaries.Remote delivery: implemented managed reference relay
Adds
services/live-activity-relay/: authenticated registration, persistent revision/token/lease handling, operator-scoped V2 observation, localized complete-state aggregation, and an HTTP/2 APNs sender. The native consumer registers ActivityKit update tokens, observes rotations, restores observation on adoption, and keeps remote content under a single relay writer. No Cloud Link endpoint is assumed and app connection credentials are not forwarded.Scope limitation: remote mode tracks explicit operator-allowlisted
{source, sessionID}pairs, not the app's connected-server aggregate. New sessions require operator configuration and relay restart. It requires MDM managed-app enrollment; there is no self-service enrollment UI for unmanaged personal devices. Remote taps open the app root, and optional progress metrics remain absent when unverified.Setup requires more than Apple credentials: deploy and supervise the single-process relay with protected persistent state, HTTPS reverse proxy, explicit V2 source credentials/session allowlists, unique per-installation enrollment credentials via MDM, a paid-team push-enabled app profile, matching APNs environment/topic, and a build configured with
EXPO_IOS_ACTIVITY_RELAY_URL. Full setup and limitations are indocs/engineering/ios-live-activity-remote-delivery.md. The relay is not deployed and real-device APNs delivery is unverified. Maintainer feedback on this deliberately narrow managed mode is welcome.Screenshots
Lock Screen card rendered by the production SwiftUI view in the iOS Simulator, from native preview run 41373085725 on merged
531f1ee(45 cases in total; full set in the run artifact). These are harness captures, not system Lock Screen / Dynamic Island hosting.Verification
npm run validate:commiton Node 24.21.0: passed — lint, app/test typechecks, 1,033 tests across 156 suites.npm run test:fake-server:self: both V1 and V2 passed.npm run test:e2e:web:isolated -- tests/e2e/chat.spec.mjs: fresh web export and 18/18 chat flows passed.npm run build:storybook: passed on the combined 1.0.121 source; dependencyuse clientbundler warnings remain non-fatal.npm run gen:i18n: passed; every supported locale includes the new strings.ae31093/ 1.0.121 using merge commitaa433c4; no branch-history rewrite or release tag.165f5e6/ 1.0.124 in2476c59(no history rewrite). The only conflict was the TLS fix that upstream landed independently in0aa15a2; upstream's version is kept. Live Activity ADRs were renumbered 0024/0025/0026 because upstream took 0023 for focused extension editors. Post-mergenpm run validate:commiton531f1ee: lint, both typechecks, 1,046 tests / 156 suites passed;npm run test:fake-server:selfV1/V2 passed; chat + sessions Playwright 27/27 passed.main(mergeable_state: dirty). Resolving and validating the upstream integration is required before this draft can become merge-ready.e2d48c15c37b679712ef01ae9fd0de710a628d2c: Apple-SDK typecheck, 45 production-view Simulator harness previews, and an unsigned iPhoneOS Release IPA. This includes intrinsic layout sizing, bounded visual fallbacks and atomic UIKit PNG capture. It predates the managed relay additions.531f1ee: run 41373085725 passed — Apple-SDK typecheck (includingOpencodeActivityRemote.swift), 45 Simulator previews, and unsigned Release archive (1.0.124 / 124, checksum and bundle contents verified). The preview separately SDK-typechecksOpencodeActivityRemote.swiftwith its attributes; the archive compiles all module Swift files through the podspec. Earlier native success does not certify the new relay code.Native SDK compilation, synthetic rendering, full-app startup, Personal Team device checks, and real APNs delivery are distinct results. No remote APNs delivery is claimed.
Test decision
Documentation
Risk and remaining acceptance
EXPO_IOS_LIVE_ACTIVITIES=1; default/FOSS/E2E configurations do not enable it.