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.
- package/README.md +174 -305
- package/docs/CHANGELOG.md +307 -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/knowledge_graph.py +123 -15
- package/llm_router.py +100 -28
- package/ltcai_cli.py +138 -5
- package/package.json +14 -2
- package/server.py +1756 -329
- 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/static/account.html +53 -51
- package/static/admin.html +50 -46
- package/static/chat.html +124 -96
- package/static/graph.html +1231 -337
- package/static/manifest.json +2 -2
- 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,140 @@
|
|
|
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
|
-
```
|
|
5
|
+
Apple Silicon MLX 로컬 추론 · OpenAI/Groq/OpenRouter 클라우드 모델 · Graph RAG · 멀티스텝 에이전트 워크플로
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
[](https://pypi.org/project/ltcai/)
|
|
8
|
+
[](https://www.npmjs.com/package/ltcai)
|
|
9
|
+
[](https://marketplace.visualstudio.com/items?itemName=parktaesoo.ltcai)
|
|
10
|
+
[](https://open-vsx.org/extension/parktaesoo/ltcai)
|
|
11
|
+
[](./LICENSE)
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Lattice AI는 개인 개발자가 로컬 모델, 클라우드 모델, 에이전트 툴링, 코드 에디터 연동을 하나의 워크스페이스로 운영할 수 있게 만든 서버입니다.
|
|
14
14
|
|
|
15
|
-
###
|
|
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
|
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
##
|
|
38
|
+
## 설치 & 첫 실행 (30초)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# PyPI (클라우드 모델)
|
|
42
|
+
pip install ltcai
|
|
66
43
|
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
50
|
+
# 서버 실행 (로컬)
|
|
51
|
+
LTCAI
|
|
52
|
+
# → http://localhost:4825
|
|
74
53
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
66
|
+
**설치 확인:**
|
|
84
67
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
-
|
|
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
|
-
##
|
|
85
|
+
## 첫 채팅 → VS Code 연결 → Telegram 연결
|
|
97
86
|
|
|
98
|
-
###
|
|
99
|
-
- 프로필 수정 (`PATCH /account/profile`) — 이름·닉네임 변경
|
|
100
|
-
- 회원가입 폼 — 비밀번호 확인 필드, 인라인 에러 메시지
|
|
101
|
-
- 어드민 패널 초대 링크 섹션 — 원클릭 복사
|
|
102
|
-
- 어드민 대시보드 메시지 활동 차트 (Chart.js, 최근 14일)
|
|
103
|
-
- 웹 UI 한국어 / 영어 전환 (`🌐 Languages` 버튼, localStorage 저장)
|
|
87
|
+
### 1단계: 첫 채팅
|
|
104
88
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
- 채팅 헤더에서 언어 선택 드롭다운이 ops-strip을 가리는 문제 수정
|
|
89
|
+
1. `http://localhost:4825` 열기
|
|
90
|
+
2. **회원가입** → 첫 번째 계정이 자동으로 admin
|
|
91
|
+
3. 상단 모델 드롭다운 → 모델 선택 → 채팅 시작
|
|
109
92
|
|
|
110
|
-
|
|
93
|
+
클라우드 모델 사용 시 API 키를 먼저 설정하거나, 어드민 패널에서 입력합니다:
|
|
111
94
|
|
|
112
|
-
|
|
95
|
+
```bash
|
|
96
|
+
OPENAI_API_KEY=sk-... LTCAI
|
|
97
|
+
```
|
|
113
98
|
|
|
114
|
-
###
|
|
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
|
-
|
|
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()` 위험 플래그 차단
|
|
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
|
-
|
|
122
|
+
---
|
|
164
123
|
|
|
165
|
-
|
|
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 / 클라우드 모델
|
|
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
|
-
|
|
191
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
173
|
+
### 멀티모델 핫스왑
|
|
221
174
|
|
|
222
175
|
```bash
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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 등에서 운영할
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
251
|
+
`0.1.16 릴리스는 아래 네 채널을 동일 버전으로 맞춥니다.
|
|
347
252
|
|
|
348
|
-
|
|
253
|
+
- `npm`
|
|
254
|
+
- `PyPI`
|
|
255
|
+
- `VS Code Marketplace`
|
|
256
|
+
- `Open VSX`
|
|
349
257
|
|
|
350
|
-
|
|
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
|
-
|
|
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
|
-
>
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|