v3.0.8: 스킬앱 독립화 + 치과에이전트 + 음악/MCP/보이스 라우트 + DB 워크플로 개선

- 스킬앱 HTML 내장화: accountant/lawyer/investor/weather/music/mind/dental-agent
  각 앱이 SKILL_CONTENT를 HTML에 직접 내장 → .smallclaw/skills/ SKILL.md 파일 제거
- 새 게이트웨이 라우트: routes-dental, routes-music, routes-mcp, routes-voice
- skillContext 서버 지원: /api/chat에서 skill 컨텍스트를 callerCtx로 주입
- 세션 삭제 API: DELETE /api/admin/sessions/:username/:id
- Telegram defaultUsername: 어드민 계정 자동 추론
- Ollama /api/ollama/models에 vision 지원 여부 플래그 추가
- DB 워크플로 개선: workflow_images.py 대규모 리팩터링
- 아두이노 에뮬레이터 추가 개선 (arduino-emulator.html +400줄)
- 우즈베크어 학습 콘텐츠 및 MIDI 파일 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
kim
2026-06-21 17:07:58 +09:00
co-authored by Claude Sonnet 4.6
parent 0dae10693f
commit 9ad63ec8b1
131 changed files with 8980 additions and 3158 deletions
+30 -3
View File
@@ -210,6 +210,9 @@
border-bottom: 1px solid var(--line);
background: var(--panel-2);
}
#sidebar-tabs:has(button:only-child) {
display: none;
}
.sidebar-tab {
flex: 1;
@@ -239,8 +242,8 @@
/* ── Server log panel ─────────────────────────────── */
#sidebar-log-panel {
flex: 0 0 50%;
max-height: 50%;
flex: 0 0 33%;
max-height: 33%;
min-height: 0;
display: flex;
flex-direction: column;
@@ -252,7 +255,8 @@
min-height: 0;
}
#sidebar-log-panel.collapsed #sidebar-log-body,
#sidebar-log-panel.collapsed #sidebar-log-filters {
#sidebar-log-panel.collapsed #sidebar-log-filters,
#sidebar-log-panel.collapsed #sidebar-log-search {
display: none;
}
#log-collapse-btn {
@@ -332,6 +336,8 @@
#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; }
#log-search-input::placeholder { color: var(--muted); opacity: 0.6; }
.sidebar-section {
padding: 10px 12px;
border-bottom: 1px solid var(--line);
@@ -1598,6 +1604,22 @@
background: linear-gradient(90deg, #1e9d7b 0%, #1b75e6 55%, #0f4fba 100%);
transition: width 0.35s ease;
}
.sys-meter-track {
flex: 1;
height: 8px;
border-radius: 999px;
background: var(--line);
overflow: hidden;
}
.sys-meter-track > i {
display: block;
height: 100%;
width: 0%;
border-radius: 999px;
background: linear-gradient(90deg, #1e9d7b 0%, #1b75e6 55%, #0f4fba 100%);
transition: width 0.35s ease;
}
:root[data-theme="dark"] .sys-meter-track { background: #1e2535; }
#r-live-steps,
#r-recent-turns {
max-height: none !important;
@@ -3025,3 +3047,8 @@
/* ── Block flip-flop alternating highlight ───────────────────────────── */
.ff-block-even { background-color: rgba(59,130,246,0.18) !important; }
.ff-block-odd { background-color: rgba(251,146,60,0.18) !important; }
/* ── Log search ──────────────────────────────────────────────────────── */
.log-line.no-match { display: none !important; }
.log-hl { background: #fde047; color: #1a1a1a; border-radius: 2px; padding: 0 1px; }
:root[data-theme="dark"] .log-hl { background: #854d0e; color: #fef3c7; }