모바일 브라우저 백그라운드 탭 전환 시 LLM 응답 유실을 방지하는 패치 + 배포 리포.
├── Dockerfile # upstream clone → 패치 → 빌드 → 런타임 (all-in-one)
├── docker-compose.yml # risuai + llm-proxy 서비스
├── llm-proxy/ # 서버사이드 응답 버퍼링 사이드카
├── inject/
│ └── proxy-inject.js # 클라이언트 fetch 가로채기 + SSE 재연결
├── patches/
│ └── apply.cjs # 소스 패치 스크립트 (Dockerfile에서 자동 실행)
└── custom-manifest/
└── manifest.json # PWA manifest 커스터마이징
docker compose up -d --buildDockerfile이 자동으로:
- upstream 소스 clone
- 패치 적용 (proxy-inject.js 복사, 소스 수정)
- 프론트엔드 빌드
- 런타임 이미지 생성
Dockerfile의 NODEONLY_REF를 변경하고 재빌드:
# docker-compose.yml에서 build args 수정 또는:
docker compose build --build-arg NODEONLY_REF=v1.4.0 risuai
docker compose up -dBrowser (proxy-inject.js)
│ window.userScriptFetch → /llm-proxy/request
▼
NodeOnly Express (reverse proxy)
│ /llm-proxy/* → llm-proxy:6100
▼
llm-proxy sidecar
│ HTTP/2 relay → LLM API
│ 응답 chunk 서버사이드 버퍼링
▼
Browser 포그라운드 복귀
GET /llm-proxy/stream/:id?offset=N
└─ 누락분부터 SSE 재전송
| 파일 | 변경 |
|---|---|
index.html |
proxy-inject.js 로드 스크립트 주입 |
src/ts/globalApi.svelte.ts |
!throughProxy 조건 제거 |
server/node/server.cjs |
compression skip + reverse proxy route |
| URL | 설명 |
|---|---|
:6001/llm-proxy/admin |
대시보드 (요청 목록, 로그, 비용) |
:6001/llm-proxy/health |
헬스체크 |
- Docker / Docker Compose
- HTTPS 환경 (Cloudflare Tunnel 등) —
crypto.subtle필요