Context
iOS has a local Expo module for the rich composer: apps/mobile/modules/t3-composer-editor. It registers T3ComposerEditor for Apple only and backs the composer with a UIKit UITextView implementation.
Android currently falls back to apps/mobile/src/native/T3ComposerEditor.tsx, which uses a plain React Native TextInput wrapped by expo-paste-input.
Why this matters
The thread composer and new-task draft screen pass skills, selection state, and pasted image callbacks into ComposerEditor. The iOS native implementation provides richer behavior than the Android fallback:
- inline
@file mention chips with file icons
- inline skill chips
- atomic token deletion behavior
- copy/cut serialization back to source text instead of attachment placeholders
- controlled selection/value sync via native event counts
- native pasted-image URI events
- imperative
focus, blur, and setSelection
Feature examples
- In
ThreadComposer, users can mention files and skills while drafting a turn.
- In
NewTaskDraftScreen, users can compose a new task with skill chips and pasted images.
Acceptance criteria
- Add an Android implementation for the
T3ComposerEditor native view, or an equivalent native module with the same JS contract.
- Match the iOS prop/event surface used by
apps/mobile/src/native/T3ComposerEditor.ios.tsx.
- Preserve source text semantics for inline tokens during edit, copy, cut, delete, and selection updates.
- Support native image paste callbacks on Android.
- Keep the existing JS fallback path safe when the native view is unavailable.
- Add focused tests for shared adapter logic and Android-native behavior where practical.
Current test coverage note
There are TypeScript tests around composer revision and image conversion (apps/mobile/src/native/composerEditorRevision.test.ts, apps/mobile/src/lib/composerImages.test.ts), but I did not find native Swift/UIKit tests for the existing iOS implementation or Android native tests for this surface.
Context
iOS has a local Expo module for the rich composer:
apps/mobile/modules/t3-composer-editor. It registersT3ComposerEditorfor Apple only and backs the composer with a UIKitUITextViewimplementation.Android currently falls back to
apps/mobile/src/native/T3ComposerEditor.tsx, which uses a plain React NativeTextInputwrapped byexpo-paste-input.Why this matters
The thread composer and new-task draft screen pass
skills, selection state, and pasted image callbacks intoComposerEditor. The iOS native implementation provides richer behavior than the Android fallback:@filemention chips with file iconsfocus,blur, andsetSelectionFeature examples
ThreadComposer, users can mention files and skills while drafting a turn.NewTaskDraftScreen, users can compose a new task with skill chips and pasted images.Acceptance criteria
T3ComposerEditornative view, or an equivalent native module with the same JS contract.apps/mobile/src/native/T3ComposerEditor.ios.tsx.Current test coverage note
There are TypeScript tests around composer revision and image conversion (
apps/mobile/src/native/composerEditorRevision.test.ts,apps/mobile/src/lib/composerImages.test.ts), but I did not find native Swift/UIKit tests for the existing iOS implementation or Android native tests for this surface.