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.
- package/README.md +141 -313
- package/docs/CHANGELOG.md +227 -0
- package/docs/architecture.md +121 -0
- package/docs/mcp-tools.md +116 -0
- package/docs/privacy.md +74 -0
- package/docs/public-deploy.md +137 -0
- package/docs/security-model.md +121 -0
- package/ltcai_cli.py +2 -2
- package/package.json +1 -1
- package/server.py +997 -261
- package/skills/SKILL_TEMPLATE.md +61 -29
- package/skills/code_review/SKILL.md +28 -0
- package/skills/code_review/examples.md +59 -0
- package/skills/code_review/risk.json +9 -0
- package/skills/code_review/schema.json +65 -0
- package/skills/data_analysis/SKILL.md +28 -0
- package/skills/data_analysis/examples.md +62 -0
- package/skills/data_analysis/risk.json +9 -0
- package/skills/data_analysis/schema.json +61 -0
- package/skills/file_edit/SKILL.md +33 -0
- package/skills/file_edit/examples.md +45 -0
- package/skills/file_edit/risk.json +9 -0
- package/skills/file_edit/schema.json +60 -0
- package/skills/summarize_document/SKILL.md +68 -0
- package/skills/summarize_document/examples.md +65 -0
- package/skills/summarize_document/risk.json +9 -0
- package/skills/summarize_document/schema.json +71 -0
- package/skills/web_search/SKILL.md +28 -0
- package/skills/web_search/examples.md +61 -0
- package/skills/web_search/risk.json +9 -0
- package/skills/web_search/schema.json +62 -0
- package/tests/integration/__pycache__/__init__.cpython-314.pyc +0 -0
- package/tests/integration/__pycache__/test_api.cpython-314-pytest-9.0.3.pyc +0 -0
- package/tests/unit/__pycache__/test_tools.cpython-314-pytest-9.0.3.pyc +0 -0
- package/tests/unit/test_tools.py +194 -1
- package/tools.py +264 -4
package/README.md
CHANGED
|
@@ -1,170 +1,108 @@
|
|
|
1
1
|
# Lattice AI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**개인 AI 워크스페이스 서버** — 로컬/클라우드 LLM을 웹 UI · VS Code 확장 · Telegram 봇 · MCP 도구 하나로 묶습니다.
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
[](https://pypi.org/project/ltcai/)
|
|
8
|
+
[](https://www.npmjs.com/package/ltcai)
|
|
9
|
+
[](https://marketplace.visualstudio.com/items?itemName=parktaesoo.ltcai)
|
|
10
|
+
[](LICENSE)
|
|
19
11
|
|
|
20
|
-
|
|
21
|
-
|
|
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
|
+
<!--  -->
|
|
28
14
|
|
|
29
15
|
---
|
|
30
16
|
|
|
31
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
23
|
+
# PyPI (Apple Silicon MLX 로컬 모델 포함)
|
|
24
|
+
pip install "ltcai[local]"
|
|
74
25
|
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
34
|
+
**설치 확인:**
|
|
84
35
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
-
|
|
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
|
-
##
|
|
53
|
+
## 첫 채팅 → VS Code 연결 → Telegram 연결
|
|
97
54
|
|
|
98
|
-
###
|
|
99
|
-
- 프로필 수정 (`PATCH /account/profile`) — 이름·닉네임 변경
|
|
100
|
-
- 회원가입 폼 — 비밀번호 확인 필드, 인라인 에러 메시지
|
|
101
|
-
- 어드민 패널 초대 링크 섹션 — 원클릭 복사
|
|
102
|
-
- 어드민 대시보드 메시지 활동 차트 (Chart.js, 최근 14일)
|
|
103
|
-
- 웹 UI 한국어 / 영어 전환 (`🌐 Languages` 버튼, localStorage 저장)
|
|
55
|
+
### 1단계: 첫 채팅
|
|
104
56
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- 채팅 헤더에서 언어 선택 드롭다운이 ops-strip을 가리는 문제 수정
|
|
57
|
+
1. `http://localhost:4825` 열기
|
|
58
|
+
2. **회원가입** → 첫 번째 계정이 자동으로 admin
|
|
59
|
+
3. 상단 모델 드롭다운 → 모델 선택 → 채팅 시작
|
|
109
60
|
|
|
110
|
-
|
|
61
|
+
클라우드 모델 사용 시 API 키를 먼저 설정하거나, 어드민 패널에서 입력합니다:
|
|
111
62
|
|
|
112
|
-
|
|
63
|
+
```bash
|
|
64
|
+
OPENAI_API_KEY=sk-... LTCAI
|
|
65
|
+
```
|
|
113
66
|
|
|
114
|
-
###
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 / 클라우드 모델
|
|
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
|
-
|
|
191
|
-
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
|
|
141
|
+
### 멀티모델 핫스왑
|
|
221
142
|
|
|
222
143
|
```bash
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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 등에서 운영할
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
>
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|