ltcai 0.1.8 → 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 -289
- 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/knowledge_graph.py +18 -5
- package/ltcai_cli.py +2 -2
- package/package.json +1 -1
- package/server.py +1140 -280
- 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_security.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_security.py +125 -0
- package/tests/unit/test_tools.py +194 -1
- package/tools.py +264 -4
package/README.md
CHANGED
|
@@ -1,146 +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
|
-
```
|
|
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
|
+
[](LICENSE)
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
### Added
|
|
16
|
-
- **PWA (Progressive Web App)** — iPad / Android / Galaxy Tab 홈화면 설치 지원
|
|
17
|
-
- `manifest.json` + Service Worker (`sw.js`) + 아이콘 4종 (192px, 512px, apple-touch-icon 180px, favicon 32px)
|
|
18
|
-
- iOS Safari: 공유 버튼 → "홈 화면에 추가" → 앱처럼 전체화면 실행
|
|
19
|
-
- Android Chrome: 주소창 "설치" 버튼 → 홈화면 앱
|
|
20
|
-
- `viewport-fit=cover` — iPhone Dynamic Island / 노치 안전영역 확장
|
|
21
|
-
- **서버 네트워크 공개 바인딩** — 기본 host `0.0.0.0`으로 변경
|
|
22
|
-
- 같은 Wi-Fi에서 모든 기기(`http://<Mac IP>:4825`)로 바로 접근 가능
|
|
23
|
-
- 시작 배너에 로컬 URL + 네트워크 IP 자동 출력
|
|
24
|
-
- **Windows 서버 호환성**
|
|
25
|
-
- `computer_screenshot`: macOS `screencapture` → Windows/Linux `pyautogui` fallback
|
|
26
|
-
- `computer_open_app` / `computer_open_url`: `open -a` / `cmd /c start` / `xdg-open` 플랫폼 자동 분기
|
|
12
|
+
<!-- 스크린샷 / GIF — docs/demo.gif 또는 스크린샷으로 교체하세요 -->
|
|
13
|
+
<!--  -->
|
|
27
14
|
|
|
28
15
|
---
|
|
29
16
|
|
|
30
|
-
##
|
|
17
|
+
## 설치 & 첫 실행 (30초)
|
|
31
18
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- iOS 소프트 키보드 대응 (`100dvh`), 노치/홈바 안전영역 (`safe-area-inset`)
|
|
36
|
-
- ops-strip 카드 가로 스크롤 압축, textarea 자동 줌 방지
|
|
37
|
-
- 브레이크포인트 3단계: 900px / 768px / 480px
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## v0.1.6 변경사항
|
|
42
|
-
|
|
43
|
-
### Added
|
|
44
|
-
- **LATTICEAI_ENABLE_GRAPH** 환경변수 — Data Graph를 퍼블릭 배포에서 완전히 비활성화하는 토글 (기본값 `true`)
|
|
45
|
-
- `false` 설정 시 모든 그래프 API 404, 인제스트 건너뜀, 사이드바 버튼 자동 숨김
|
|
46
|
-
|
|
47
|
-
---
|
|
19
|
+
```bash
|
|
20
|
+
# PyPI (클라우드 모델)
|
|
21
|
+
pip install ltcai
|
|
48
22
|
|
|
49
|
-
|
|
23
|
+
# PyPI (Apple Silicon MLX 로컬 모델 포함)
|
|
24
|
+
pip install "ltcai[local]"
|
|
50
25
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
- **Graph RAG** — 그래프 검색 결과를 채팅 컨텍스트에 자동 주입하여 이전 대화·문서 참조 강화
|
|
54
|
-
- **Telegram 원격 제어** — 인라인 키보드 메뉴로 상태 조회, 모델 관리, 스크린샷, 그래프 통계 원격 제어
|
|
55
|
-
- 어드민 세션 핸드오프 보안 강화 — URL 파라미터 → `sessionStorage` 1회 읽기 방식으로 교체
|
|
26
|
+
# npm (자동 Python 환경 구성)
|
|
27
|
+
npm install -g ltcai
|
|
56
28
|
|
|
57
|
-
|
|
29
|
+
# 서버 실행
|
|
30
|
+
LTCAI
|
|
31
|
+
# → http://localhost:4825
|
|
32
|
+
```
|
|
58
33
|
|
|
59
|
-
|
|
34
|
+
**설치 확인:**
|
|
60
35
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
-
|
|
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
|
+
```
|
|
69
50
|
|
|
70
51
|
---
|
|
71
52
|
|
|
72
|
-
##
|
|
53
|
+
## 첫 채팅 → VS Code 연결 → Telegram 연결
|
|
73
54
|
|
|
74
|
-
###
|
|
75
|
-
- 프로필 수정 (`PATCH /account/profile`) — 이름·닉네임 변경
|
|
76
|
-
- 회원가입 폼 — 비밀번호 확인 필드, 인라인 에러 메시지
|
|
77
|
-
- 어드민 패널 초대 링크 섹션 — 원클릭 복사
|
|
78
|
-
- 어드민 대시보드 메시지 활동 차트 (Chart.js, 최근 14일)
|
|
79
|
-
- 웹 UI 한국어 / 영어 전환 (`🌐 Languages` 버튼, localStorage 저장)
|
|
55
|
+
### 1단계: 첫 채팅
|
|
80
56
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
- 채팅 헤더에서 언어 선택 드롭다운이 ops-strip을 가리는 문제 수정
|
|
57
|
+
1. `http://localhost:4825` 열기
|
|
58
|
+
2. **회원가입** → 첫 번째 계정이 자동으로 admin
|
|
59
|
+
3. 상단 모델 드롭다운 → 모델 선택 → 채팅 시작
|
|
85
60
|
|
|
86
|
-
|
|
61
|
+
클라우드 모델 사용 시 API 키를 먼저 설정하거나, 어드민 패널에서 입력합니다:
|
|
87
62
|
|
|
88
|
-
|
|
63
|
+
```bash
|
|
64
|
+
OPENAI_API_KEY=sk-... LTCAI
|
|
65
|
+
```
|
|
89
66
|
|
|
90
|
-
###
|
|
91
|
-
- 비밀번호 변경 API (`POST /account/change-password`)
|
|
92
|
-
- 웹 UI 비밀번호 변경 모달 (헤더 계정 아이콘)
|
|
67
|
+
### 2단계: VS Code 연결
|
|
93
68
|
|
|
94
|
-
|
|
69
|
+
1. VS Code → Extensions → `ltcai` 검색 → Install
|
|
70
|
+
2. `Cmd+Shift+A` → Lattice AI 채팅 패널 열기
|
|
71
|
+
3. 기본적으로 `http://localhost:4825` 에 자동 연결됩니다
|
|
95
72
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
- VS Code / Cursor / Antigravity 확장
|
|
103
|
-
- Telegram 봇 (로컬 AI 미러 + Codex 클라우드 봇)
|
|
104
|
-
- 어드민 패널 (`/admin`)
|
|
105
|
-
- P-Reinforce 지식 정원 엔진
|
|
106
|
-
- MCP 서버 연동
|
|
107
|
-
- Ollama / vLLM / LM Studio / llama.cpp 연동
|
|
108
|
-
|
|
109
|
-
### Security
|
|
110
|
-
- 모든 민감 엔드포인트 인증 적용
|
|
111
|
-
- SameSite=Lax 쿠키 (CSRF 방어)
|
|
112
|
-
- scrypt 비밀번호 해싱
|
|
113
|
-
- tempfile 레이스 컨디션 수정
|
|
114
|
-
- `run_command()` 위험 플래그 차단
|
|
73
|
+
| 단축키 | 기능 |
|
|
74
|
+
|--------|------|
|
|
75
|
+
| `Cmd+Shift+A` | 채팅 패널 열기 |
|
|
76
|
+
| `Cmd+Shift+E` | 선택 코드 편집 |
|
|
77
|
+
| `Cmd+Shift+M` | 모델 로드 / 전환 |
|
|
78
|
+
| 우클릭 메뉴 | Explain / Edit / Knowledge Garden 저장 |
|
|
115
79
|
|
|
116
|
-
|
|
80
|
+
### 3단계: Telegram 봇 연결
|
|
117
81
|
|
|
118
|
-
|
|
82
|
+
BotFather에서 토큰을 발급받은 후:
|
|
119
83
|
|
|
84
|
+
```bash
|
|
85
|
+
LATTICEAI_TELEGRAM_BOT_TOKEN=your-token LTCAI
|
|
120
86
|
```
|
|
121
|
-
Lattice AI/
|
|
122
|
-
├── server.py # FastAPI 브릿지 서버 (port 4825)
|
|
123
|
-
├── knowledge_graph.py # SQLite Data Graph + Graph RAG 저장소
|
|
124
|
-
├── llm_router.py # 로컬/클라우드 모델 라우터
|
|
125
|
-
├── tools.py # 워크스페이스 도구 (파일, 터미널, 스크린샷 등)
|
|
126
|
-
├── p_reinforce.py # P-Reinforce 지식 정원 엔진
|
|
127
|
-
├── telegram_bot.py # 로컬 AI Telegram 미러 봇
|
|
128
|
-
├── codex_telegram_bot.py # 클라우드 Codex Telegram 봇
|
|
129
|
-
├── static/ # 웹 UI (indexd.html), 어드민 패널 (admin.html)
|
|
130
|
-
├── bin/ltcai.js # npm CLI entrypoint
|
|
131
|
-
├── pyproject.toml # PyPI 메타데이터
|
|
132
|
-
└── vscode-extension/ # VS Code / Cursor / Antigravity 확장
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
---
|
|
136
87
|
|
|
137
|
-
|
|
88
|
+
이후 Telegram에서 봇과 대화하면 로컬 AI 서버와 실시간으로 연결됩니다.
|
|
138
89
|
|
|
139
|
-
|
|
90
|
+
---
|
|
140
91
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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 |
|
|
144
106
|
|
|
145
107
|
---
|
|
146
108
|
|
|
@@ -148,87 +110,58 @@ Lattice AI/
|
|
|
148
110
|
|
|
149
111
|
| 기능 | macOS (Apple Silicon) | Windows / Linux |
|
|
150
112
|
|------|:---:|:---:|
|
|
151
|
-
| 웹 UI / 클라우드 모델
|
|
113
|
+
| 웹 UI / 클라우드 모델 | ✅ | ✅ |
|
|
152
114
|
| VS Code / Cursor 확장 | ✅ | ✅ |
|
|
153
115
|
| Telegram 봇 | ✅ | ✅ |
|
|
154
116
|
| MLX 로컬 모델 (Gemma, Qwen 등) | ✅ | ❌ Apple Silicon 전용 |
|
|
155
117
|
| Ollama / vLLM / LM Studio 연동 | ✅ | ✅ |
|
|
156
118
|
|
|
157
|
-
> Windows / Linux에서 로컬 모델을 사용하려면 서버 실행 후 웹 UI(`http://localhost:4825`)에서 Ollama 등을 설치할 수 있습니다.
|
|
158
|
-
|
|
159
119
|
---
|
|
160
120
|
|
|
161
|
-
##
|
|
162
|
-
|
|
163
|
-
### 설치 & 실행
|
|
121
|
+
## 로컬 모델 (Apple Silicon)
|
|
164
122
|
|
|
165
123
|
```bash
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
# PyPI (Apple Silicon MLX 포함)
|
|
170
|
-
pip install "ltcai[local]"
|
|
171
|
-
|
|
172
|
-
# npm
|
|
173
|
-
npm install -g ltcai
|
|
174
|
-
|
|
175
|
-
# 서버 실행
|
|
124
|
+
LATTICEAI_MODE=local \
|
|
125
|
+
LATTICEAI_LOCAL_MODEL=mlx-community/gemma-4-26b-a4b-it-4bit \
|
|
176
126
|
LTCAI
|
|
177
|
-
# → http://localhost:4825
|
|
178
127
|
```
|
|
179
128
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
python ltcai_cli.py
|
|
184
|
-
python ltcai_cli.py --reload # 코드 변경 시 자동 재시작
|
|
129
|
+
### 추천 모델 (M-series Mac)
|
|
185
130
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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 | ⭐⭐⭐⭐ |
|
|
193
138
|
|
|
194
|
-
|
|
139
|
+
> **32GB Mac 추천**: `gemma-4-26b-a4b-it-4bit` — 빠르고 뛰어난 범용 성능
|
|
195
140
|
|
|
196
|
-
|
|
141
|
+
### 멀티모델 핫스왑
|
|
197
142
|
|
|
198
143
|
```bash
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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"}'
|
|
202
147
|
```
|
|
203
148
|
|
|
204
|
-
- MLX 로컬 모델 자동 로드
|
|
205
|
-
- Telegram 미러 봇 활성화 가능
|
|
206
|
-
- 파일/터미널/스크린샷 도구 사용 가능
|
|
207
|
-
|
|
208
149
|
---
|
|
209
150
|
|
|
210
151
|
## 퍼블릭 모드 (클라우드 서버)
|
|
211
152
|
|
|
212
|
-
Render, Fly.io, Railway, VPS 등에서 운영할
|
|
153
|
+
Render, Fly.io, Railway, VPS 등에서 운영할 때:
|
|
213
154
|
|
|
214
155
|
```bash
|
|
215
156
|
LATTICEAI_MODE=public \
|
|
216
157
|
LATTICEAI_ALLOW_LOCAL_MODELS=false \
|
|
217
|
-
LATTICEAI_ENABLE_TELEGRAM=false \
|
|
218
158
|
LATTICEAI_PUBLIC_MODEL=openai:gpt-4o-mini \
|
|
219
159
|
OPENAI_API_KEY=sk-... \
|
|
220
160
|
LATTICEAI_INVITE_CODE=my-secret-code \
|
|
221
161
|
LTCAI
|
|
222
162
|
```
|
|
223
163
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
```
|
|
227
|
-
openai:gpt-4o-mini
|
|
228
|
-
openrouter:openai/gpt-4o-mini
|
|
229
|
-
groq:llama-3.1-8b-instant
|
|
230
|
-
together:meta-llama/Llama-3.3-70B-Instruct-Turbo
|
|
231
|
-
```
|
|
164
|
+
자세한 내용은 [docs/public-deploy.md](docs/public-deploy.md)를 참고하세요.
|
|
232
165
|
|
|
233
166
|
### Docker
|
|
234
167
|
|
|
@@ -241,47 +174,36 @@ docker run --rm -p 4825:4825 \
|
|
|
241
174
|
lattice-ai
|
|
242
175
|
```
|
|
243
176
|
|
|
244
|
-
### 퍼블릭 서버 체크리스트
|
|
245
|
-
|
|
246
|
-
- `LATTICEAI_MODE=public` 설정
|
|
247
|
-
- 클라우드 API 키 설정 (`OPENAI_API_KEY` 등)
|
|
248
|
-
- `LATTICEAI_INVITE_CODE`를 비공개 값으로 설정
|
|
249
|
-
- `LATTICEAI_ENABLE_GRAPH=false` — Data Graph를 공개 서버에서 숨기려면 설정
|
|
250
|
-
- `/data`에 영구 볼륨 마운트
|
|
251
|
-
- HTTPS 리버스 프록시 앞에 두기 (nginx, Caddy 등)
|
|
252
|
-
|
|
253
177
|
---
|
|
254
178
|
|
|
255
|
-
##
|
|
256
|
-
|
|
257
|
-
### 지원 모델 예시 (M-series Mac 기준)
|
|
258
|
-
|
|
259
|
-
| 모델 | 용도 | 크기 | 추천도 |
|
|
260
|
-
|------|------|------|--------|
|
|
261
|
-
| `mlx-community/gemma-4-26b-a4b-it-4bit` | 범용/코딩 | ~14GB | ⭐⭐⭐⭐⭐ |
|
|
262
|
-
| `mlx-community/Qwen2.5-Coder-32B-Instruct-4bit` | 코딩 | ~18GB | ⭐⭐⭐⭐⭐ |
|
|
263
|
-
| `mlx-community/Qwen2.5-Coder-14B-Instruct-4bit` | 코딩 | ~8GB | ⭐⭐⭐⭐ |
|
|
264
|
-
| `mlx-community/Qwen2.5-Coder-7B-Instruct-4bit` | 코딩 | ~4GB | ⭐⭐⭐ |
|
|
265
|
-
| `mlx-community/DeepSeek-R1-0528-4bit` | 추론 | ~38GB | ⭐⭐⭐⭐ |
|
|
266
|
-
| `mlx-community/Phi-4-4bit` | 코딩 | ~8GB | ⭐⭐⭐⭐ |
|
|
267
|
-
| `mlx-community/Llama-3.1-8B-Instruct-4bit` | 범용 | ~4.5GB | ⭐⭐⭐ |
|
|
179
|
+
## 보안
|
|
268
180
|
|
|
269
|
-
|
|
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/`)에만 저장됩니다.
|
|
270
190
|
|
|
271
|
-
|
|
191
|
+
보안 취약점 제보: [SECURITY.md](SECURITY.md) 참고
|
|
272
192
|
|
|
273
|
-
|
|
274
|
-
# 모델 로드
|
|
275
|
-
curl -X POST localhost:4825/models/load \
|
|
276
|
-
-H "Content-Type: application/json" \
|
|
277
|
-
-d '{"model_id": "mlx-community/Qwen2.5-Coder-14B-Instruct-4bit"}'
|
|
193
|
+
---
|
|
278
194
|
|
|
279
|
-
|
|
280
|
-
curl -X POST localhost:4825/models/switch/mlx-community%2FQwen2.5-Coder-14B-Instruct-4bit
|
|
195
|
+
## 문제 해결
|
|
281
196
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
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` 로 재시작 |
|
|
285
207
|
|
|
286
208
|
---
|
|
287
209
|
|
|
@@ -296,84 +218,22 @@ curl -X DELETE localhost:4825/models/unload/mlx-community%2FQwen2.5-Coder-14B-In
|
|
|
296
218
|
|
|
297
219
|
```bash
|
|
298
220
|
cd vscode-extension
|
|
299
|
-
npm install
|
|
300
|
-
|
|
301
|
-
npm run package:vsix
|
|
302
|
-
|
|
303
|
-
# 설치 (모든 에디터 한 번에)
|
|
304
|
-
npm run install:all
|
|
305
|
-
|
|
306
|
-
# 또는 에디터에서: Extensions → "..." → "Install from VSIX"
|
|
221
|
+
npm install && npm run build && npm run package:vsix
|
|
222
|
+
# Extensions → "..." → "Install from VSIX"
|
|
307
223
|
```
|
|
308
224
|
|
|
309
|
-
### 키보드 단축키
|
|
310
|
-
|
|
311
|
-
| 단축키 | 기능 |
|
|
312
|
-
|--------|------|
|
|
313
|
-
| `Cmd+Shift+A` | 채팅 패널 열기 |
|
|
314
|
-
| `Cmd+Shift+E` | 선택 코드 편집 |
|
|
315
|
-
| `Cmd+Shift+M` | 모델 로드 / 전환 |
|
|
316
|
-
| 우클릭 메뉴 | Explain / Edit / Knowledge Garden에 저장 |
|
|
317
|
-
|
|
318
|
-
---
|
|
319
|
-
|
|
320
|
-
## Telegram 봇
|
|
321
|
-
|
|
322
|
-
### 1. 로컬 AI 봇 (local 모드)
|
|
323
|
-
|
|
324
|
-
로컬 Lattice AI 서버와 대화하고 웹 채팅을 Telegram으로 미러링합니다.
|
|
325
|
-
|
|
326
|
-
```bash
|
|
327
|
-
LATTICEAI_TELEGRAM_BOT_TOKEN=your-token LTCAI
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
### 2. Codex 클라우드 봇
|
|
331
|
-
|
|
332
|
-
Telegram에서 GPT 기반 개발 어시스턴트와 대화하고, 선택적으로 GitHub 이슈를 생성합니다.
|
|
333
|
-
|
|
334
|
-
```bash
|
|
335
|
-
CODEX_TELEGRAM_BOT_TOKEN=your-token \
|
|
336
|
-
OPENAI_API_KEY=sk-... \
|
|
337
|
-
CODEX_OPENAI_MODEL=gpt-4o \
|
|
338
|
-
python codex_telegram_bot.py
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
Telegram 명령어: `/start` `/reset` `/issue 제목`
|
|
342
|
-
|
|
343
|
-
선택적으로 GitHub 이슈 연동:
|
|
344
|
-
|
|
345
|
-
```bash
|
|
346
|
-
GITHUB_TOKEN=ghp-... GITHUB_REPO=owner/repo
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
---
|
|
350
|
-
|
|
351
|
-
## 보안
|
|
352
|
-
|
|
353
|
-
- **인증**: 모든 `/tools/*`, `/agent`, `/mcp/*`, `/local/*` 등 민감 엔드포인트는 로그인 세션 필요 (`REQUIRE_AUTH=true` 시)
|
|
354
|
-
- **세션**: 7일 TTL, 서버 메모리 저장 (재시작 시 로그아웃)
|
|
355
|
-
- **바인딩**: 기본 `127.0.0.1:4825` — 외부 접근 허용 시 명시적으로 `LATTICEAI_HOST=0.0.0.0` 설정
|
|
356
|
-
- **CORS**: 기본 localhost만 허용 — 외부 허용 시 `LATTICEAI_CORS_ALLOW_NETWORK=true`
|
|
357
|
-
- **API 키**: OS keyring/Keychain 저장 — 평문 저장 허용 시 `LATTICEAI_ALLOW_PLAINTEXT_API_KEYS=true`
|
|
358
|
-
- **히스토리**: 저장 전 API key/token/password 패턴 자동 마스킹
|
|
359
|
-
- **쿠키**: `HttpOnly + SameSite=Lax` (CSRF 방어)
|
|
360
|
-
|
|
361
225
|
---
|
|
362
226
|
|
|
363
227
|
## 어드민 패널
|
|
364
228
|
|
|
365
|
-
`http://localhost:4825/admin` — 관리자 계정으로 로그인 후 접근
|
|
229
|
+
`http://localhost:4825/admin` — 관리자 계정으로 로그인 후 접근
|
|
366
230
|
|
|
367
231
|
- 사용자 목록 및 역할 관리 (admin / user)
|
|
368
|
-
-
|
|
369
|
-
-
|
|
232
|
+
- 대시보드 (메모리, 모델, 시스템 상태, 활동 차트)
|
|
233
|
+
- 초대 링크 생성 및 복사
|
|
370
234
|
|
|
371
|
-
>
|
|
372
|
-
>
|
|
373
|
-
> 환경변수로 admin을 고정할 수도 있습니다:
|
|
374
|
-
> ```bash
|
|
375
|
-
> LATTICEAI_ADMIN_EMAILS=you@example.com LTCAI
|
|
376
|
-
> ```
|
|
235
|
+
> 첫 번째로 가입한 계정이 자동으로 admin입니다.
|
|
236
|
+
> 환경변수로 고정: `LATTICEAI_ADMIN_EMAILS=you@example.com`
|
|
377
237
|
|
|
378
238
|
---
|
|
379
239
|
|
|
@@ -383,7 +243,6 @@ GITHUB_TOKEN=ghp-... GITHUB_REPO=owner/repo
|
|
|
383
243
|
|
|
384
244
|
```
|
|
385
245
|
~/.ltcai-brain/
|
|
386
|
-
├── INDEX.md
|
|
387
246
|
├── 00_Raw/ # 원시 데이터, 아이디어
|
|
388
247
|
├── 10_Wiki/ # 검증된 개념, 레퍼런스
|
|
389
248
|
├── 20_Skills/ # 코드 스니펫, 프롬프트
|
|
@@ -393,27 +252,14 @@ GITHUB_TOKEN=ghp-... GITHUB_REPO=owner/repo
|
|
|
393
252
|
|
|
394
253
|
에디터에서 텍스트 선택 → 우클릭 → **"Save to Knowledge Garden"**
|
|
395
254
|
|
|
396
|
-
또는 API:
|
|
397
|
-
|
|
398
|
-
```bash
|
|
399
|
-
curl -X POST localhost:4825/garden \
|
|
400
|
-
-H "Content-Type: application/json" \
|
|
401
|
-
-d '{"content": "학습한 내용", "category": "10_Wiki"}'
|
|
402
|
-
```
|
|
403
|
-
|
|
404
255
|
---
|
|
405
256
|
|
|
406
257
|
## Data Graph / Graph RAG
|
|
407
258
|
|
|
408
|
-
|
|
259
|
+
채팅·AI 답변·업로드 문서(PDF/DOCX/XLSX/PPTX/TXT/CSV)를 `~/.ltcai/knowledge_graph.sqlite`에 자동 저장합니다.
|
|
409
260
|
|
|
410
|
-
- 채팅/AI 답변: `Message`, `AIResponse`, `Person`, `Conversation`, `Topic`, `Decision`, `Task`
|
|
411
|
-
- 문서 업로드: `File`, `Chunk`, `Page`, `Slide`, `Sheet`, `Image`, `Topic`
|
|
412
|
-
- 원본 파일 blob: `~/.ltcai/knowledge_graph_blobs/`
|
|
413
261
|
- 시각화: `http://localhost:4825/graph`
|
|
414
|
-
-
|
|
415
|
-
|
|
416
|
-
`/clear`, `/clear_all`, 대화 삭제는 사용자 채팅창만 정리합니다. Data Graph/RAG 데이터와 관리자 감사 로그는 보존됩니다.
|
|
262
|
+
- 검색 및 RAG 컨텍스트 자동 주입
|
|
417
263
|
|
|
418
264
|
---
|
|
419
265
|
|
|
@@ -428,12 +274,12 @@ curl -X POST localhost:4825/garden \
|
|
|
428
274
|
| DELETE | `/models/unload/{id}` | 모델 언로드 |
|
|
429
275
|
| POST | `/chat` | 채팅 생성 (`stream=true/false`) |
|
|
430
276
|
| POST | `/agent` | 파일 생성/수정 에이전트 |
|
|
431
|
-
| POST | `/garden` | 지식 정원 저장 |
|
|
432
|
-
| GET | `/garden/tree` | 지식 트리 조회 |
|
|
433
277
|
| GET | `/tools/list_dir` | 디렉토리 목록 |
|
|
434
278
|
| POST | `/tools/run_command` | 터미널 명령 실행 |
|
|
435
279
|
| GET | `/mcp/installed` | 설치된 MCP 목록 |
|
|
436
280
|
|
|
281
|
+
자세한 MCP 도구 목록: [docs/mcp-tools.md](docs/mcp-tools.md)
|
|
282
|
+
|
|
437
283
|
---
|
|
438
284
|
|
|
439
285
|
## 자동 시작 (Mac)
|
|
@@ -445,8 +291,7 @@ cat > ~/Library/LaunchAgents/com.ltcai.plist << 'EOF'
|
|
|
445
291
|
<plist version="1.0">
|
|
446
292
|
<dict>
|
|
447
293
|
<key>Label</key><string>com.ltcai</string>
|
|
448
|
-
<key>ProgramArguments</key>
|
|
449
|
-
<array>
|
|
294
|
+
<key>ProgramArguments</key><array>
|
|
450
295
|
<string>/usr/local/bin/LTCAI</string>
|
|
451
296
|
</array>
|
|
452
297
|
<key>RunAtLoad</key><true/>
|
|
@@ -456,18 +301,25 @@ cat > ~/Library/LaunchAgents/com.ltcai.plist << 'EOF'
|
|
|
456
301
|
</dict>
|
|
457
302
|
</plist>
|
|
458
303
|
EOF
|
|
459
|
-
|
|
460
304
|
launchctl load ~/Library/LaunchAgents/com.ltcai.plist
|
|
461
305
|
```
|
|
462
306
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
```bash
|
|
466
|
-
./start_ai.sh # 자동 재시작 + caffeinate (슬립 방지)
|
|
467
|
-
```
|
|
307
|
+
또는: `./start_ai.sh` (자동 재시작 + caffeinate)
|
|
468
308
|
|
|
469
309
|
---
|
|
470
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
|
+
|
|
471
323
|
## 라이선스
|
|
472
324
|
|
|
473
325
|
MIT
|