v3.0.7: 우즈베크어 학습 앱 + 서버로그 필터 + 세션 삭제 동기화

- 우즈베크어 언어 교육 스킬(SKILL.md) 및 language-app.html 추가
- /api/language/* 백엔드 라우트 (레슨·플래시카드·퀴즈·TTS·진행도)
- 메인 페이지에 언어 앱 버튼 추가
- 서버 로그 레벨 필터(INFO/WARN/ERROR) — 선택 레벨만 표시, 빈 결과 안내
- 과거 세션 서버↔클라이언트 동기화 (/api/chat/sessions GET)
- 세션 삭제 시 서버 파일도 함께 삭제 (DELETE /api/chat/sessions/:id)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
kim
2026-06-20 11:44:59 +09:00
co-authored by Claude Sonnet 4.6
parent 209f3a3aef
commit 0dae10693f
9 changed files with 1544 additions and 6 deletions
+20 -1
View File
@@ -251,7 +251,8 @@
flex: 0 0 auto;
min-height: 0;
}
#sidebar-log-panel.collapsed #sidebar-log-body {
#sidebar-log-panel.collapsed #sidebar-log-body,
#sidebar-log-panel.collapsed #sidebar-log-filters {
display: none;
}
#log-collapse-btn {
@@ -313,6 +314,24 @@
:root[data-theme="dark"] .log-line.warn .log-msg { color: #fbbf24; }
:root[data-theme="dark"] .log-line.error .log-msg { color: #f87171; }
/* 로그 레벨 필터 버튼 */
.log-filter-btn {
background: none; border: 1px solid var(--line); border-radius: 4px;
padding: 1px 6px; font-size: 10px; font-weight: 700; color: var(--muted);
cursor: pointer; font-family: 'IBM Plex Mono', monospace; transition: .12s;
letter-spacing: .03em;
}
.log-filter-btn:hover { border-color: var(--brand); color: var(--brand); }
.log-filter-btn[data-level="log"].active { border-color: #60a5fa; color: #60a5fa; background: rgba(96,165,250,.1); }
.log-filter-btn[data-level="warn"].active { border-color: #fbbf24; color: #fbbf24; background: rgba(251,191,36,.1); }
.log-filter-btn[data-level="error"].active { border-color: #f87171; color: #f87171; background: rgba(248,113,113,.1); }
.log-filter-all, .log-filter-none { font-weight: 400; letter-spacing: 0; }
/* 필터 숨김: filter-active일 때 hide-* 클래스로 해당 레벨 숨김 */
#sidebar-log-body.filter-active.hide-log .log-line.lv-log { display: none; }
#sidebar-log-body.filter-active.hide-warn .log-line.lv-warn { display: none; }
#sidebar-log-body.filter-active.hide-error .log-line.lv-error { display: none; }
.sidebar-section {
padding: 10px 12px;
border-bottom: 1px solid var(--line);