ltcai 0.1.9 → 0.1.16

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