Files
homeclaw/package.json
T
kimandClaude Sonnet 5 c271c96bdb v4.1.23: NVR MJPEG 스트림 메모리 누수 수정 — OOM으로 RDP까지 끊기던 사고 대응
homeclaw 게이트웨이 node 프로세스가 34GB+까지 자라 커널 OOM killer에
강제종료되고, 그 여파로 systemd-oomd가 GNOME 세션(D-Bus 포함)까지 같이
죽여 원격데스크탑 연결이 끊기는 사고가 하루 4회 발생. 원인은 NVR 라이브
MJPEG 프레임 파서와 응답 스트림 두 곳의 무제한 버퍼 증식.

- nvr.ts: 손상 스트림에서 SOI만 오고 EOI가 안 오면 프레임 버퍼가 무한
  이어붙기하는 것을 20MB 캡으로 차단 (MAX_FRAME_BYTES)
- nvr.ts: res.write()가 false를 반환할 때(클라이언트가 못 따라옴) ffmpeg
  stdout을 pause()하고 'drain'에서 resume()하는 백프레셔 처리 추가 —
  프레임 캡만으로는 재발을 못 막았던 잔여 누수의 실제 원인
- .smallclaw/config.json, config.ts: nvr 설정 블록(host/rtspPort/경로
  템플릿/계정) 추가, password는 vault 경유
- nvr-app.html: 4분할→5분할 라이브, 녹화 목록 조회 탭 추가
- index.html: 홈CCTV 앱 런처 버튼 추가

homeclaw.service에 MemoryMax=8G/MemoryHigh=6G cgroup 상한을 시스템 드롭인
으로 별도 적용(이 커밋에는 미포함, systemd 유닛 파일은 저장소 밖)해
재발해도 GNOME 세션까지는 안 죽도록 안전망도 걸어둠.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-20 16:38:39 +09:00

75 lines
1.8 KiB
JSON

{
"name": "smallclaw",
"version": "4.1.23",
"description": "Local AI agent framework powered by Ollama - OpenClaw alternative",
"main": "dist/index.js",
"bin": {
"smallclaw": "./dist/cli/index.js"
},
"scripts": {
"prepare": "npm run build",
"build": "tsc",
"dev": "tsx src/cli/index.ts",
"start": "node dist/cli/index.js",
"gateway": "tsx src/gateway/server-v2.ts",
"test": "tsx tests/test-v2.ts",
"test:desktop": "tsx tests/desktop-tools.ts"
},
"files": [
"dist/",
"web-ui/",
"workspace/SOUL.md",
"workspace/SELF.md",
"workspace/IDENTITY.md",
"workspace/USER.md",
"workspace/MEMORY.md",
"workspace/AGENTS.md",
"workspace/TOOLS.md",
"workspace/BOOT.md"
],
"keywords": [
"ai",
"agent",
"ollama",
"automation",
"openclaw"
],
"author": "",
"license": "MIT",
"dependencies": {
"@xterm/addon-fit": "^0.10.0",
"@xterm/addon-web-links": "^0.11.0",
"@xterm/xterm": "^5.5.0",
"avr8js": "^0.21.0",
"better-sqlite3": "^12.9.0",
"commander": "^14.0.3",
"cors": "^2.8.6",
"croner": "^10.0.1",
"dotenv": "^17.4.2",
"esptool-js": "^0.4.1",
"express": "^5.2.1",
"imapflow": "^1.3.3",
"mailparser": "^3.9.8",
"monaco-editor": "^0.52.0",
"node-pty": "^1.1.0",
"nodemailer": "^8.0.7",
"ollama": "^0.6.3",
"playwright": "^1.59.1",
"pptxgenjs": "^4.0.1",
"rp2040js": "^1.3.3",
"tesseract.js": "^7.0.0",
"ws": "^8.20.0"
},
"devDependencies": {
"@types/better-sqlite3": "^7.6.13",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.6",
"@types/mailparser": "^3.4.6",
"@types/node": "^25.6.0",
"@types/nodemailer": "^8.0.0",
"@types/ws": "^8.18.1",
"tsx": "^4.21.0",
"typescript": "^5.3.0"
}
}