일관된 디자인 토큰(mobile/lib/theme/app_theme.dart)을 새로 만들고 전체 화면에 적용: - 라이트/다크 ColorScheme을 명시적으로 정의(기존엔 라이트만 있어서 다크 모드 기기에서 깨져 보였음), AppBar/Card/입력창/버튼/칩/배너 등 컴포넌트 테마를 통일. "분신" 뱃지 전용 twin 강조색(amber) 분리 - 화면마다 제각각이던 TextField 테두리를 전부 테마 하나로 통일 (chat_screen의 L1 편집창에 하드코딩돼 있던 Colors.white70 배경도 제거 — 다크 모드에서 흰 배경에 흰 글씨로 안 보이던 실제 버그였음) 화면별 개선: - signup: 로고 마크 + 안내 문구 추가, 아이콘 붙인 입력창 - 대화 목록: 앱바 아이콘 4개를 겹쳐놨던 걸 정리(더보기 메뉴로 이동), 색상 아바타, 빈 상태 안내, 확장형 FAB - message_bubble: 좌우 비대칭 말풍선 모양(꼬리 느낌), 타임스탬프 추가, 분신 뱃지를 아이콘+칩 형태로 - chat: 거부권 버튼에 확인 다이얼로그 추가(실수로 눌러도 되돌릴 수 없는 동작이라 안전장치), L1/에스컬레이션 패널 카드화 - contacts/inbox/sessions/autonomy_settings/data_flow/onboarding: 아바타, 섹션 카드, 빈 상태, 화이트리스트 칩 UI 등 톤 통일 주의: 이 작업 환경에는 Flutter SDK가 없어 flutter analyze/run/test로 직접 검증하지 못했음. 아이콘 이름 등은 기존 코드에 이미 쓰인 것 위주로 맞췄지만, 로컬에서 flutter analyze 먼저 돌려보는 걸 권장. |
||
|---|---|---|
| .. | ||
| android | ||
| lib | ||
| test | ||
| .gitignore | ||
| .metadata | ||
| README.md | ||
| analysis_options.yaml | ||
| pubspec.lock | ||
| pubspec.yaml | ||
README.md
분신 mobile (Flutter)
Phase 1 클라이언트 (docs/roadmap.md §2.3 / A3). v1은 Android 빌드만 대상으로 한다
(docs/tech-design.md §8).
지금 있는 것
- 초대 코드 가입 (
POST /auth/signup) + Bearer 세션 - 말투 샘플 온보딩(기기 로컬 저장; 최종 카피는 PoC 이후)
- 대화방 목록/생성 (
GET/POST /conversations) — 수동 ID 입력 제거 - 연락처 CRUD + 대화 시작 (
/users/:id/contacts) - 채팅 히스토리 로드 + WebSocket 수신
- 분신 초안 / L1 승인(수정·버리기·재초안·승인 발송)
- 분신 뱃지 · 거부권 · 되돌리기
- 사후 알림 함 (
GET /users/:id/escalation-logs) - 자율성 L0~L2 + 화이트리스트 CRUD UI
실행
# core-backend + ai-service 가 떠 있어야 실제 호출이 된다
cd mobile
flutter pub get
# Android 에뮬레이터 → 호스트의 core-backend(기본 8080)
flutter run --dart-define=CORE_API_BASE=http://10.0.2.2:8080
# 실기기/로컬 네트워크
flutter run --dart-define=CORE_API_BASE=http://<your-lan-ip>:8080
E2E
API 레벨 (클라우드/CI에서 실행 가능)
# core-backend :8080 + ai-service :8001 기동 후
export ADMIN_API_TOKEN=dev-admin-token
python3 scripts/e2e_a3.py
A3 체크리스트(가입·연락처·대화·히스토리·draft/L1·에스컬레이션·되돌리기·거부권·화이트리스트)를 HTTP로 검증한다.
에뮬레이터/실기기 UI 탭 (Android SDK 필요)
- 초대 코드로 가입 → 말투 샘플 저장(또는 나중에)
- 연락처에 상대 사용자 ID 등록 → 대화 시작
- 메시지 전송 · 새로고침 후 히스토리 유지
- 초안 요청 → L1 패널에서 수정/버리기/승인 발송 → 분신 뱃지 확인
- 민감 문장으로 에스컬레이션 → 사후 알림 함 진입
- 분신 메시지 되돌리기 · 거부권
- 자율성 L0~L2 + 화이트리스트 추가/삭제
로컬 DB (drift + SQLCipher)
말투 샘플·온보딩 플래그는 lib/db/ 암호화 SQLite에 저장한다. 패스프레이즈는
flutter_secure_storage. Linux 개발 호스트에 libsqlcipher.so가 없으면 메모리 폴백으로
기동한다(Android 릴리즈 경로에서는 SQLCipher 사용).
# Linux에서 drift 테스트/암호화 DB를 쓰려면
sudo apt-get install -y libsqlite3-dev libsqlcipher1
아직 없는 것
- Firebase 프로젝트의 실제 FCM registration token 연동 (
google-services.json) - 오프라인 메시지 큐 / 멀티디바이스 실시간 설정 동기화 고도화
- 온보딩 말투 UX 디테일 (PoC #1 결과는 맨 마지막에 반영)
- iOS 빌드 (v1 범위 밖)