Commit Graph
24 Commits
Author SHA1 Message Date
kimandClaude Sonnet 4.6 26f928a873 feat: STM32 Renode SSD1306 OLED 지원
- mocks-stm32.ts: _RN_SSD1306_MOCK_H 추가
  - 5×7 소프트웨어 폰트 포함 (96 ASCII)
  - 내부 framebuffer + display() → L:oD: 텔레메트리
  - Wire stub, GFX base class (_RN_GFX_DEFINED 가드)
- routes-arduino.ts: SSD1306 감지 → mock 주입
- arduino-emulator.html: L:O: (초기화) + L:oD: (프레임) 핸들러

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 20:30:25 +09:00
kimandClaude Sonnet 4.6 f0270be9fe fix: 캔버스 확대 배율 1.5x로 조정
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 18:04:04 +09:00
kimandClaude Sonnet 4.6 f79af9c990 fix: 캔버스 확대 오버레이 — img 스냅샷 → 라이브 캔버스 복사
- toDataURL 대신 requestAnimationFrame으로 소스 캔버스를 실시간 복사
- 화면 90% 이내에서 최대 정수 배율로 선명하게 확대 (imageSmoothingEnabled:false)
- 라이브 뷰이므로 애니메이션도 확대 창에서 실시간 반영

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 18:02:27 +09:00
kimandClaude Sonnet 4.6 0a8e8e1ea8 fix: 캔버스 확대 클릭 핸들러 — DOMContentLoaded 제거 (이미 발화 후)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 17:59:14 +09:00
kimandClaude Sonnet 4.6 b618b2e1cb feat: TFT/OLED 캔버스 클릭 시 확대 오버레이
- 클릭 → 화면 최대 3배 확대, 90vw/90vh 이내로 제한
- 오버레이 클릭 또는 ESC 키로 닫기
- cursor:zoom-in/zoom-out 표시

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 17:57:13 +09:00
kimandClaude Sonnet 4.6 11799e7553 fix: STM32 핀 매핑 수정 + Renode 로그 정리
- _RN_PNAME: digitalPinToPinName() 제거, PinName 직접 디코딩 (PB_3→PB3)
- _STM32_ARDUINO_PINS: variant_PILL_F103Cx 실제 순서로 교정
- Renode 서버 로그(console.error) 및 시리얼 모니터 INFO 제거

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 16:42:01 +09:00
kimandClaude Sonnet 4.6 5e9596e188 feat: STM32 Renode 시리얼 출력 수정 + 로그 정리
- uartBuf 버퍼 추가: SSE 연결 전 도착한 UART 데이터 재전송 (타이밍 이슈 해결)
- Renode 로그 라인버퍼링 + ANSI 코드 제거
- 시리얼 모니터에 WARNING/INFO 숨김, Machine started + ERROR만 표시
- ILI9341 mock: &SPI1 → nullptr 패치 (cast-macro address-of 오류 수정)
- STM32 보드 목록: 블루필/블랙필 한국어 표기 + Nucleo 3종 유지

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-30 13:52:12 +09:00
kimandClaude Sonnet 4.6 e520d09ca1 feat: STM32 Blue Pill 에뮬레이터 UI — 보드 SVG + GPIO LED 시각화
- Blue Pill SVG: 핀 서클(r=3), 폰트 4px bold, 온보드 LED/PWR/RST 버튼 확대
- GPIO 텔레메트리: _RN_PNAME()+Serial.write(STX/ETX)로 digitalWrite() 후 핀 상태 전송
- PA0 등 아날로그 핀 번호(0xC0=192) → digitalPinToPinName()으로 런타임 복원
- PC13 toggle 시 핀 서클 + 온보드 LED 동시 업데이트 (active LOW)
- PA9(TX)/PA10(RX) 시리얼 신호 깜빡임
- 코드 에디터 AI에 선택된 보드 이름(boardContext) 전달

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 22:07:06 +09:00
kimandClaude Sonnet 4.6 c13fa4fae5 feat: STM32 Renode 에뮬레이터 작동 — HAL 폴링 루프 + 비트밴드 + 타이밍 수정
- stm32f103_fixed.repl: Miscellaneous.BitBanding 추가로 HAL bit-band
  RCC 접근(0x42xxxxxx) 정상 처리, SRAM 크기 20KB로 수정,
  systickFrequency 8MHz로 낮춰 실시간 타이밍 보정
- stm32f1_rcc.py(~/.local): UTF-8 인코딩 선언, PLLRDY가 PLLON을
  동적으로 추적해 SystemClock_Config() HAL 폴링 루프 해소
- routes-arduino.ts: SystemClock_Config() 스케치에서 제거(bit-band
  우회), 보드 선택 6종 whitelist, Companion WS 재연결 스팸 수정
- arduino-emulator.html + code.js: Renode 세션 라우팅 + 보라 배지

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 21:10:50 +09:00
kimandClaude Sonnet 4.6 75a36cdc7d v3.2.2: 폴더블 폰 모바일 패널 토글 전면 수정 + 탐정앱 네트워크 분석 + 음성 유틸
- mobToggle 가드 640→1024: 음악·슬라이드·코드·날씨·언어·치과·ESP32·아두이노 앱
  (CSS max-width:1024px인데 JS guard가 >640으로 남아 폴드 내부화면에서 토글 불가)
- #mob-tabbar z-index 400/490→600, 패널 bottom 0→52px, backdrop inset 0 0 52px 0
  (backdrop이 탭바를 가려 열린 상태에서 다른 탭 전환 불가 문제 해결)
- 모든 innerWidth<=640 자동트리거 →<=1024 통일 (9개 앱)
- 탐정앱: 네트워크 분석 패널 (IP조회/Traceroute/Nmap/DNS/WHOIS/SSL/취약점/해시/웹스캔/배너/CVE)
- voice-utils.js 분리 — 서브앱 공통 음성입력+TTS 유틸
- app.js: 컨텍스트 토큰 게이지 (세션 목록에 tok/max 표시), usage 이벤트 처리
- routes-music.ts: Demucs 보컬분리 + YouTube 다운로드 잡 관리 (TTL 자동정리)
- server-v2.ts: 탐정 네트워크 API (traceroute/dns/whois/ssl/nmap/vuln/hash/webscan/cve)
- session.ts: resolveNumCtx export, /api/agent/session contextTokenEstimate 노출
- config.json: 카카오 채널 설정, ITS 교통 API 키 vault 참조
- styles.css: app-mic-btn / app-tts-btn 공통 스타일

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-27 19:16:59 +09:00
kimandClaude Sonnet 4.6 d74614cee1 v3.2.0: 카카오톡 연동 + 탐정앱 업그레이드 + 모바일 대응 강화
- 카카오톡 채널 챗봇 (오픈빌더 비동기 콜백 방식, 5초 제한 우회)
- 카카오 "나에게 보내기" OAuth 알림 (kakao-notify.ts)
- 채널 설정 UI + userMap으로 다중 사용자 계정 매핑
- 탐정앱: 탭(메모/체크리스트/타임라인), 우선순위, 검색, 보고서/고소장/접수안내 생성
- 모바일 브레이크포인트 640px → 1024px (갤럭시 폴드 대응)
- 프롬프트 파일 제한 상향 (USER.md 3000, SOUL.md/AGENTS.md 4000)
- 교통앱 마지막 선택 지역 localStorage 저장/복원
- docs/kakao-setup.md 작성

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 11:15:27 +09:00
kimandClaude Sonnet 4.6 9ad63ec8b1 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>
2026-06-21 17:07:58 +09:00
kim 209f3a3aef v3.0.6: RP2040 에뮬레이터 개선 — USB CDC, vendor화, 부팅 감지
- USB CDC 경로 복원: #define Serial Serial1 우회 제거
- rp2040js/avr8js/codemirror/xterm/monaco-editor vendor화
- /vendor 정적 라우팅 추가 (Express 5 catch-all 우회)
- 부팅 완료 타임아웃 감지 (Serial 출력 없어도 8초 후 RAF 전환)
- 리셋 시 Simulator 재생성으로 주변 장치 상태 초기화
- 시리얼 패널의 내부 메시지를 console.log로 이동
2026-06-19 15:49:36 +09:00
kimandClaude Sonnet 4.6 23831f79ba v3.0.5: RP2040 브라우저 에뮬레이터 — rp2040js 기반 전체 구현
- RP2040(Pico) 보드 감지·컴파일·에뮬레이션 지원 추가
  - Serial → Serial1(UART0) 자동 리다이렉트 (#define 삽입)
  - .uf2 파일 우선 추출, bootrom 자동 다운로드·캐싱
  - ELF .text 추출: arm-none-eabi-objcopy 대신 Node.js 내장 파서
  - HTTP 302 리다이렉트 자동 팔로우 (_httpsGetFollow)
- rp2040js 에뮬레이터: fast-path 초기화 루프, 피코 SVG 보드, GPIO25 LED
- 예외 처리: HardFault(#3)만 중지, 나머지 IRQ/SysTick 정상 통과
- UART onByte: TextDecoder stream 모드로 한글 UTF-8 정상 출력
- heartbeat 메시지 제거
- WiFi scan mock: WSCN 프로토콜로 C++ ↔ 브라우저 동기화, UI 편집 지원
- 에뮬레이터 팝업 → 코드 에디터 인라인 iframe 패널로 전환
- CDN 의존성 → /vendor/ 로컬 서빙 (xterm, Monaco)
- SSE 세션 idle timer (창 닫힘 후 5분 자동 종료)
- 업로드: 속도 자동 재시도(921600→460800→230400) + FlashMode fallback

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 13:37:56 +09:00
kimandClaude Sonnet 4.6 a994ac1b73 v3.0.2: server-v2 모듈 분리 — Arduino·PPTX 라우트 추출 (-2923줄)
- routes-arduino.ts: Arduino 컴파일/라이브러리/QEMU/ESP8266 에뮬 전체
- routes-pptx.ts: PPTX 생성/편집/PDF/이미지 API 전체
- mocks-esp32: WiFi.STA(_STAProxy), scanNetworks, DELETE() 수정
- mocks-esp8266: DELETE() 수정
- server-v2.ts: 16106 → 13183줄 (–18%)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 21:00:40 +09:00
kimandClaude Sonnet 4.6 18b9d5ba74 v3.0.1: 에뮬레이터 업그레이드 — 정지/재시작, UTF-8 시리얼, CodeMirror, 속도슬라이더
코드 에디터 (code.html / code.js)
- xterm → @xterm/xterm 5.5.0 마이그레이션 (UMD 전역명 AddonFit/AddonWebLinks)
- Monaco Editor 0.52.0 업그레이드
- AI 패널 CSS 변수 (--ai-hdr-bg 등) 다크/라이트 테마 분리
- Arduino/GCC/Python/JS 오류 패턴(_ERROR_PATTERNS) 확장

Arduino 에뮬레이터 (arduino-emulator.html)
- CodeMirror 5 스케치 에디터 내장 (C++ 구문 강조, BroadcastChannel 동기화)
- 속도 select → range 슬라이더 (1x~최대, 로그 스케일)
- 시리얼 UTF-8: 수동 바이트버퍼 → 스트리밍 TextDecoder({ stream:true })로 교체 (°C 깨짐 수정)
- 정지/시작 토글 버튼 추가 (AVR: togglePower, ESP32/ESP8266: pause↔restart)
- 회로→코드 버튼 (🤖) 추가
- 보드 타이틀 FQBN 기반 동적 설정

서버 (server-v2.ts)
- QEMU/ESP8266 restart 엔드포인트: old PTY exit 핸들러가 새 세션을 삭제하던 레이스컨디션 수정 (s.pty = null 가드)
- ESP8266 /pause 엔드포인트 추가
- 정지 시 DELETE → pause로 변경 (세션·firmware 유지, 재시작 가능)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-14 20:12:05 +09:00
kimandClaude Sonnet 4.6 e69606dc31 Arduino 에뮬레이터: 브레드보드 + JS SPICE(MNA) 시뮬레이터 내장
- 30행 × 10홀(a-e, f-j) 캔버스 브레드보드 — 와이어/저항/LED/커패시터/버튼 배치
- LED 삼각형 심볼 + 켜짐/꺼짐 글로우 렌더링
- MNA(Modified Nodal Analysis) Newton-Raphson SPICE 솔버 — 순수 JS, 60회 수렴
- 현실적 LED 모델: Is=4.2e-21 A (Red: Vf≈2.0V@20mA 정확)
- SPICE 넷리스트 자동 생성 + .cir 내보내기
- Arduino GPIO 핀 상태 → SPICE 전압원 실시간 반영 (D13 HIGH → 5V)
- 드래그 가능한 플로팅 팝업, 브레드보드/SPICE 탭 전환

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 22:50:20 +09:00
kimandClaude Sonnet 4.6 63918633cb Arduino emulator: 보드 패널 340px 확장 + canvas pixelated 렌더링
좌측 패널 280→340px 로 넓혀 OLED 캔버스가 256×128 CSS px 1:1
렌더링되도록 수정. max-width:100% 스케일 다운 시 bilinear 번짐
방지를 위해 image-rendering:pixelated 추가. overflow:hidden →
overflow-y:auto 로 변경해 패널 내용 클리핑 방지.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 18:04:41 +09:00
kimandClaude Fable 5 a12e671e80 Arduino 에뮬레이터: OLED 2x 렌더링으로 교체 — CSS 스케일링 의존 제거
aspect-ratio:2/1 미지원 브라우저에서 캔버스가 64px 자연 높이로
렌더링되어 가로로만 늘어나 '줄만 몇 개'로 보이는 버그 수정.

- canvas 128×64 → 256×128 (물리 픽셀 2배)
- JS 렌더러: 논리 픽셀 1개 → 2×2 물리 픽셀로 직접 기록
- CSS: image-rendering:pixelated + aspect-ratio 제거
  → max-width:100%; height:auto 로 브라우저 자연 스케일링

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 17:45:11 +09:00
kimandClaude Fable 5 cd269f017e Arduino 에뮬레이터: OLED 캔버스 크기 수정 + 플레이스홀더
- 캔버스 width:256px → width:100%; aspect-ratio:2/1
  (보드 패널 280px 기준 오버플로우·클리핑 해소)
- OLED 섹션 항상 표시, 연결 전 플레이스홀더:
  "OLED 연결 대기 / 0x3C / 0x3D" + 점선 격자
- 파란 점(dot) 인디케이터: 연결 전=꺼짐, displayOn=켜짐
- display.display() 수신 시 플레이스홀더 숨김·캔버스 표시
- display off(0xAE) 시 플레이스홀더 복원

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 17:25:23 +09:00
kimandClaude Fable 5 2c0cf8cdcd Arduino 에뮬레이터: TWI/I2C 버그 수정 — SSD1306/LCD 실제 동작
avr8js TWI API는 리턴값이 아니라 twi.completeXxx() 호출로
상태머신을 전진시키는 구조임. 기존 코드는 start()에서
completeStart()를 호출하지 않아 Wire.endTransmission()에서
영원히 대기하던 버그 수정.

- start()    → twi.completeStart()
- stop()     → twi.completeStop()
- connectToSlave() → twi.completeConnect(ack)
- writeByte() → twi.completeWrite(true)
- readByte()  → twi.completeRead(0xFF)

검증: SSD1306 "Hello!" 스케치 — 0.06s sim 만에 setup() 완료,
GDDRAM 1024바이트 전체 쓰기, 캔버스에 텍스트/그래픽 정상 렌더링.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 17:07:28 +09:00
kimandClaude Fable 5 3d62dc796e Arduino 에뮬레이터: SSD1306 OLED(128×64) I2C 에뮬레이션 추가
- AVRTWI connectToSlave에서 LCD(0x27/0x3F)와 OLED(0x3C/0x3D) 동시 지원
- SSD1306 프로토콜 파서:
  - control byte (0x00=cmd stream, 0x40=data stream)
  - 주요 명령: addressing mode, set col/page addr, display on/off,
    inverse, page/col low/high nibble, 2바이트 명령 처리
  - horizontal/vertical/page 어드레싱 모드 모두 지원
- GDDRAM(128×8 pages) 유지 → canvas 128×64 px 렌더링
  (픽셀 2× 스케일, 청백색 톤)
- displayOn 명령 수신 시 OLED 패널 자동 표시
- runFrame마다 dirty 플래그로 효율적 canvas flush

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 16:58:08 +09:00
kimandClaude Fable 5 cd999dcd12 Arduino 에뮬레이터: 라이브러리 관리 UI + LCD(HD44780) I2C 에뮬레이션
라이브러리 관리:
- GET/POST/DELETE /api/arduino/libs(/search/install/uninstall) 엔드포인트
- 에뮬레이터 헤더 '라이브러리' 버튼 → 설치됨/검색 탭 모달
  (설치·삭제, 검색 결과 20개, 상태 피드백)

LCD 에뮬레이션 (AVRTWI 기반):
- avr8js AVRTWI로 I2C 버스 인터셉트
- PCF8574 바이트 → HD44780 nibble 디코딩
- DDRAM/CGRAM 상태 유지, Clear/Home/SetAddr/EntryMode 명령 처리
- 보드 패널에 가상 16×2 LCD 렌더링 (백라이트 온/오프 표시)
- I2C 주소 0x27, 0x3F 모두 지원

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 16:54:29 +09:00
kimandClaude Fable 5 fae47a0962 Code editor: Arduino 에뮬레이터(avr8js) + ESP32 Web Serial 플래셔
- web-ui/arduino-emulator.html: avr8js 기반 ATmega328P 에뮬레이터
  (핀 상태 패널, 보드 LED, 시리얼 모니터, 속도 조절)
  - cpu.tick() 누락 수정: delay()/millis()/Serial 동작 안 하던 버그
  - 시리얼 라인 추적(serialLineSpan): D13 sys 메시지 끼어들 때 줄 깨짐 수정
- web-ui/esp32-flasher.html: Web Serial로 merged.bin 플래시
- POST /api/arduino/compile: arduino-cli로 uno/nano hex, esp32 merged.bin 컴파일
- POST /api/code/round: 클라이언트 주도 코드 에디터용 1라운드 SSE 엔드포인트
- code.js: 실행 모드에 Arduino 에뮬레이터 / ESP32 플래시 추가

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 16:24:45 +09:00