ltcai 0.1.9 → 0.1.11

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.
Files changed (36) hide show
  1. package/README.md +141 -313
  2. package/docs/CHANGELOG.md +227 -0
  3. package/docs/architecture.md +121 -0
  4. package/docs/mcp-tools.md +116 -0
  5. package/docs/privacy.md +74 -0
  6. package/docs/public-deploy.md +137 -0
  7. package/docs/security-model.md +121 -0
  8. package/ltcai_cli.py +2 -2
  9. package/package.json +1 -1
  10. package/server.py +997 -261
  11. package/skills/SKILL_TEMPLATE.md +61 -29
  12. package/skills/code_review/SKILL.md +28 -0
  13. package/skills/code_review/examples.md +59 -0
  14. package/skills/code_review/risk.json +9 -0
  15. package/skills/code_review/schema.json +65 -0
  16. package/skills/data_analysis/SKILL.md +28 -0
  17. package/skills/data_analysis/examples.md +62 -0
  18. package/skills/data_analysis/risk.json +9 -0
  19. package/skills/data_analysis/schema.json +61 -0
  20. package/skills/file_edit/SKILL.md +33 -0
  21. package/skills/file_edit/examples.md +45 -0
  22. package/skills/file_edit/risk.json +9 -0
  23. package/skills/file_edit/schema.json +60 -0
  24. package/skills/summarize_document/SKILL.md +68 -0
  25. package/skills/summarize_document/examples.md +65 -0
  26. package/skills/summarize_document/risk.json +9 -0
  27. package/skills/summarize_document/schema.json +71 -0
  28. package/skills/web_search/SKILL.md +28 -0
  29. package/skills/web_search/examples.md +61 -0
  30. package/skills/web_search/risk.json +9 -0
  31. package/skills/web_search/schema.json +62 -0
  32. package/tests/integration/__pycache__/__init__.cpython-314.pyc +0 -0
  33. package/tests/integration/__pycache__/test_api.cpython-314-pytest-9.0.3.pyc +0 -0
  34. package/tests/unit/__pycache__/test_tools.cpython-314-pytest-9.0.3.pyc +0 -0
  35. package/tests/unit/test_tools.py +194 -1
  36. package/tools.py +264 -4
package/README.md CHANGED
@@ -1,170 +1,108 @@
1
1
  # Lattice AI
2
2
 
3
- Local/cloud LLM workspace serverApple Silicon MLX, OpenAI-compatible providers, MCP, VS Code/Cursor extension, Telegram bot.
3
+ **개인 AI 워크스페이스 서버**로컬/클라우드 LLM을 UI · VS Code 확장 · Telegram 봇 · MCP 도구 하나로 묶습니다.
4
4
 
5
- ```bash
6
- pip install ltcai # PyPI
7
- npm install -g ltcai # npm
8
- LTCAI # → http://localhost:4825
9
- ```
10
-
11
- ---
12
-
13
- ## v0.1.9 변경사항
5
+ Apple Silicon MLX 로컬 추론 · OpenAI/Groq/OpenRouter 클라우드 모델 · Graph RAG · 멀티스텝 에이전트 워크플로
14
6
 
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, 토큰 버킷)
7
+ [![PyPI](https://img.shields.io/pypi/v/ltcai)](https://pypi.org/project/ltcai/)
8
+ [![npm](https://img.shields.io/npm/v/ltcai)](https://www.npmjs.com/package/ltcai)
9
+ [![VS Code](https://img.shields.io/visual-studio-marketplace/v/parktaesoo.ltcai)](https://marketplace.visualstudio.com/items?itemName=parktaesoo.ltcai)
10
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
19
11
 
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)
12
+ <!-- 스크린샷 / GIF — docs/demo.gif 또는 스크린샷으로 교체하세요 -->
13
+ <!-- ![Lattice AI demo](docs/demo.gif) -->
28
14
 
29
15
  ---
30
16
 
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
17
+ ## 설치 & 첫 실행 (30초)
62
18
 
63
- ---
64
-
65
- ## v0.1.6 변경사항
66
-
67
- ### Added
68
- - **LATTICEAI_ENABLE_GRAPH** 환경변수 — Data Graph를 퍼블릭 배포에서 완전히 비활성화하는 토글 (기본값 `true`)
69
- - `false` 설정 시 모든 그래프 API 404, 인제스트 건너뜀, 사이드바 버튼 자동 숨김
70
-
71
- ---
19
+ ```bash
20
+ # PyPI (클라우드 모델)
21
+ pip install ltcai
72
22
 
73
- ## v0.1.5 변경사항
23
+ # PyPI (Apple Silicon MLX 로컬 모델 포함)
24
+ pip install "ltcai[local]"
74
25
 
75
- ### Added
76
- - **Data Graph** — 채팅·AI 답변·업로드 문서를 SQLite 지식 그래프로 자동 구조화, `/graph`에서 Canvas 기반 Force-directed 시각화
77
- - **Graph RAG** — 그래프 검색 결과를 채팅 컨텍스트에 자동 주입하여 이전 대화·문서 참조 강화
78
- - **Telegram 원격 제어** — 인라인 키보드 메뉴로 상태 조회, 모델 관리, 스크린샷, 그래프 통계 원격 제어
79
- - 어드민 세션 핸드오프 보안 강화 — URL 파라미터 → `sessionStorage` 1회 읽기 방식으로 교체
26
+ # npm (자동 Python 환경 구성)
27
+ npm install -g ltcai
80
28
 
81
- ---
29
+ # 서버 실행
30
+ LTCAI
31
+ # → http://localhost:4825
32
+ ```
82
33
 
83
- ## v0.1.4 변경사항
34
+ **설치 확인:**
84
35
 
85
- ### Added
86
- - 세션 영속성 — 서버 재시작 후에도 로그인 유지
87
- - SSO 로그인 — Entra ID / Okta OIDC 지원 (`OIDC_DISCOVERY_URL`, `OIDC_CLIENT_ID`, `OIDC_CLIENT_SECRET`)
88
- - 채팅 히스토리 검색 — 사이드바 검색창으로 대화 내용 키워드 검색
89
- - 대화 삭제 사이드바 각 대화에 삭제 버튼
90
- - MCP 서버 관리 UI 사이드바 "MCP 관리" 버튼으로 설치/목록 모달
91
- - VS Code 인라인 Diff Edit Selection 결과를 diff로 먼저 확인 후 Apply/Discard
92
- - VS Code 현재 파일 첨부 — `Lattice AI: Attach Current File to Chat` 명령 추가
36
+ ```
37
+ $ LTCAI doctor
38
+ [OK] Python 3.11+: 3.11.9
39
+ [OK] FastAPI: required server dependency
40
+ [OK] Uvicorn: required server dependency
41
+ [OK] OpenAI SDK: required for cloud providers
42
+ [OK] MLX: required for Apple Silicon local models
43
+ [OK] MLX-LM: required for local text models
44
+ [OK] MLX-VLM: required for Gemma/VLM models
45
+ [OPTIONAL] Ollama binary: optional local-server engine
46
+ [OK] Data dir: /Users/you/.ltcai
47
+ [OK] Static UI: /path/to/static
48
+ [INFO] Cloud keys configured: OPENAI_API_KEY
49
+ ```
93
50
 
94
51
  ---
95
52
 
96
- ## v0.1.3 변경사항
53
+ ## 채팅 → VS Code 연결 → Telegram 연결
97
54
 
98
- ### Added
99
- - 프로필 수정 (`PATCH /account/profile`) — 이름·닉네임 변경
100
- - 회원가입 폼 — 비밀번호 확인 필드, 인라인 에러 메시지
101
- - 어드민 패널 초대 링크 섹션 — 원클릭 복사
102
- - 어드민 대시보드 메시지 활동 차트 (Chart.js, 최근 14일)
103
- - 웹 UI 한국어 / 영어 전환 (`🌐 Languages` 버튼, localStorage 저장)
55
+ ### 1단계: 첫 채팅
104
56
 
105
- ### Fixed
106
- - 로그아웃 `/logout` API 호출로 서버 세션 쿠키 정상 만료
107
- - 인증(`account.html`)과 채팅(`chat.html`) UI 분리 레거시 파일 제거
108
- - 채팅 헤더에서 언어 선택 드롭다운이 ops-strip을 가리는 문제 수정
57
+ 1. `http://localhost:4825` 열기
58
+ 2. **회원가입** 번째 계정이 자동으로 admin
59
+ 3. 상단 모델 드롭다운 모델 선택 → 채팅 시작
109
60
 
110
- ---
61
+ 클라우드 모델 사용 시 API 키를 먼저 설정하거나, 어드민 패널에서 입력합니다:
111
62
 
112
- ## v0.1.1 변경사항
63
+ ```bash
64
+ OPENAI_API_KEY=sk-... LTCAI
65
+ ```
113
66
 
114
- ### Added
115
- - 비밀번호 변경 API (`POST /account/change-password`)
116
- - 웹 UI 비밀번호 변경 모달 (헤더 계정 아이콘)
67
+ ### 2단계: VS Code 연결
117
68
 
118
- ---
69
+ 1. VS Code → Extensions → `ltcai` 검색 → Install
70
+ 2. `Cmd+Shift+A` → Lattice AI 채팅 패널 열기
71
+ 3. 기본적으로 `http://localhost:4825` 에 자동 연결됩니다
119
72
 
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()` 위험 플래그 차단
73
+ | 단축키 | 기능 |
74
+ |--------|------|
75
+ | `Cmd+Shift+A` | 채팅 패널 열기 |
76
+ | `Cmd+Shift+E` | 선택 코드 편집 |
77
+ | `Cmd+Shift+M` | 모델 로드 / 전환 |
78
+ | 우클릭 메뉴 | Explain / Edit / Knowledge Garden 저장 |
139
79
 
140
- ---
80
+ ### 3단계: Telegram 봇 연결
141
81
 
142
- ## 아키텍처
82
+ BotFather에서 토큰을 발급받은 후:
143
83
 
144
- ```
145
- Lattice AI/
146
- ├── server.py # FastAPI 브릿지 서버 (port 4825)
147
- ├── knowledge_graph.py # SQLite Data Graph + Graph RAG 저장소
148
- ├── llm_router.py # 로컬/클라우드 모델 라우터
149
- ├── tools.py # 워크스페이스 도구 (파일, 터미널, 스크린샷 등)
150
- ├── p_reinforce.py # P-Reinforce 지식 정원 엔진
151
- ├── telegram_bot.py # 로컬 AI Telegram 미러 봇
152
- ├── codex_telegram_bot.py # 클라우드 Codex Telegram 봇
153
- ├── static/ # 웹 UI (indexd.html), 어드민 패널 (admin.html)
154
- ├── bin/ltcai.js # npm CLI entrypoint
155
- ├── pyproject.toml # PyPI 메타데이터
156
- └── vscode-extension/ # VS Code / Cursor / Antigravity 확장
84
+ ```bash
85
+ LATTICEAI_TELEGRAM_BOT_TOKEN=your-token LTCAI
157
86
  ```
158
87
 
159
- ---
88
+ 이후 Telegram에서 봇과 대화하면 로컬 AI 서버와 실시간으로 연결됩니다.
160
89
 
161
- ## 언어 지원
162
-
163
- 웹 UI는 **한국어 / 영어** 전환을 지원합니다.
90
+ ---
164
91
 
165
- - 로그인 페이지 우측 상단 **🌐 Languages** 버튼
166
- - 메인 화면 헤더 **🌐** 버튼
167
- - 선택한 언어는 브라우저에 저장됩니다
92
+ ## 기능 개요
93
+
94
+ | 기능 | 설명 |
95
+ |------|------|
96
+ | **웹 UI** | 반응형 채팅 + 어드민 패널 + 그래프 시각화 |
97
+ | **VS Code / Cursor 확장** | 채팅, Edit Selection, Diff 뷰, 파일 첨부 |
98
+ | **Telegram 봇** | 로컬 AI 미러 + Codex 클라우드 봇 |
99
+ | **MCP 서버** | Claude Desktop / Cursor에서 직접 도구 사용 |
100
+ | **MLX 로컬 추론** | Apple Silicon에서 Gemma, Qwen, DeepSeek 등 |
101
+ | **클라우드 모델** | OpenAI, Groq, Together, OpenRouter |
102
+ | **Graph RAG** | 채팅·문서를 SQLite 지식 그래프로 자동 구조화 |
103
+ | **에이전트** | 파일 편집·생성, grep, todo, 터미널 (25스텝) |
104
+ | **PWA** | iPad / Android 홈화면 설치 지원 |
105
+ | **SSO** | Entra ID / Okta OIDC |
168
106
 
169
107
  ---
170
108
 
@@ -172,87 +110,58 @@ Lattice AI/
172
110
 
173
111
  | 기능 | macOS (Apple Silicon) | Windows / Linux |
174
112
  |------|:---:|:---:|
175
- | 웹 UI / 클라우드 모델 (OpenAI, Groq 등) | ✅ | ✅ |
113
+ | 웹 UI / 클라우드 모델 | ✅ | ✅ |
176
114
  | VS Code / Cursor 확장 | ✅ | ✅ |
177
115
  | Telegram 봇 | ✅ | ✅ |
178
116
  | MLX 로컬 모델 (Gemma, Qwen 등) | ✅ | ❌ Apple Silicon 전용 |
179
117
  | Ollama / vLLM / LM Studio 연동 | ✅ | ✅ |
180
118
 
181
- > Windows / Linux에서 로컬 모델을 사용하려면 서버 실행 후 웹 UI(`http://localhost:4825`)에서 Ollama 등을 설치할 수 있습니다.
182
-
183
119
  ---
184
120
 
185
- ## 빠른 시작
186
-
187
- ### 설치 & 실행
121
+ ## 로컬 모델 (Apple Silicon)
188
122
 
189
123
  ```bash
190
- # PyPI (기본 — 클라우드 모델만)
191
- pip install ltcai
192
-
193
- # PyPI (Apple Silicon MLX 포함)
194
- pip install "ltcai[local]"
195
-
196
- # npm
197
- npm install -g ltcai
198
-
199
- # 서버 실행
124
+ LATTICEAI_MODE=local \
125
+ LATTICEAI_LOCAL_MODEL=mlx-community/gemma-4-26b-a4b-it-4bit \
200
126
  LTCAI
201
- # → http://localhost:4825
202
127
  ```
203
128
 
204
- #### 개발 모드
205
-
206
- ```bash
207
- python ltcai_cli.py
208
- python ltcai_cli.py --reload # 코드 변경 시 자동 재시작
129
+ ### 추천 모델 (M-series Mac)
209
130
 
210
- LTCAI doctor # 의존성 환경 체크
211
- ```
212
-
213
- npm으로 설치한 경우 실행 `~/.ltcai/npm-python`에 Python 가상환경을 자동으로 생성합니다.
214
- 자동 설치를 끄려면 `LTCAI_SKIP_NPM_BOOTSTRAP=1`을 설정하세요.
215
-
216
- 런타임 데이터는 기본적으로 `~/.ltcai/`에 저장됩니다. 경로 변경: `LATTICEAI_DATA_DIR=/path/to/data`
131
+ | 모델 | 용도 | 크기 | 추천 |
132
+ |------|------|------|------|
133
+ | `mlx-community/gemma-4-26b-a4b-it-4bit` | 범용/코딩 | ~14GB | ⭐⭐⭐⭐⭐ |
134
+ | `mlx-community/Qwen2.5-Coder-32B-Instruct-4bit` | 코딩 | ~18GB | ⭐⭐⭐⭐⭐ |
135
+ | `mlx-community/Qwen2.5-Coder-14B-Instruct-4bit` | 코딩 | ~8GB | ⭐⭐⭐⭐ |
136
+ | `mlx-community/DeepSeek-R1-0528-4bit` | 추론 | ~38GB | ⭐⭐⭐⭐ |
137
+ | `mlx-community/Phi-4-4bit` | 코딩 | ~8GB | ⭐⭐⭐⭐ |
217
138
 
218
- ---
139
+ > **32GB Mac 추천**: `gemma-4-26b-a4b-it-4bit` — 빠르고 뛰어난 범용 성능
219
140
 
220
- ## 로컬 모드 (Apple Silicon)
141
+ ### 멀티모델 핫스왑
221
142
 
222
143
  ```bash
223
- LATTICEAI_MODE=local \
224
- LATTICEAI_LOCAL_MODEL=mlx-community/gemma-4-26b-a4b-it-4bit \
225
- LTCAI
144
+ curl -X POST localhost:4825/models/load \
145
+ -H "Content-Type: application/json" \
146
+ -d '{"model_id": "mlx-community/Qwen2.5-Coder-14B-Instruct-4bit"}'
226
147
  ```
227
148
 
228
- - MLX 로컬 모델 자동 로드
229
- - Telegram 미러 봇 활성화 가능
230
- - 파일/터미널/스크린샷 도구 사용 가능
231
-
232
149
  ---
233
150
 
234
151
  ## 퍼블릭 모드 (클라우드 서버)
235
152
 
236
- Render, Fly.io, Railway, VPS 등에서 운영할 때 사용합니다. MLX를 사용하지 않고 클라우드 모델로 동작합니다.
153
+ Render, Fly.io, Railway, VPS 등에서 운영할 때:
237
154
 
238
155
  ```bash
239
156
  LATTICEAI_MODE=public \
240
157
  LATTICEAI_ALLOW_LOCAL_MODELS=false \
241
- LATTICEAI_ENABLE_TELEGRAM=false \
242
158
  LATTICEAI_PUBLIC_MODEL=openai:gpt-4o-mini \
243
159
  OPENAI_API_KEY=sk-... \
244
160
  LATTICEAI_INVITE_CODE=my-secret-code \
245
161
  LTCAI
246
162
  ```
247
163
 
248
- 지원 클라우드 모델 프리픽스:
249
-
250
- ```
251
- openai:gpt-4o-mini
252
- openrouter:openai/gpt-4o-mini
253
- groq:llama-3.1-8b-instant
254
- together:meta-llama/Llama-3.3-70B-Instruct-Turbo
255
- ```
164
+ 자세한 내용은 [docs/public-deploy.md](docs/public-deploy.md)를 참고하세요.
256
165
 
257
166
  ### Docker
258
167
 
@@ -265,47 +174,36 @@ docker run --rm -p 4825:4825 \
265
174
  lattice-ai
266
175
  ```
267
176
 
268
- ### 퍼블릭 서버 체크리스트
269
-
270
- - `LATTICEAI_MODE=public` 설정
271
- - 클라우드 API 키 설정 (`OPENAI_API_KEY` 등)
272
- - `LATTICEAI_INVITE_CODE`를 비공개 값으로 설정
273
- - `LATTICEAI_ENABLE_GRAPH=false` — Data Graph를 공개 서버에서 숨기려면 설정
274
- - `/data`에 영구 볼륨 마운트
275
- - HTTPS 리버스 프록시 앞에 두기 (nginx, Caddy 등)
276
-
277
177
  ---
278
178
 
279
- ## 모델
280
-
281
- ### 지원 모델 예시 (M-series Mac 기준)
282
-
283
- | 모델 | 용도 | 크기 | 추천도 |
284
- |------|------|------|--------|
285
- | `mlx-community/gemma-4-26b-a4b-it-4bit` | 범용/코딩 | ~14GB | ⭐⭐⭐⭐⭐ |
286
- | `mlx-community/Qwen2.5-Coder-32B-Instruct-4bit` | 코딩 | ~18GB | ⭐⭐⭐⭐⭐ |
287
- | `mlx-community/Qwen2.5-Coder-14B-Instruct-4bit` | 코딩 | ~8GB | ⭐⭐⭐⭐ |
288
- | `mlx-community/Qwen2.5-Coder-7B-Instruct-4bit` | 코딩 | ~4GB | ⭐⭐⭐ |
289
- | `mlx-community/DeepSeek-R1-0528-4bit` | 추론 | ~38GB | ⭐⭐⭐⭐ |
290
- | `mlx-community/Phi-4-4bit` | 코딩 | ~8GB | ⭐⭐⭐⭐ |
291
- | `mlx-community/Llama-3.1-8B-Instruct-4bit` | 범용 | ~4.5GB | ⭐⭐⭐ |
179
+ ## 보안
292
180
 
293
- > **32GB Mac 추천**: gemma-4-26b-a4b-it-4bit빠르고 뛰어난 범용 성능
181
+ - **바인딩**: 기본 `127.0.0.1:4825` (로컬 전용) 같은 Wi-Fi 기기 접근 허용 시 `LATTICEAI_HOST=0.0.0.0` 설정
182
+ - **인증**: 모든 민감 엔드포인트 로그인 세션 필요 (`REQUIRE_AUTH=true` 기본)
183
+ - **세션**: 24시간 TTL + sliding refresh, 서버 디스크 저장 (재시작 후에도 유지)
184
+ - **CORS**: 기본 localhost만 허용 — 외부 허용 시 `LATTICEAI_CORS_ALLOW_NETWORK=true`
185
+ - **API 키**: OS keyring/Keychain 저장 (평문 미저장)
186
+ - **쿠키**: `HttpOnly + SameSite=Lax` (CSRF 방어)
187
+ - **Rate limit**: `/chat` 30/분, `/agent` 6/분, `/upload` 12/분 (per user)
188
+ - **파일 업로드**: magic-number 시그니처 검증 (확장자 위조 차단)
189
+ - **텔레메트리**: 없음. 모든 데이터는 로컬(`~/.ltcai/`)에만 저장됩니다.
294
190
 
295
- ### 멀티모델 핫스왑
191
+ 보안 취약점 제보: [SECURITY.md](SECURITY.md) 참고
296
192
 
297
- ```bash
298
- # 모델 로드
299
- curl -X POST localhost:4825/models/load \
300
- -H "Content-Type: application/json" \
301
- -d '{"model_id": "mlx-community/Qwen2.5-Coder-14B-Instruct-4bit"}'
193
+ ---
302
194
 
303
- # 즉시 전환 (재로드 없음)
304
- curl -X POST localhost:4825/models/switch/mlx-community%2FQwen2.5-Coder-14B-Instruct-4bit
195
+ ## 문제 해결
305
196
 
306
- # 언로드
307
- curl -X DELETE localhost:4825/models/unload/mlx-community%2FQwen2.5-Coder-14B-Instruct-4bit
308
- ```
197
+ | 증상 | 원인 | 해결 |
198
+ |------|------|------|
199
+ | 포트 4825 이미 사용 중 | 이전 프로세스 잔존 | `lsof -i :4825` → `kill <PID>` 또는 `--port 4826` |
200
+ | `ModuleNotFoundError: mlx` | MLX 미설치 | `pip install "ltcai[local]"` (Apple Silicon 전용) |
201
+ | Python 3.10 이하 | 버전 불일치 | Python 3.11+ 필요. `python3 --version` 확인 |
202
+ | `pyautogui` 권한 오류 | macOS 접근성 권한 | 시스템 설정 → 개인정보 보호 → 접근성 → 터미널 허용 |
203
+ | `LTCAI doctor` OPTIONAL 표시 | 선택 의존성 미설치 | 해당 기능 불필요 시 무시 가능 |
204
+ | API 키 없음 경고 | 클라우드 모델 미설정 | `OPENAI_API_KEY=sk-...` 환경변수 또는 어드민 패널에서 입력 |
205
+ | Telegram 봇 응답 없음 | 토큰 미설정 또는 서버 미실행 | `LATTICEAI_TELEGRAM_BOT_TOKEN` 확인, 서버 로그 확인 |
206
+ | iPad / 다른 기기에서 접근 안 됨 | 기본 바인딩 127.0.0.1 | `LATTICEAI_HOST=0.0.0.0 LTCAI` 로 재시작 |
309
207
 
310
208
  ---
311
209
 
@@ -320,84 +218,22 @@ curl -X DELETE localhost:4825/models/unload/mlx-community%2FQwen2.5-Coder-14B-In
320
218
 
321
219
  ```bash
322
220
  cd vscode-extension
323
- npm install
324
- npm run build
325
- npm run package:vsix
326
-
327
- # 설치 (모든 에디터 한 번에)
328
- npm run install:all
329
-
330
- # 또는 에디터에서: Extensions → "..." → "Install from VSIX"
331
- ```
332
-
333
- ### 키보드 단축키
334
-
335
- | 단축키 | 기능 |
336
- |--------|------|
337
- | `Cmd+Shift+A` | 채팅 패널 열기 |
338
- | `Cmd+Shift+E` | 선택 코드 편집 |
339
- | `Cmd+Shift+M` | 모델 로드 / 전환 |
340
- | 우클릭 메뉴 | Explain / Edit / Knowledge Garden에 저장 |
341
-
342
- ---
343
-
344
- ## Telegram 봇
345
-
346
- ### 1. 로컬 AI 봇 (local 모드)
347
-
348
- 로컬 Lattice AI 서버와 대화하고 웹 채팅을 Telegram으로 미러링합니다.
349
-
350
- ```bash
351
- LATTICEAI_TELEGRAM_BOT_TOKEN=your-token LTCAI
352
- ```
353
-
354
- ### 2. Codex 클라우드 봇
355
-
356
- Telegram에서 GPT 기반 개발 어시스턴트와 대화하고, 선택적으로 GitHub 이슈를 생성합니다.
357
-
358
- ```bash
359
- CODEX_TELEGRAM_BOT_TOKEN=your-token \
360
- OPENAI_API_KEY=sk-... \
361
- CODEX_OPENAI_MODEL=gpt-4o \
362
- python codex_telegram_bot.py
363
- ```
364
-
365
- Telegram 명령어: `/start` `/reset` `/issue 제목`
366
-
367
- 선택적으로 GitHub 이슈 연동:
368
-
369
- ```bash
370
- GITHUB_TOKEN=ghp-... GITHUB_REPO=owner/repo
221
+ npm install && npm run build && npm run package:vsix
222
+ # Extensions → "..." → "Install from VSIX"
371
223
  ```
372
224
 
373
225
  ---
374
226
 
375
- ## 보안
376
-
377
- - **인증**: 모든 `/tools/*`, `/agent`, `/mcp/*`, `/local/*` 등 민감 엔드포인트는 로그인 세션 필요 (`REQUIRE_AUTH=true` 시)
378
- - **세션**: 7일 TTL, 서버 메모리 저장 (재시작 시 로그아웃)
379
- - **바인딩**: 기본 `127.0.0.1:4825` — 외부 접근 허용 시 명시적으로 `LATTICEAI_HOST=0.0.0.0` 설정
380
- - **CORS**: 기본 localhost만 허용 — 외부 허용 시 `LATTICEAI_CORS_ALLOW_NETWORK=true`
381
- - **API 키**: OS keyring/Keychain 저장 — 평문 저장 허용 시 `LATTICEAI_ALLOW_PLAINTEXT_API_KEYS=true`
382
- - **히스토리**: 저장 전 API key/token/password 패턴 자동 마스킹
383
- - **쿠키**: `HttpOnly + SameSite=Lax` (CSRF 방어)
384
-
385
- ---
386
-
387
227
  ## 어드민 패널
388
228
 
389
- `http://localhost:4825/admin` — 관리자 계정으로 로그인 후 접근 가능
229
+ `http://localhost:4825/admin` — 관리자 계정으로 로그인 후 접근
390
230
 
391
231
  - 사용자 목록 및 역할 관리 (admin / user)
392
- - 사용자 비활성화 / 삭제
393
- - 대시보드 (메모리, 모델, 시스템 상태)
232
+ - 대시보드 (메모리, 모델, 시스템 상태, 활동 차트)
233
+ - 초대 링크 생성 복사
394
234
 
395
- > **첫 번째로 가입한 계정이 자동으로 admin이 됩니다.** 서버를 처음 실행한 후 `/register` 또는 웹 UI에서 회원가입하면 됩니다. 이후 추가 admin은 어드민 패널에서 지정할 수 있습니다.
396
- >
397
- > 환경변수로 admin을 고정할 수도 있습니다:
398
- > ```bash
399
- > LATTICEAI_ADMIN_EMAILS=you@example.com LTCAI
400
- > ```
235
+ > 번째로 가입한 계정이 자동으로 admin입니다.
236
+ > 환경변수로 고정: `LATTICEAI_ADMIN_EMAILS=you@example.com`
401
237
 
402
238
  ---
403
239
 
@@ -407,7 +243,6 @@ GITHUB_TOKEN=ghp-... GITHUB_REPO=owner/repo
407
243
 
408
244
  ```
409
245
  ~/.ltcai-brain/
410
- ├── INDEX.md
411
246
  ├── 00_Raw/ # 원시 데이터, 아이디어
412
247
  ├── 10_Wiki/ # 검증된 개념, 레퍼런스
413
248
  ├── 20_Skills/ # 코드 스니펫, 프롬프트
@@ -417,27 +252,14 @@ GITHUB_TOKEN=ghp-... GITHUB_REPO=owner/repo
417
252
 
418
253
  에디터에서 텍스트 선택 → 우클릭 → **"Save to Knowledge Garden"**
419
254
 
420
- 또는 API:
421
-
422
- ```bash
423
- curl -X POST localhost:4825/garden \
424
- -H "Content-Type: application/json" \
425
- -d '{"content": "학습한 내용", "category": "10_Wiki"}'
426
- ```
427
-
428
255
  ---
429
256
 
430
257
  ## Data Graph / Graph RAG
431
258
 
432
- 웹 채팅과 AI 답변, 업로드 문서(PDF/DOCX/XLSX/PPTX/TXT/CSV)를 `~/.ltcai/knowledge_graph.sqlite`에 자동 저장합니다.
259
+ 채팅·AI 답변·업로드 문서(PDF/DOCX/XLSX/PPTX/TXT/CSV)를 `~/.ltcai/knowledge_graph.sqlite`에 자동 저장합니다.
433
260
 
434
- - 채팅/AI 답변: `Message`, `AIResponse`, `Person`, `Conversation`, `Topic`, `Decision`, `Task`
435
- - 문서 업로드: `File`, `Chunk`, `Page`, `Slide`, `Sheet`, `Image`, `Topic`
436
- - 원본 파일 blob: `~/.ltcai/knowledge_graph_blobs/`
437
261
  - 시각화: `http://localhost:4825/graph`
438
- - API: `/knowledge-graph/graph`, `/knowledge-graph/search`, `/knowledge-graph/context`
439
-
440
- `/clear`, `/clear_all`, 대화 삭제는 사용자 채팅창만 정리합니다. Data Graph/RAG 데이터와 관리자 감사 로그는 보존됩니다.
262
+ - 검색 RAG 컨텍스트 자동 주입
441
263
 
442
264
  ---
443
265
 
@@ -452,12 +274,12 @@ curl -X POST localhost:4825/garden \
452
274
  | DELETE | `/models/unload/{id}` | 모델 언로드 |
453
275
  | POST | `/chat` | 채팅 생성 (`stream=true/false`) |
454
276
  | POST | `/agent` | 파일 생성/수정 에이전트 |
455
- | POST | `/garden` | 지식 정원 저장 |
456
- | GET | `/garden/tree` | 지식 트리 조회 |
457
277
  | GET | `/tools/list_dir` | 디렉토리 목록 |
458
278
  | POST | `/tools/run_command` | 터미널 명령 실행 |
459
279
  | GET | `/mcp/installed` | 설치된 MCP 목록 |
460
280
 
281
+ 자세한 MCP 도구 목록: [docs/mcp-tools.md](docs/mcp-tools.md)
282
+
461
283
  ---
462
284
 
463
285
  ## 자동 시작 (Mac)
@@ -469,8 +291,7 @@ cat > ~/Library/LaunchAgents/com.ltcai.plist << 'EOF'
469
291
  <plist version="1.0">
470
292
  <dict>
471
293
  <key>Label</key><string>com.ltcai</string>
472
- <key>ProgramArguments</key>
473
- <array>
294
+ <key>ProgramArguments</key><array>
474
295
  <string>/usr/local/bin/LTCAI</string>
475
296
  </array>
476
297
  <key>RunAtLoad</key><true/>
@@ -480,18 +301,25 @@ cat > ~/Library/LaunchAgents/com.ltcai.plist << 'EOF'
480
301
  </dict>
481
302
  </plist>
482
303
  EOF
483
-
484
304
  launchctl load ~/Library/LaunchAgents/com.ltcai.plist
485
305
  ```
486
306
 
487
- 또는 동봉된 스크립트 사용:
488
-
489
- ```bash
490
- ./start_ai.sh # 자동 재시작 + caffeinate (슬립 방지)
491
- ```
307
+ 또는: `./start_ai.sh` (자동 재시작 + caffeinate)
492
308
 
493
309
  ---
494
310
 
311
+ ## 기여
312
+
313
+ [CONTRIBUTING.md](CONTRIBUTING.md)를 참고하세요.
314
+
315
+ ## 보안 취약점 제보
316
+
317
+ [SECURITY.md](SECURITY.md)를 참고하세요.
318
+
319
+ ## 릴리스 노트
320
+
321
+ 현재 버전: **0.1.11** — 자세한 변경 이력은 [docs/CHANGELOG.md](docs/CHANGELOG.md) 참고.
322
+
495
323
  ## 라이선스
496
324
 
497
325
  MIT