ltcai 0.1.4 → 0.1.8
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 +92 -0
- package/docs/OPERATIONS.md +149 -0
- package/knowledge_graph.py +802 -0
- package/ltcai_cli.py +45 -1
- package/package.json +15 -3
- package/requirements.txt +1 -0
- package/server.py +665 -28
- package/skills/SKILL_TEMPLATE.md +57 -0
- package/skills/code_review/SKILL.md +76 -0
- package/skills/data_analysis/SKILL.md +79 -0
- package/skills/file_edit/SKILL.md +68 -0
- package/skills/web_search/SKILL.md +74 -0
- package/static/account.html +14 -2
- package/static/admin.html +225 -6
- package/static/chat.html +644 -140
- package/static/graph.html +612 -0
- package/static/icons/apple-touch-icon.png +0 -0
- package/static/icons/favicon-32.png +0 -0
- package/static/icons/icon-192.png +0 -0
- package/static/icons/icon-512.png +0 -0
- package/static/manifest.json +35 -0
- package/static/sw.js +51 -0
- package/telegram_bot.py +631 -217
- package/tests/__init__.py +0 -0
- package/tests/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tests/integration/__init__.py +0 -0
- package/tests/integration/test_api.py +94 -0
- package/tests/unit/__init__.py +0 -0
- package/tests/unit/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tests/unit/__pycache__/test_tools.cpython-314-pytest-9.0.3.pyc +0 -0
- package/tests/unit/test_tools.py +127 -0
- package/tools.py +169 -13
package/README.md
CHANGED
|
@@ -10,6 +10,52 @@ LTCAI # → http://localhost:4825
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+
## v0.1.8 변경사항
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
- **PWA (Progressive Web App)** — iPad / Android / Galaxy Tab 홈화면 설치 지원
|
|
17
|
+
- `manifest.json` + Service Worker (`sw.js`) + 아이콘 4종 (192px, 512px, apple-touch-icon 180px, favicon 32px)
|
|
18
|
+
- iOS Safari: 공유 버튼 → "홈 화면에 추가" → 앱처럼 전체화면 실행
|
|
19
|
+
- Android Chrome: 주소창 "설치" 버튼 → 홈화면 앱
|
|
20
|
+
- `viewport-fit=cover` — iPhone Dynamic Island / 노치 안전영역 확장
|
|
21
|
+
- **서버 네트워크 공개 바인딩** — 기본 host `0.0.0.0`으로 변경
|
|
22
|
+
- 같은 Wi-Fi에서 모든 기기(`http://<Mac IP>:4825`)로 바로 접근 가능
|
|
23
|
+
- 시작 배너에 로컬 URL + 네트워크 IP 자동 출력
|
|
24
|
+
- **Windows 서버 호환성**
|
|
25
|
+
- `computer_screenshot`: macOS `screencapture` → Windows/Linux `pyautogui` fallback
|
|
26
|
+
- `computer_open_app` / `computer_open_url`: `open -a` / `cmd /c start` / `xdg-open` 플랫폼 자동 분기
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## v0.1.7 변경사항
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
- **모바일 반응형 UI** — 폰/태블릿 화면 크기에 자동 대응
|
|
34
|
+
- 사이드바 슬라이드 드로어 (☰ 햄버거 버튼, 오버레이 탭으로 닫기)
|
|
35
|
+
- iOS 소프트 키보드 대응 (`100dvh`), 노치/홈바 안전영역 (`safe-area-inset`)
|
|
36
|
+
- ops-strip 카드 가로 스크롤 압축, textarea 자동 줌 방지
|
|
37
|
+
- 브레이크포인트 3단계: 900px / 768px / 480px
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## v0.1.6 변경사항
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
- **LATTICEAI_ENABLE_GRAPH** 환경변수 — Data Graph를 퍼블릭 배포에서 완전히 비활성화하는 토글 (기본값 `true`)
|
|
45
|
+
- `false` 설정 시 모든 그래프 API 404, 인제스트 건너뜀, 사이드바 버튼 자동 숨김
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## v0.1.5 변경사항
|
|
50
|
+
|
|
51
|
+
### Added
|
|
52
|
+
- **Data Graph** — 채팅·AI 답변·업로드 문서를 SQLite 지식 그래프로 자동 구조화, `/graph`에서 Canvas 기반 Force-directed 시각화
|
|
53
|
+
- **Graph RAG** — 그래프 검색 결과를 채팅 컨텍스트에 자동 주입하여 이전 대화·문서 참조 강화
|
|
54
|
+
- **Telegram 원격 제어** — 인라인 키보드 메뉴로 상태 조회, 모델 관리, 스크린샷, 그래프 통계 원격 제어
|
|
55
|
+
- 어드민 세션 핸드오프 보안 강화 — URL 파라미터 → `sessionStorage` 1회 읽기 방식으로 교체
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
13
59
|
## v0.1.4 변경사항
|
|
14
60
|
|
|
15
61
|
### Added
|
|
@@ -39,11 +85,42 @@ LTCAI # → http://localhost:4825
|
|
|
39
85
|
|
|
40
86
|
---
|
|
41
87
|
|
|
88
|
+
## v0.1.1 변경사항
|
|
89
|
+
|
|
90
|
+
### Added
|
|
91
|
+
- 비밀번호 변경 API (`POST /account/change-password`)
|
|
92
|
+
- 웹 UI 비밀번호 변경 모달 (헤더 계정 아이콘)
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## v0.1.0 변경사항
|
|
97
|
+
|
|
98
|
+
### Added
|
|
99
|
+
- FastAPI 브릿지 서버 (port 4825)
|
|
100
|
+
- Apple Silicon MLX 로컬 모델 지원 (Gemma 4, Qwen 2.5 등)
|
|
101
|
+
- 클라우드 모델 지원 (OpenAI, Groq, Together, OpenRouter 등)
|
|
102
|
+
- VS Code / Cursor / Antigravity 확장
|
|
103
|
+
- Telegram 봇 (로컬 AI 미러 + Codex 클라우드 봇)
|
|
104
|
+
- 어드민 패널 (`/admin`)
|
|
105
|
+
- P-Reinforce 지식 정원 엔진
|
|
106
|
+
- MCP 서버 연동
|
|
107
|
+
- Ollama / vLLM / LM Studio / llama.cpp 연동
|
|
108
|
+
|
|
109
|
+
### Security
|
|
110
|
+
- 모든 민감 엔드포인트 인증 적용
|
|
111
|
+
- SameSite=Lax 쿠키 (CSRF 방어)
|
|
112
|
+
- scrypt 비밀번호 해싱
|
|
113
|
+
- tempfile 레이스 컨디션 수정
|
|
114
|
+
- `run_command()` 위험 플래그 차단
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
42
118
|
## 아키텍처
|
|
43
119
|
|
|
44
120
|
```
|
|
45
121
|
Lattice AI/
|
|
46
122
|
├── server.py # FastAPI 브릿지 서버 (port 4825)
|
|
123
|
+
├── knowledge_graph.py # SQLite Data Graph + Graph RAG 저장소
|
|
47
124
|
├── llm_router.py # 로컬/클라우드 모델 라우터
|
|
48
125
|
├── tools.py # 워크스페이스 도구 (파일, 터미널, 스크린샷 등)
|
|
49
126
|
├── p_reinforce.py # P-Reinforce 지식 정원 엔진
|
|
@@ -169,6 +246,7 @@ docker run --rm -p 4825:4825 \
|
|
|
169
246
|
- `LATTICEAI_MODE=public` 설정
|
|
170
247
|
- 클라우드 API 키 설정 (`OPENAI_API_KEY` 등)
|
|
171
248
|
- `LATTICEAI_INVITE_CODE`를 비공개 값으로 설정
|
|
249
|
+
- `LATTICEAI_ENABLE_GRAPH=false` — Data Graph를 공개 서버에서 숨기려면 설정
|
|
172
250
|
- `/data`에 영구 볼륨 마운트
|
|
173
251
|
- HTTPS 리버스 프록시 앞에 두기 (nginx, Caddy 등)
|
|
174
252
|
|
|
@@ -325,6 +403,20 @@ curl -X POST localhost:4825/garden \
|
|
|
325
403
|
|
|
326
404
|
---
|
|
327
405
|
|
|
406
|
+
## Data Graph / Graph RAG
|
|
407
|
+
|
|
408
|
+
웹 채팅과 AI 답변, 업로드 문서(PDF/DOCX/XLSX/PPTX/TXT/CSV)를 `~/.ltcai/knowledge_graph.sqlite`에 자동 저장합니다.
|
|
409
|
+
|
|
410
|
+
- 채팅/AI 답변: `Message`, `AIResponse`, `Person`, `Conversation`, `Topic`, `Decision`, `Task`
|
|
411
|
+
- 문서 업로드: `File`, `Chunk`, `Page`, `Slide`, `Sheet`, `Image`, `Topic`
|
|
412
|
+
- 원본 파일 blob: `~/.ltcai/knowledge_graph_blobs/`
|
|
413
|
+
- 시각화: `http://localhost:4825/graph`
|
|
414
|
+
- API: `/knowledge-graph/graph`, `/knowledge-graph/search`, `/knowledge-graph/context`
|
|
415
|
+
|
|
416
|
+
`/clear`, `/clear_all`, 대화 삭제는 사용자 채팅창만 정리합니다. Data Graph/RAG 데이터와 관리자 감사 로그는 보존됩니다.
|
|
417
|
+
|
|
418
|
+
---
|
|
419
|
+
|
|
328
420
|
## API 엔드포인트
|
|
329
421
|
|
|
330
422
|
| 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 기본 동작).
|