Skip to content

feat(mobile): Expo scaffold for Phase 12 mobile app#32

Open
Codename-11 wants to merge 1 commit into
feature/v3-foundationfrom
feature/mobile-expo-scaffold
Open

feat(mobile): Expo scaffold for Phase 12 mobile app#32
Codename-11 wants to merge 1 commit into
feature/v3-foundationfrom
feature/mobile-expo-scaffold

Conversation

@Codename-11
Copy link
Copy Markdown
Owner

Summary

Phase 12 of the v3 daemon pivot — minimum-viable Expo (managed workflow) app under packages/mobile with three stubbed screens wired to the ARC daemon via @axiom-labs/arc-client.

  • Agents list (app/index.tsx) — calls client.agents.list() on focus, shows empty/error/loading states and a "Pair with daemon" CTA.
  • Agent detail placeholder (app/agent/[id].tsx) — shows id + status only; live output is a follow-up.
  • Settings (app/settings.tsx) — host + token input, saves to AsyncStorage. QR pairing is intentionally deferred.
  • RN WebSocket shim (src/arc-client-rn.ts) — the shared SDK imports the Node ws library which is not available in RN; this shim re-implements connect / call / subscribe / attachTerminal on global.WebSocket while reusing protocol.ts + frame.ts from the SDK. Proper cross-runtime SDK packaging is a Phase-4+ follow-up.
  • Root tsconfig now excludes packages/mobile/** so the Node-flavoured tsc --noEmit does not fight the RN type graph; the mobile package has its own tsconfig.json extending expo/tsconfig.base.

Out of scope (deliberate): voice, push notifications, QR scanner, web export, expo prebuild / native folders, store submission.

Test plan

  • pnpm install (workspace, including mobile deps)
  • npx tsc --noEmit (root) — passes
  • pnpm --filter @axiom-labs/arc-mobile typecheck — passes
  • CI=1 npx expo start --offline boots Metro cleanly for >3s then terminates
  • Manual: scan QR with Expo Go, open Settings, enter daemon host + token, verify Agents list populates

🤖 Generated with Claude Code

Phase 12 (mobile) scaffold of the v3 daemon pivot. Managed-workflow Expo app
under packages/mobile with three screens (Agents list, Agent detail
placeholder, Settings) talking to the ARC daemon over WebSocket.

- packages/mobile: expo-router app + ClientProvider + RN-compatible
  ArcClient shim (src/arc-client-rn.ts). The shim re-implements connect/
  call/subscribe on top of global.WebSocket while reusing the shared
  protocol.ts + frame.ts exports from @axiom-labs/arc-client, since the
  SDK's ws import does not work in RN. Proper cross-runtime packaging of
  the SDK is a follow-up.
- Token-based pairing: host + token entered in Settings, persisted via
  @react-native-async-storage/async-storage. QR pairing is intentionally
  deferred.
- Root tsconfig.json: exclude packages/mobile/** so the Node-flavoured
  root tsc --noEmit does not try to typecheck RN code. The mobile
  package has its own tsconfig extending expo/tsconfig.base.

Out of scope (follow-ups): voice, push, QR scanner, web export, expo
prebuild, native folders, store submission.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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