ltcai 0.1.4 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,6 +10,76 @@ LTCAI # → http://localhost:4825
10
10
 
11
11
  ---
12
12
 
13
+ ## v0.1.9 변경사항
14
+
15
+ ### Security
16
+ - 세션 TTL 7일 → 24시간, sliding refresh (활동시 자동 연장)
17
+ - 파일 업로드 magic-number 검증 (PDF/DOCX/PNG 등 시그니처 확인)
18
+ - Rate limiting: `/chat` 30/min, `/agent` 6/min, `/upload` 12/min (per user, 토큰 버킷)
19
+
20
+ ### Reliability
21
+ - PyMuPDF 파일 핸들 누수 수정, ollama serve 좀비 방지 (detach)
22
+ - knowledge_graph metadata 손상 row 안전 통과
23
+ - 백그라운드 asyncio 태스크 예외 로깅 (`_spawn` 헬퍼)
24
+ - silent except → logging.warning (sessions/config 로딩)
25
+
26
+ ### Tests
27
+ - `tests/unit/test_security.py` 16개 추가 (bcrypt, MIME, rate limit, harness risk)
28
+
29
+ ---
30
+
31
+ ## v0.1.8 변경사항
32
+
33
+ ### Added
34
+ - **PWA (Progressive Web App)** — iPad / Android / Galaxy Tab 홈화면 설치 지원
35
+ - `manifest.json` + Service Worker (`sw.js`) + 아이콘 4종 (192px, 512px, apple-touch-icon 180px, favicon 32px)
36
+ - iOS Safari: 공유 버튼 → "홈 화면에 추가" → 앱처럼 전체화면 실행
37
+ - Android Chrome: 주소창 "설치" 버튼 → 홈화면 앱
38
+ - `viewport-fit=cover` — iPhone Dynamic Island / 노치 안전영역 확장
39
+ - **서버 네트워크 공개 바인딩** — 기본 host `0.0.0.0`으로 변경
40
+ - 같은 Wi-Fi에서 모든 기기(`http://<Mac IP>:4825`)로 바로 접근 가능
41
+ - 시작 배너에 로컬 URL + 네트워크 IP 자동 출력
42
+ - **Windows 서버 호환성**
43
+ - `computer_screenshot`: macOS `screencapture` → Windows/Linux `pyautogui` fallback
44
+ - `computer_open_app` / `computer_open_url`: `open -a` / `cmd /c start` / `xdg-open` 플랫폼 자동 분기
45
+
46
+ ### 배포 현황
47
+ - npm ✅
48
+ - PyPI ✅
49
+ - VS Code Marketplace ✅
50
+ - Open VSX ✅
51
+
52
+ ---
53
+
54
+ ## v0.1.7 변경사항
55
+
56
+ ### Added
57
+ - **모바일 반응형 UI** — 폰/태블릿 화면 크기에 자동 대응
58
+ - 사이드바 슬라이드 드로어 (☰ 햄버거 버튼, 오버레이 탭으로 닫기)
59
+ - iOS 소프트 키보드 대응 (`100dvh`), 노치/홈바 안전영역 (`safe-area-inset`)
60
+ - ops-strip 카드 가로 스크롤 압축, textarea 자동 줌 방지
61
+ - 브레이크포인트 3단계: 900px / 768px / 480px
62
+
63
+ ---
64
+
65
+ ## v0.1.6 변경사항
66
+
67
+ ### Added
68
+ - **LATTICEAI_ENABLE_GRAPH** 환경변수 — Data Graph를 퍼블릭 배포에서 완전히 비활성화하는 토글 (기본값 `true`)
69
+ - `false` 설정 시 모든 그래프 API 404, 인제스트 건너뜀, 사이드바 버튼 자동 숨김
70
+
71
+ ---
72
+
73
+ ## v0.1.5 변경사항
74
+
75
+ ### Added
76
+ - **Data Graph** — 채팅·AI 답변·업로드 문서를 SQLite 지식 그래프로 자동 구조화, `/graph`에서 Canvas 기반 Force-directed 시각화
77
+ - **Graph RAG** — 그래프 검색 결과를 채팅 컨텍스트에 자동 주입하여 이전 대화·문서 참조 강화
78
+ - **Telegram 원격 제어** — 인라인 키보드 메뉴로 상태 조회, 모델 관리, 스크린샷, 그래프 통계 원격 제어
79
+ - 어드민 세션 핸드오프 보안 강화 — URL 파라미터 → `sessionStorage` 1회 읽기 방식으로 교체
80
+
81
+ ---
82
+
13
83
  ## v0.1.4 변경사항
14
84
 
15
85
  ### Added
@@ -39,11 +109,42 @@ LTCAI # → http://localhost:4825
39
109
 
40
110
  ---
41
111
 
112
+ ## v0.1.1 변경사항
113
+
114
+ ### Added
115
+ - 비밀번호 변경 API (`POST /account/change-password`)
116
+ - 웹 UI 비밀번호 변경 모달 (헤더 계정 아이콘)
117
+
118
+ ---
119
+
120
+ ## v0.1.0 변경사항
121
+
122
+ ### Added
123
+ - FastAPI 브릿지 서버 (port 4825)
124
+ - Apple Silicon MLX 로컬 모델 지원 (Gemma 4, Qwen 2.5 등)
125
+ - 클라우드 모델 지원 (OpenAI, Groq, Together, OpenRouter 등)
126
+ - VS Code / Cursor / Antigravity 확장
127
+ - Telegram 봇 (로컬 AI 미러 + Codex 클라우드 봇)
128
+ - 어드민 패널 (`/admin`)
129
+ - P-Reinforce 지식 정원 엔진
130
+ - MCP 서버 연동
131
+ - Ollama / vLLM / LM Studio / llama.cpp 연동
132
+
133
+ ### Security
134
+ - 모든 민감 엔드포인트 인증 적용
135
+ - SameSite=Lax 쿠키 (CSRF 방어)
136
+ - scrypt 비밀번호 해싱
137
+ - tempfile 레이스 컨디션 수정
138
+ - `run_command()` 위험 플래그 차단
139
+
140
+ ---
141
+
42
142
  ## 아키텍처
43
143
 
44
144
  ```
45
145
  Lattice AI/
46
146
  ├── server.py # FastAPI 브릿지 서버 (port 4825)
147
+ ├── knowledge_graph.py # SQLite Data Graph + Graph RAG 저장소
47
148
  ├── llm_router.py # 로컬/클라우드 모델 라우터
48
149
  ├── tools.py # 워크스페이스 도구 (파일, 터미널, 스크린샷 등)
49
150
  ├── p_reinforce.py # P-Reinforce 지식 정원 엔진
@@ -169,6 +270,7 @@ docker run --rm -p 4825:4825 \
169
270
  - `LATTICEAI_MODE=public` 설정
170
271
  - 클라우드 API 키 설정 (`OPENAI_API_KEY` 등)
171
272
  - `LATTICEAI_INVITE_CODE`를 비공개 값으로 설정
273
+ - `LATTICEAI_ENABLE_GRAPH=false` — Data Graph를 공개 서버에서 숨기려면 설정
172
274
  - `/data`에 영구 볼륨 마운트
173
275
  - HTTPS 리버스 프록시 앞에 두기 (nginx, Caddy 등)
174
276
 
@@ -325,6 +427,20 @@ curl -X POST localhost:4825/garden \
325
427
 
326
428
  ---
327
429
 
430
+ ## Data Graph / Graph RAG
431
+
432
+ 웹 채팅과 AI 답변, 업로드 문서(PDF/DOCX/XLSX/PPTX/TXT/CSV)를 `~/.ltcai/knowledge_graph.sqlite`에 자동 저장합니다.
433
+
434
+ - 채팅/AI 답변: `Message`, `AIResponse`, `Person`, `Conversation`, `Topic`, `Decision`, `Task`
435
+ - 문서 업로드: `File`, `Chunk`, `Page`, `Slide`, `Sheet`, `Image`, `Topic`
436
+ - 원본 파일 blob: `~/.ltcai/knowledge_graph_blobs/`
437
+ - 시각화: `http://localhost:4825/graph`
438
+ - API: `/knowledge-graph/graph`, `/knowledge-graph/search`, `/knowledge-graph/context`
439
+
440
+ `/clear`, `/clear_all`, 대화 삭제는 사용자 채팅창만 정리합니다. Data Graph/RAG 데이터와 관리자 감사 로그는 보존됩니다.
441
+
442
+ ---
443
+
328
444
  ## API 엔드포인트
329
445
 
330
446
  | Method | Path | 설명 |
@@ -0,0 +1,149 @@
1
+ # Lattice AI — Operations Guide
2
+
3
+ ## 1. 데이터 파일 위치
4
+
5
+ | 파일 | 용도 |
6
+ |------|------|
7
+ | `~/.ltcai/users.json` | 사용자 계정 (bcrypt 해시 저장) |
8
+ | `~/.ltcai/history.json` | 대화 히스토리 |
9
+ | `~/.ltcai/audit.json` | 감사 로그 (agent 실행, 사용자 변경 등) |
10
+ | `~/.ltcai/brain/` | Knowledge Graph 노드 (Markdown) |
11
+ | `~/ltcai-agent/` | Agent workspace (agent가 생성한 파일) |
12
+
13
+ ## 2. 백업 및 복구
14
+
15
+ ### 2.1 전체 백업
16
+ ```bash
17
+ tar -czf ltcai-backup-$(date +%Y%m%d).tar.gz ~/.ltcai ~/ltcai-agent
18
+ ```
19
+
20
+ ### 2.2 복구
21
+ ```bash
22
+ tar -xzf ltcai-backup-YYYYMMDD.tar.gz -C ~
23
+ ```
24
+
25
+ ### 2.3 히스토리만 초기화
26
+ ```bash
27
+ rm ~/.ltcai/history.json
28
+ ```
29
+
30
+ ### 2.4 감사 로그 보관 (90일 보관 예시)
31
+ ```bash
32
+ # crontab -e 에 추가
33
+ 0 2 * * * find ~/.ltcai -name "audit*.json" -mtime +90 -delete
34
+ ```
35
+
36
+ ## 3. 로그 관리
37
+
38
+ 서버 로그는 stdout/stderr로 출력됩니다. systemd 환경에서는 journald가 관리합니다.
39
+
40
+ ### 3.1 로그 확인
41
+ ```bash
42
+ # systemd 사용 시
43
+ journalctl -u ltcai -f
44
+
45
+ # 직접 실행 시 파일로 redirect
46
+ LTCAI > /var/log/ltcai.log 2>&1
47
+ ```
48
+
49
+ ### 3.2 로그 보관
50
+ `logrotate` 예시 (`/etc/logrotate.d/ltcai`):
51
+ ```
52
+ /var/log/ltcai.log {
53
+ daily
54
+ rotate 30
55
+ compress
56
+ missingok
57
+ notifempty
58
+ }
59
+ ```
60
+
61
+ ## 4. 감사 로그 이벤트 유형
62
+
63
+ | event_type | 발생 시점 |
64
+ |------------|-----------|
65
+ | `login` | 로그인 성공/실패 |
66
+ | `user_update` | 관리자가 사용자 수정 |
67
+ | `user_delete` | 관리자가 사용자 삭제 |
68
+ | `history_delete` | 대화 히스토리 삭제 |
69
+ | `agent_exec` | Agent가 medium/high risk 도구 실행 |
70
+ | `agent_blocked` | Agent가 시스템 경로 쓰기 시도하여 차단됨 |
71
+ | `model_load` | 모델 로드 |
72
+ | `model_switch` | 모델 전환 |
73
+
74
+ ### 4.1 감사 로그 조회
75
+ ```bash
76
+ python3 -c "
77
+ import json, sys
78
+ events = json.load(open('~/.ltcai/audit.json'.replace('~', __import__('os').path.expanduser('~'))))
79
+ for e in events[-20:]:
80
+ print(e['timestamp'], e['event_type'], e.get('user_email',''))
81
+ "
82
+ ```
83
+
84
+ ## 5. 사용자 관리
85
+
86
+ ### 5.1 첫 번째 사용자 (admin) 생성
87
+ 서버 첫 실행 시 `/register` API 또는 웹 UI를 통해 등록합니다.
88
+ 최초 등록 사용자는 자동으로 `admin` 역할이 부여됩니다.
89
+
90
+ ### 5.2 사용자 목록 확인 (admin 전용)
91
+ ```
92
+ GET /admin/users
93
+ Cookie: session_id=<admin-session>
94
+ ```
95
+
96
+ ### 5.3 비밀번호 정책
97
+ - 최소 8자
98
+ - bcrypt (cost 12) 해시로 저장
99
+ - 평문은 저장되지 않음
100
+
101
+ ## 6. 업그레이드 마이그레이션
102
+
103
+ ### 6.1 npm 패키지 업그레이드
104
+ ```bash
105
+ npm install -g ltcai@latest
106
+ ```
107
+
108
+ ### 6.2 PyPI 패키지 업그레이드
109
+ ```bash
110
+ pip install --upgrade ltcai
111
+ ```
112
+
113
+ ### 6.3 데이터 마이그레이션 주의사항
114
+ - `users.json` 스키마 변경 시: 서버가 자동으로 누락 필드를 기본값으로 보완합니다.
115
+ - `history.json` 스키마 변경 시: 하위 호환성 유지. 구버전 레코드는 무시됩니다.
116
+ - `brain/` Knowledge Graph: Markdown 파일 기반이므로 별도 마이그레이션 없음.
117
+
118
+ ## 7. 공개 서버 체크리스트
119
+
120
+ 공개 인터넷에 노출할 경우 반드시 확인:
121
+
122
+ - [ ] `LATTICEAI_SECRET_KEY` 환경변수 설정 (32자 이상 랜덤 문자열)
123
+ - [ ] `LATTICEAI_ENABLE_GRAPH=false` (불필요 시 Graph 비활성화)
124
+ - [ ] `HTTPS` 종단 프록시 설정 (nginx / Caddy)
125
+ - [ ] `CSRF_TRUSTED_ORIGINS` 화이트리스트 설정
126
+ - [ ] `ALLOWED_COMMANDS` 검토 — python3/node 등 불필요한 실행 도구 제거
127
+ - [ ] 방화벽으로 8899 포트를 프록시만 접근 허용
128
+
129
+ ## 8. 사용자 데이터 격리
130
+
131
+ - 대화 히스토리는 `user_email` 필드로 필터링됩니다.
132
+ - Agent workspace (`~/ltcai-agent/`)는 현재 단일 공유 디렉토리입니다.
133
+ 멀티 유저 환경에서는 `~/ltcai-agent/<email>/` 구조로 분리를 권장합니다.
134
+ - Knowledge Graph (`brain/`) 역시 단일 공유 공간입니다.
135
+
136
+ ## 9. 서버 시작 / 종료
137
+
138
+ ```bash
139
+ # 시작
140
+ LTCAI
141
+
142
+ # 환경변수와 함께 시작
143
+ LATTICEAI_SECRET_KEY=xxx LATTICEAI_ENABLE_GRAPH=true LTCAI
144
+
145
+ # 종료
146
+ Ctrl+C 또는 kill <pid>
147
+ ```
148
+
149
+ 서버는 종료 시 진행 중인 HTTP 요청을 완료한 후 종료됩니다 (graceful shutdown — uvicorn 기본 동작).