- music-app: 마스터채널 추가 (볼륨 0–200%, FX 항상 표시), 효과 토글 패널 제거
- routes-music.ts: 한글 파일명 Content-Disposition 500 에러 수정 (Buffer.ascii → JS replace)
- 모바일 오버레이 패턴 (max-width:640px): mind/accountant/investor/lawyer/language/pptx-wizard/dental-agent
각 앱 사이드바·채팅 패널을 fixed 오버레이로, 바텀 탭바로 네비게이션
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 스킬앱 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>
- PDF: skip references/bibliography section from text extraction
- PDF: add minimal system prompt for translate sessions (translation-only, no tool calls)
- Wizard: image download button per card + bulk download all
- Wizard: translation modal download button (saves as _ko.txt / _en.txt)
- Wizard: save papers.json immediately on upload, after text extraction, and before outline step
- Wizard: short image directory names (22 chars + timestamp suffix)
- Wizard: project-images scans workspace root dir alongside pptx/ folder
- Server: pptx/list scans only pptx/ folder (workspace root scanning removed after file migration)
- create_presentation: save output to workspace/pptx/{slug}/ instead of workspace root
- edit_presentation: fuzzy path search includes pptx/ subfolder
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Server:
- download-pdf-stream: check if PDF already exists (size > 1KB) → return
cached path immediately, skip all network requests
Client (startPrep):
- save pdfPaths from prepLog before reset → skip PMC download if path known
- skip text extraction if paperTexts[key] already loaded in memory
- text from project open (onOpenProjChange) now survives "다시 실행"
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Image extraction now immediately followed by per-figure mistral analysis
no manual button click needed: extract → analyze runs as one atomic flow
- Progress shows "이미지 분석 1/5..." inline with prep step
- Captions + 제외 filtering available before outline generation
- "🔍 재분석" button retained for manual uploads / re-run on failures
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
gpt-oss:120b-cloud refuses even short medical texts with "텍스트가 너무 길어...".
Add model:'mistral-large-3:675b-cloud' explicitly to three wizard /api/chat calls:
- translateAbstract() — abstract Korean translation
- chatStream() — PDF text chunk translation (used by translatePdfText)
- generateOutline() — slide outline generation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- pptx-wizard: add "🔍 이미지 분석" button in Step 2 image panel
* calls /api/pptx/analyze-image per figure via mistral vision
* shows per-image progress (1/10, 2/10...)
* "제외" caption → dimmed card + filtered from outline prompt
* captions shown below each thumbnail in the grid
- server: POST /api/pptx/analyze-image endpoint
* resolves /api/files/ path to workspace file, thumbnails if >300KB
* calls orchestration.secondary vision model (mistral-large-3:675b-cloud)
* caches results in project/.image-captions.json (skips on re-analysis)
- pptx-wizard: generateOutline() includes captions in imgList
* "제외" images filtered out before sending to LLM
* format: "/api/files/... (figure_p2_1) — 카플란-마이어 생존곡선 3그룹"
- skills-manager: fix getModelOverrideForUser() trigger filtering
* was returning skill model for ALL messages regardless of trigger keywords
* now only overrides when message matches skill triggers (same logic as buildPromptContext)
* presenter model (mistral) now only applies for 발표/pptx/슬라이드 keywords
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix pptx-wizard slide editor modal opening off-screen (header clipped)
when a saved drag position is restored on a fresh page load: clear the
CSS centering transform and clamp coordinates into the viewport.
- Add pptx-wizard.html and python-runner.html web UIs.
- Bump version to 2.8.1.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>