authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-09-18 12:55:12-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-18 12:55:12-07:00
log53830d413474b2a5749c040d4382c96002894b88
tree1d2ef35f708fa03fdcd830a98a060c86fd9e66e9
parente0649ed7d8f8b5f21d114ff2b09ef803184f1d05
signature Signed by PGP key B5690EEEBB952194

perf(mobile): isolate iOS Live Activity imports (#12380)


4 files changed, 35 insertions(+), 12 deletions(-)

apps/mobile/src/features/agent-awareness/agentLiveActivity.ios.ts created+9
......@@ -0,0 +1,9 @@
1import AgentActivity, { type AgentActivityProps } from "../../widgets/AgentActivity";
2
3export function getAgentLiveActivities() {
4 return AgentActivity.getInstances();
5}
6
7export function startAgentLiveActivity(props: AgentActivityProps) {
8 return AgentActivity.start(props);
9}
apps/mobile/src/features/agent-awareness/agentLiveActivity.ts created+12
......@@ -0,0 +1,12 @@
1import type { LiveActivity } from "expo-widgets";
2import type { AgentActivityProps } from "../../widgets/AgentActivity";
3
4export function getAgentLiveActivities(): Array<LiveActivity<AgentActivityProps>> {
5 return [];
6}
7
8export function startAgentLiveActivity(
9 _props: AgentActivityProps,
10): LiveActivity<AgentActivityProps> | null {
11 return null;
12}
apps/mobile/src/features/agent-awareness/remoteRegistration.test.ts+3-5
......@@ -101,11 +101,9 @@ vi.mock("expo-widgets", () => ({
101101 addPushToStartTokenListener: vi.fn(() => ({ remove: vi.fn() })),
102102}));
103103
104vi.mock("../../widgets/AgentActivity", () => ({
105 default: {
106 getInstances: widgetMocks.getInstances,
107 start: widgetMocks.start,
108 },
104vi.mock("./agentLiveActivity", () => ({
105 getAgentLiveActivities: widgetMocks.getInstances,
106 startAgentLiveActivity: widgetMocks.start,
109107}));
110108
111109// The state modules pull the whole connection stack (and native expo modules)
apps/mobile/src/features/agent-awareness/remoteRegistration.ts+11-7
......@@ -35,7 +35,8 @@ import {
3535 loadPreferences,
3636 saveAgentAwarenessRegistrationRecord,
3737} from "../../persistence/imperative";
38import AgentActivity, { type AgentActivityProps } from "../../widgets/AgentActivity";
38import type { AgentActivityProps } from "../../widgets/AgentActivity";
39import { getAgentLiveActivities, startAgentLiveActivity } from "./agentLiveActivity";
3940import { resolveCloudPublicConfig } from "../cloud/publicConfig";
4041import { supportsAgentAwarenessPush } from "./capabilities";
4142import { makeRelayDeviceRegistrationRequest, resolveApsEnvironment } from "./registrationPayload";
......@@ -522,11 +523,11 @@ function armAgentAwarenessLiveActivityForLocalWorkNow(input: {
522523 readonly projectTitle: string;
523524}): void {
524525 try {
525 if (AgentActivity.getInstances().length > 0) {
526 if (getAgentLiveActivities().length > 0) {
526527 return;
527528 }
528529 const nowIso = new Date(Date.now()).toISOString();
529 const activity = AgentActivity.start({
530 const activity = startAgentLiveActivity({
530531 title: "T3 Code",
531532 subtitle: "Agent work in progress",
532533 activeCount: 1,
......@@ -545,6 +546,9 @@ function armAgentAwarenessLiveActivityForLocalWorkNow(input: {
545546 },
546547 ],
547548 });
549 if (!activity) {
550 return;
551 }
548552 logRegistrationDebug("live activity card armed for local work", {
549553 threadTitle: input.threadTitle,
550554 });
......@@ -842,7 +846,7 @@ function endLocalLiveActivities(context: string): void {
842846 return;
843847 }
844848 try {
845 for (const activity of AgentActivity.getInstances()) {
849 for (const activity of getAgentLiveActivities()) {
846850 activity.end("immediate").catch((error: unknown) => {
847851 logRegistrationError(context, error);
848852 });
......@@ -1069,7 +1073,7 @@ export function refreshActiveLiveActivityRemoteRegistration(): Effect.Effect<
10691073 }
10701074
10711075 let activities = yield* Effect.try({
1072 try: () => AgentActivity.getInstances(),
1076 try: () => getAgentLiveActivities(),
10731077 catch: (cause) =>
10741078 new AgentAwarenessOperationError({
10751079 operation: "list-active-live-activities",
......@@ -1118,7 +1122,7 @@ export function refreshActiveLiveActivityRemoteRegistration(): Effect.Effect<
11181122 // The snapshot request yields; an arm-on-send may have created the
11191123 // card in the meantime. Re-check so two cards are never started.
11201124 const armedMeanwhile = yield* Effect.try({
1121 try: () => AgentActivity.getInstances(),
1125 try: () => getAgentLiveActivities(),
11221126 catch: () => [] as ReadonlyArray<LiveActivity<AgentActivityProps>>,
11231127 }).pipe(Effect.orElseSucceed(() => [] as ReadonlyArray<LiveActivity<AgentActivityProps>>));
11241128 if (armedMeanwhile.length > 0) {
......@@ -1127,7 +1131,7 @@ export function refreshActiveLiveActivityRemoteRegistration(): Effect.Effect<
11271131 const aggregate = snapshot.aggregate;
11281132 const primed = yield* Effect.try({
11291133 try: () =>
1130 AgentActivity.start({
1134 startAgentLiveActivity({
11311135 title: aggregate.title,
11321136 subtitle: aggregate.subtitle,
11331137 activeCount: aggregate.activeCount,