Commit Graph
21 Commits
Author SHA1 Message Date
lee-hyeon-cheolandClaude Fable 5.1 eb3da84f22 feat(phoenix): /phoenix/v1/traces POST 는 비번 없이 — -13 이 8914 경유로 trace 보내는 길
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 17:16:31 +09:00
lee-hyeon-cheolandClaude Fable 5.1 ac7a459dfc feat(observability): /phoenix/ 중계 — 바깥 포트가 8914 뿐이라 백엔드 뒤에 Phoenix 화면 붙임(Basic 잠금, 접두어 떼고 전달). 로컬 e2e(HTML·자산·GraphQL·REST) 통과
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 16:34:38 +09:00
lee-hyeon-cheolandClaude Fable 5.1 68b55907f0 fix(observability): Phoenix 는 OTLP protobuf 만 받음(JSON 415) — opentelemetry-proto 로 직렬화, 로컬 Phoenix 실측 통과
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 15:43:26 +09:00
lee-hyeon-cheolandClaude Fable 5.1 e60c5bc273 feat(observability): Phoenix 대상 추가 — 같은 span 에 OpenInference 속성 동봉, PHOENIX_HOST 로 /v1/traces. -12 는 도커 불가라 pip 로 뜨는 Phoenix 로 감(deploy/phoenix)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 15:39:08 +09:00
lee-hyeon-cheolandClaude Fable 5.1 e801ae6a6f feat(langfuse): 게이트웨이 fabrix 트레이스는 LANGFUSE_TRACE_GATEWAY=1 일 때만 — 질문 하나 = 행 하나 유지
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 14:08:55 +09:00
lee-hyeon-cheolandClaude Fable 5.1 c9cc6b7eeb feat(langfuse): 목록 한 줄 = 채팅(질문/답/토큰), 트리 = OpenCode 도구 호출(SAP 조회·위키 read·grep) 순서대로
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 14:06:11 +09:00
lee-hyeon-cheolandClaude Fable 5.1 07d733ea30 fix(langfuse): 테스트가 로컬 .env 의 LANGFUSE_HOST 로 진짜 전송하던 것 차단(autouse) + 게이트웨이 루트 span 에 질문/답 실음
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 14:01:05 +09:00
lee-hyeon-cheolandClaude Fable 5.1 678ea2482f fix(langfuse): 루트 span 에도 observation.input/output — 트레이스 화면 입출력 표시용
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 13:54:36 +09:00
lee-hyeon-cheolandClaude Fable 5.1 55f2e8fb60 fix(langfuse): v4 가 옛 ingestion 을 거부 — OTLP/HTTP JSON(/api/public/otel/v1/traces)으로 전환, 로컬 Langfuse 실측 통과. 사용자·세션 속성은 자식 span 에도 복사
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 13:53:20 +09:00
lee-hyeon-cheolandClaude Fable 5.1 0321050053 feat(observability): Langfuse 전송 — 턴 마무리(사용자 trace)·게이트웨이(FabriX generation) 두 훅, SDK 없이 HTTP. deploy/langfuse 에 compose+env+반입 절차
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-22 13:44:12 +09:00
lee-hyeon-cheolandClaude Fable 5.1 5277481513 feat(chat): 생각 과정(reasoning·도구 스텝) 토글 + 작성 중 스피너·경과 초 — ABAP_OPENCODE 와 같은 모양. 백엔드가 step 이벤트로 흘림. 0.1.2
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 21:03:51 +09:00
lee-hyeon-cheolandClaude Fable 5.1 b08afa389a fix(gateway): FabriX 가 맞는 인증 조합에도 간헐 401 — 4개 조합 뒤 유력 조합 1초 쉬고 한 번 더
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 19:41:41 +09:00
lee-hyeon-cheolandClaude Fable 5.1 9bd0849f27 chore(gateway): 인증 조합별 상류 상태코드 로그 + deploy.sh 가 TOKEN_PREFIX=bearer 채움
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 18:39:28 +09:00
lee-hyeon-cheolandClaude Fable 5.1 377a36a313 chore(gateway): 요청 파트 종류·선택 모델 한 줄 로그 — 이미지 분기 확인용
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 18:23:35 +09:00
lee-hyeon-cheolandClaude Fable 5.1 2e7bae4c06 feat: 스니펫 공용화 — 서버 PostgreSQL 테이블 + API, 프론트는 브릿지 대신 HTTP
결정(9/21): 공용 하나, 개인 로컬 없음.
- backend apps/snippets: Snippet(name PK·desc·body·category) + SnippetUsage(사람별 count/last_used).
  GET/POST /api/v1/snippets, PUT/DELETE /snippets/{name}, POST /snippets/{name}/use — 옛 브릿지 5개와 1:1,
  이름 정규화·중복 409·빈 내용 400 규칙 동일. import_snippets 커맨드로 옛 snippets.db 적재. 테스트 3개
- frontend snippets.api.ts 만 HTTP 로 교체(훅·페이지·타입 무변경). 테스트 axios-mock-adapter 로
- ponytail: Tauri 로컬 SQLite 커맨드는 미사용 상태로 남김. 지울 때 Rust+브릿지 테스트 함께

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 16:06:14 +09:00
lee-hyeon-cheolandClaude Fable 5.1 113d97c77c feat(backend): 이미지 요청만 vision 모델로 — OPENCODE_VISION_MODEL
로컬(OpenRouter)은 게이트웨이를 안 거쳐서 백엔드가 OpenCode prompt 에 model{providerID,modelID} 를 실어 분기.
기본 openrouter/google/gemma-4-31b-it(고객사 605 와 같은 모델). 텍스트는 기본 GLM 5.2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 14:54:04 +09:00
lee-hyeon-cheolandClaude Fable 5.1 d4a5f20787 feat: 관리자 대시보드 — 토큰·비용·응답시간 집계 API + 앱 /admin 페이지
- backend apps/stats: GET /api/v1/admin/stats?from&to → totals / byUser / byDay. ChatMessage(assistant) 집계만, is_superuser 아니면 403. 테스트 3개
- frontend features/admin: 요약 카드 4개(요청·토큰·비용·평균 응답), 일별 토큰 막대(div), 사용자별 표, 기간 프리셋(오늘/7/30/90일). 헤더에 ADMIN 만 아이콘. 테스트 2개

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 13:39:06 +09:00
lee-hyeon-cheolandClaude Fable 5.1 aa37cef13d feat(backend): 스트림 타임아웃 env 화 — 첫 이벤트 300s, FabriX 조각 간 300s 기본
Gemma4 가 큐 밀리면 '안녕'에도 200초라 첫 이벤트 60s 로는 no-events 로 잘림.
STREAM_FIRST_EVENT_TIMEOUT_S / STREAM_TURN_TIMEOUT_S / AAF_FABRIX_READ_TIMEOUT_S / AAF_FABRIX_TOTAL_TIMEOUT_S 를 .env 로.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 13:31:00 +09:00
lee-hyeon-cheolandClaude Fable 5.1 7ad48732ae feat(gateway): 이미지 붙은 요청만 vision 모델(Gemma4)로 — 텍스트는 기본 339
Gemma4 가 '안녕' 한 단어에 94s(580 은 188s) 라 텍스트 기본으로는 못 씀.
AAF_FABRIX_VISION_MODEL_ID 가 있으면 messages 에 image_url 파트가 있을 때만 그 모델로 x-llm-model-id 를 바꿈.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-18 10:34:55 +09:00
lee-hyeon-cheolandClaude Fable 5.1 435952f25c feat(backend): 사내 LLM(FabriX) 게이트웨이 /api/ito + OpenCode FabriX 설정 렌더
- apps/gateway: OpenCode→FabriX 통과 중계. 헤더 3종 인증, x-llm-model-id 로 모델 선택, 401 시 Bearer/날것×클라이언트 헤더 재시도, 모델 허용 목록. ABAP_OPENCODE apps_ito 통째 복사 대신 200줄로
- opencode/opencode.fabrix.json.tmpl + render_opencode.py — .env AAF_* 로 렌더
- .env.example AAF 블록(기본 605 Gemma4, TOKEN_PREFIX=bearer). 파서가 줄 끝 # 주석을 값으로 읽던 것 수정
- tests/test_gateway.py 9개(MockTransport)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 16:34:53 +09:00
leehc991028andClaude Fable 5.1 2869985139 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>
2026-09-16 21:28:31 +09:00