# V2 Mobile Companion App

The V2 companion surface now lives inside the existing Expo mobile app at
`apps/oshun/mobile/v2/`, with a routed screen at `apps/oshun/mobile/app/v2.tsx`
and an Explore launch tile in `apps/oshun/mobile/app/(tabs)/explore.tsx`.

## Runtime Contract

| Surface       | Implementation                                   |
| ------------- | ------------------------------------------------ |
| Companion app | `apps/oshun/mobile/v2/V2CompanionApp.tsx`        |
| Launch tile   | `apps/oshun/mobile/v2/V2CompanionLaunchTile.tsx` |
| Shell model   | `apps/oshun/mobile/v2/companionAppModel.ts`      |
| Route         | `apps/oshun/mobile/app/v2.tsx`                   |
| Tests         | `apps/oshun/mobile/v2/V2CompanionApp.test.tsx`   |
| Agent package | `libs/iris/agents/src/index.ts` (`@iris/agents`) |

The model consumes the required per-surface clients directly:

- `@oshun/shell-core` for mobile shell tabs and route hrefs.
- `@oshun/auth-client` for assistant feature-gating rules.
- `@oshun/concordia-integration` for appeal navigation, event, and telemetry
  wiring.
- `@oshun/trust-safety` for assistant-behavior policy categories, severity, and
  SLA budgets.
- `@iris/agents` for the in-app assistant agent catalog and launch readiness.
- `@sophia/client` for frame-data, codex, and wiki query client wiring.

## Launch Gate

The historical blocker was the missing root `@iris/agents` package. That package
now exists at `libs/iris/agents/` as a mobile-safe umbrella catalog over the
existing Iris agent implementation packages. The V2 companion model calls
`resolveIrisAgentsLaunchReadiness()` and renders a blocked state if the package
or required built-in agents are missing.

## Verification

The migration is guarded by:

- `libs/iris/agents/src/agents.test.ts`
- `apps/oshun/mobile/v2/V2CompanionApp.test.tsx`
- `V2/ue/Tools/check-v2-mobile-companion.py`

The checker validates the `@iris/agents` landing, mobile package dependencies,
route/tile wiring, docs, and CI workflow wiring.
