feat(backend): Django + OpenCode 백엔드 추가 — 5_django_backend/

앱이 기대하는 base-backend 계약(envelope·JWT·/chat/stream SSE)을 그대로 구현.
Django 는 로그인·세션 미러(SQLite/PG)·OpenCode 이벤트 번역만 맡고, 답변은 전용
OpenCode 인스턴스(opencode/ workspace, codeassist 에이전트)가 만듦.
- accounts: 이메일 로그인, access 60분 / refresh 14일, entra/config 는 501
- chat: 세션 목록·검색·메시지·취소 + POST /chat/stream 어댑터(part.delta→token,
  idle→usage/done, 클라 끊겨도 턴 감시 태스크가 DB 마무리, 첫 이벤트 60초 타임아웃)
- OpenCode 1.18 멀티 프로젝트라 모든 요청에 ?directory= 부착
- docs-lib 에 OpenCode SDK 1.18.6 타입 원본, pytest 32

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-16 21:28:31 +09:00
co-authored by Claude Fable 5.1
parent 08fdc1a258
commit 2869985139
49 changed files with 5884 additions and 5 deletions
+3 -3
View File
@@ -74,7 +74,7 @@ CodeAssist.exe (Tauri) ┌─ nginx(:80) 또는 Django
포트는 base-backend 가 쓰던 `8001` 그대로 → 프론트 `.env``VITE_DEV_API_TARGET` 도 안 바꿈. ABAP_OPENCODE 스택(8100/4096/3200)과 같은 VM 에 둘 땐 OpenCode 포트만 4097 로.
**Django 코드 위치 (결정 1 = 새로):** 이 repo 안 `../ABAP_CODE_ASSISTANT_BACKEND/` 로 제안. 이유: 프론트·Tauri·docs-lib·spec 이 다 여기라 계약 맞추기 쉽고, `docs-lib/` 패턴도 그대로. 별도 repo 원하면 폴더째 떼면 됨 — 지금 결정 안 해도 됨.
**Django 코드 위치 (결정 1 = 새로):** 이 repo 안 `5_django_backend/` 로 제안. 이유: 프론트·Tauri·docs-lib·spec 이 다 여기라 계약 맞추기 쉽고, `docs-lib/` 패턴도 그대로. 별도 repo 원하면 폴더째 떼면 됨 — 지금 결정 안 해도 됨.
## 5. 어댑터 — 뭘 만드나
@@ -105,7 +105,7 @@ OpenCode 는 페이지네이션·본문 검색·`isGenerating`·메시지별 usa
6. cancel → OpenCode `abort` + `is_generating=false`.
7. 프론트가 스트림 잃어도 `isGenerating` 폴링이 미러를 보니 답변 복구 — 기존 동작 그대로.
### 5.5 OpenCode workspace `../ABAP_CODE_ASSISTANT_BACKEND/opencode/`
### 5.5 OpenCode workspace `5_django_backend/opencode/`
- `AGENTS.md`: 한국어, ABAP/SAP 코드 즉답, 코드펜스 언어 태그, 절차 질문 금지, `explain` 이면 배경 설명.
- `opencode.json`: dev = OpenRouter, 고객사 = FabriX(게이트웨이 경유, 2차). `tools.question=false`. MCP `sap-icf`.
- `.opencode/agent/codeassist.md`: 시스템 프롬프트. `forcedSkill` 1차 무시.
@@ -128,7 +128,7 @@ OpenCode 는 페이지네이션·본문 검색·`isGenerating`·메시지별 usa
| 단계 | 내용 | 검증 |
|---|---|---|
| 0 | `../ABAP_CODE_ASSISTANT_BACKEND/docs-lib/` 에 OpenCode 서버 API(세션·메시지 parts·event), DRF, simplejwt 문서 떨어뜨림 | 카탈로그 README |
| 0 | `5_django_backend/docs-lib/` 에 OpenCode 서버 API(세션·메시지 parts·event), DRF, simplejwt 문서 떨어뜨림 | 카탈로그 README |
| 1 | 뼈대 복사 + envelope renderer + accounts(login/refresh/logout/me) + entra 501 | 프론트 로그인 통과 |
| 2 | 미러 테이블 + sessions list/create/messages/search | 목록·검색 화면 |
| 3 | opencode-ca workspace + compose + `OPENCODE_BASE_URL` | curl 로 세션 생성·프롬프트 |