Skip to content

feat: add native T4 companion app for iOS and Android#86

Draft
wolfiesch wants to merge 10 commits into
mainfrom
codex/expo-companion
Draft

feat: add native T4 companion app for iOS and Android#86
wolfiesch wants to merge 10 commits into
mainfrom
codex/expo-companion

Conversation

@wolfiesch

@wolfiesch wolfiesch commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

What this changes

  • Add an Expo and React Native companion for the T4 attention inbox, sessions, transcripts, approvals, and host setup.
  • Store one Tailnet host securely and reconnect when the app returns to the foreground or is relaunched.
  • Add environment checks, physical-device workflows, explicit long-session loading states, and Phone Setup links.

This remains a draft checkpoint while an alternative Flutter client is evaluated. The server-side bounded-tail fix for transcripts larger than 64 MiB is not part of this PR.

How you verified it

On 2bd5cd2:

  • mise exec node@24.17.0 -- pnpm --filter @t4-code/companion typecheck
  • mise exec node@24.17.0 -- pnpm --filter @t4-code/companion test
  • mise exec node@24.17.0 -- node apps/companion/scripts/doctor-node-tests.mjs
  • Installed and launched a signed Release build on a physical iPhone; after relaunching with the screen locked, the app reconnected to the configured Tailnet host and reloaded sessions.

Exact-head GitHub Actions are not green: android-debug passed; core and tooling failed the same release-consistency invariant because the companion version is 0.1.29 while the repository version is 0.1.30; the aggregate verify job therefore failed.

Checklist

  • pnpm check passes (release contract, provenance, lint, typecheck)
  • pnpm test passes; new behavior has a test that fails without this change
  • Any pasted logs or screenshots are redacted: no secrets, tokens, pairing codes, or private paths
  • Ported code (T3 Code / OMP) follows the provenance rules in THIRD_PARTY_NOTICES.md (not applicable; no ported code)

@riverpilot riverpilot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Recommend closing as obsolete/superseded, not repairing for merge. Current main already ships the maintained Flutter Android/iOS/macOS client under com.lycaonsolutions.t4code; this Expo companion claims the same native identity, so the two applications cannot coexist. Rebasing also rejects Flutter's native Origin: https://localhost handshake at the Tailnet gateway and carries stale 0.1.29 release metadata that fails the 0.1.30 release contract. Preserve one supported native client: Flutter.

@riverpilot

Copy link
Copy Markdown
Contributor

Maintainer recommendation: close this draft as superseded by the merged Flutter native client. Do not maintain two native apps with the same iOS/Android identity.

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.

2 participants