ltcai 0.1.9 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +141 -313
  2. package/docs/CHANGELOG.md +227 -0
  3. package/docs/architecture.md +121 -0
  4. package/docs/mcp-tools.md +116 -0
  5. package/docs/privacy.md +74 -0
  6. package/docs/public-deploy.md +137 -0
  7. package/docs/security-model.md +121 -0
  8. package/ltcai_cli.py +2 -2
  9. package/package.json +1 -1
  10. package/server.py +997 -261
  11. package/skills/SKILL_TEMPLATE.md +61 -29
  12. package/skills/code_review/SKILL.md +28 -0
  13. package/skills/code_review/examples.md +59 -0
  14. package/skills/code_review/risk.json +9 -0
  15. package/skills/code_review/schema.json +65 -0
  16. package/skills/data_analysis/SKILL.md +28 -0
  17. package/skills/data_analysis/examples.md +62 -0
  18. package/skills/data_analysis/risk.json +9 -0
  19. package/skills/data_analysis/schema.json +61 -0
  20. package/skills/file_edit/SKILL.md +33 -0
  21. package/skills/file_edit/examples.md +45 -0
  22. package/skills/file_edit/risk.json +9 -0
  23. package/skills/file_edit/schema.json +60 -0
  24. package/skills/summarize_document/SKILL.md +68 -0
  25. package/skills/summarize_document/examples.md +65 -0
  26. package/skills/summarize_document/risk.json +9 -0
  27. package/skills/summarize_document/schema.json +71 -0
  28. package/skills/web_search/SKILL.md +28 -0
  29. package/skills/web_search/examples.md +61 -0
  30. package/skills/web_search/risk.json +9 -0
  31. package/skills/web_search/schema.json +62 -0
  32. package/tests/integration/__pycache__/__init__.cpython-314.pyc +0 -0
  33. package/tests/integration/__pycache__/test_api.cpython-314-pytest-9.0.3.pyc +0 -0
  34. package/tests/unit/__pycache__/test_tools.cpython-314-pytest-9.0.3.pyc +0 -0
  35. package/tests/unit/test_tools.py +194 -1
  36. package/tools.py +264 -4
@@ -0,0 +1,227 @@
1
+ # Changelog
2
+
3
+ ## [0.1.11] - 2026-05-21
4
+
5
+ ### Agent state machine (renamed + cleaned up)
6
+ - 8개의 명시적 상태: `IDLE → PLANNING → WAITING_APPROVAL → EXECUTING → VERIFYING → (DONE | ROLLBACK → FAILED)`
7
+ - `RETRY` 상태 제거 — 재시도 카운터는 `AgentRunContext.retry_count`에 보관, `VERIFYING`이 `EXECUTING`으로 직접 전환
8
+ - 종료 상태를 `DONE` / `FAILED`로 분리 — 응답에 `final_state` 필드 추가, `status`는 `"ok"` 또는 `"failed"`
9
+
10
+ ### Tool Permission Layer
11
+ - `ToolPermission` 추가 — `{ tool, risk, requires_approval, network }` 4-필드 컴팩트 뷰
12
+ - 기존 7-차원 `TOOL_GOVERNANCE`에서 자동 파생 (단일 진실 공급원)
13
+ - `GET /tools/permissions` 엔드포인트 추가
14
+ - `/mcp/tools` 응답의 각 툴에 `permission` 필드 노출
15
+
16
+ ### Cleanup
17
+ - 중국어 응답 지원 제거 — `detect_language`는 이제 `ko` 또는 `en`만 반환
18
+ - `_LANG_HINT`에서 `"zh"` 키 삭제, EXECUTOR_PROMPT의 "Chinese" 언급 제거
19
+
20
+ ### Repo
21
+ - `CHANGELOG.md` → `docs/CHANGELOG.md` 이동 (루트 가독성 개선)
22
+ - 자동 릴리스 워크플로(`release.yml`) 제거 — 수동 배포 유지
23
+
24
+ ---
25
+
26
+ ## [0.1.10] - 2026-05-21
27
+
28
+ ### Agent intelligence (pro-developer workflow)
29
+ - **`AGENT_SYSTEM_PROMPT` 완전 재작성** — Claude Code 스타일 시니어 개발자 워크플로
30
+ - Discover → Plan → Implement → Verify 4단계 강제
31
+ - JSON 응답에 `thoughts` 필드 추가, transcript에 함께 기록되어 다음 스텝의 컨텍스트로 전달
32
+ - 코드 읽기 전 수정 금지, 검증 없이 "완료" 주장 금지, 작은 diff 원칙
33
+ - 새 도구 카탈로그 + 안티패턴(반복 액션·환각 import·placeholder URL) 명시
34
+ - **`max_steps` 상향** — 기본값 6 → 25, 캡 10 → 50 (`AgentRequest.max_steps`)
35
+
36
+ ### New tools
37
+ - **`edit_file`** — 정밀 diff 편집. `old_string`이 파일에 유일하게 존재해야만 성공(또는 `replace_all=true`). 환각 import / 잘못된 위치 수정 방지. 결과에 `first_edit_line` 포함
38
+ - **`grep`** — 정규식 검색, 전체 텍스트 파일 대상, `glob` 필터, `context_lines`, binary dir(`node_modules`, `.git`, `venv`, `dist` 등) 자동 제외. 기존 `search_files`는 호환 유지
39
+ - **`todo_write` / `todo_read`** — 워크스페이스별 영구 TODO 리스트(`agent_workspace/.lattice/todos.json`). 멀티스텝 작업의 상태 유지. status ∈ `pending | in_progress | completed`. 다중 in_progress 경고
40
+ - **`read_file` 업그레이드** — `numbered`(라인 번호 뷰), `total_lines`, `start_line`/`end_line`, optional `offset`/`limit` 추가. 기존 `content` 반환 호환 유지
41
+ - 위 모든 도구에 `/tools/*` REST 엔드포인트 추가, `_TOOL_RISK` 등록, `/mcp/tools` 카탈로그 노출
42
+
43
+ ### Loop safety
44
+ - `_FILE_CREATE_ACTIONS`에 `edit_file` 포함 — 같은 args로 연속 호출 시 자동 중단
45
+ - 반복 중단 메시지를 "다음 단계로 진행하세요"로 명확화
46
+
47
+ ### Tests
48
+ - `tests/unit/test_tools.py`에 23개 신규 테스트 — edit_file (유일/모호/`replace_all`/identical), grep (regex·glob·case·context·binary dir), todo round-trip + 검증, read_file numbered/offset/limit, 샌드박스 이탈 차단 (`52 passed`)
49
+
50
+ ### Security (보안 기본값 통일)
51
+ - **기본 바인딩 `0.0.0.0` → `127.0.0.1` 롤백** — v0.1.8에서 PWA 편의를 위해 0.0.0.0으로 변경했으나 개인 AI 서버의 기본값은 로컬 전용이어야 안전함. 네트워크 노출이 필요한 경우 `LATTICEAI_HOST=0.0.0.0` 명시적 설정.
52
+ - SECURITY.md, CONTRIBUTING.md, GitHub Actions CI/Release 워크플로 추가
53
+ - docs/ 문서 추가: architecture, security-model, public-deploy, mcp-tools, privacy
54
+
55
+ ---
56
+
57
+ ## [0.1.9] - 2026-05-21
58
+
59
+ ### Security
60
+ - **세션 TTL 7일 → 24시간 + sliding refresh** — 활동 시 만료시간 자동 연장, 15분 단위 디스크 쓰기 throttle
61
+ - **평문 비밀번호 마이그레이션 audit 로깅** — `password_migrated_from_plaintext` 이벤트로 남은 평문 사용자 추적
62
+ - **파일 업로드 magic-number 검증** — `_bytes_match_extension()`: PDF/DOCX/XLSX/PPTX/PNG/JPEG/ZIP 시그니처 확인, 확장자 위조 방지
63
+ - **Rate limiting** — `/chat` 30 burst/분당 30, `/agent` 10 burst/분당 6, `/upload` 20 burst/분당 12. 토큰 버킷 per-user. `LATTICEAI_RATE_LIMIT=0`으로 비활성화 가능
64
+
65
+ ### Reliability
66
+ - **PyMuPDF 파일 핸들 누수 수정** — `/tools/pdf_pages` try/finally로 doc.close() 보장, `len(doc)` 호출 위치 버그 수정
67
+ - **ollama serve 좀비 방지** — 실행 전 already_up 체크, `start_new_session=True`로 detach
68
+ - **knowledge_graph.py 손상된 metadata_json 안전 처리** — `_safe_loads()` 헬퍼로 corrupt row 통과 (5곳 적용)
69
+ - **백그라운드 asyncio 태스크 예외 로깅** — `_spawn()` 헬퍼 (`add_done_callback`) — startup 태스크 silent fail 방지
70
+ - **silent except → logging.warning** — `_load_sessions`, `_persist_sessions`, `load_vpc_config`, `load_mcp_installs`
71
+
72
+ ### Tests
73
+ - **`tests/unit/test_security.py`** — 16개 신규 테스트: bcrypt 해시 라운드트립/유니크, MIME 검증, rate limit (29 → 31개 전체 통과)
74
+
75
+ ---
76
+
77
+ ## [0.1.8] - 2026-05-21
78
+
79
+ ### Added
80
+ - **PWA (Progressive Web App)** — iPad / Android / Galaxy Tab 홈화면 설치 지원
81
+ - `manifest.json`: 앱 이름, 아이콘, 배경색, 테마색, 단축키 정의
82
+ - `sw.js` Service Worker: 정적 파일 캐시-퍼스트, API 네트워크-퍼스트, 오프라인 대응
83
+ - 192×192, 512×512, apple-touch-icon 180×180, favicon 32×32 PNG 아이콘 생성
84
+ - 모든 HTML에 `<link rel="manifest">`, `apple-mobile-web-app-*`, `theme-color` 메타태그 추가
85
+ - `viewport-fit=cover` — iPhone Dynamic Island / 노치 안전영역 확장
86
+ - **서버 네트워크 공개 바인딩** — 기본 host `127.0.0.1` → `0.0.0.0`으로 변경
87
+ - 같은 Wi-Fi 내 iPad / Android / Galaxy Tab 에서 `http://<Mac IP>:4825` 로 바로 접근 가능
88
+ - 시작 배너에 로컬 / 네트워크 URL 및 "Add to Home Screen" 안내 출력
89
+ - **Windows 서버 호환성**
90
+ - `computer_screenshot`: macOS `screencapture` 외 Windows/Linux에서 pyautogui fallback
91
+ - `computer_open_app` / `computer_open_url`: `open -a` (macOS) / `cmd /c start` (Windows) / `xdg-open` (Linux) 자동 분기
92
+ - `_PLATFORM` 상수 도입으로 향후 플랫폼 분기 일관성 확보
93
+ - **배포 파일 포함**: `manifest.json`, `sw.js`, `icons/` 폴더를 npm · PyPI 패키지에 포함
94
+
95
+ ### Deployed
96
+ - npm ✅
97
+ - PyPI ✅
98
+ - VS Code Marketplace ✅
99
+ - Open VSX ✅
100
+
101
+ ---
102
+
103
+ ## [0.1.7] - 2026-05-21
104
+
105
+ ### Added
106
+ - **모바일 반응형 UI** — 폰/태블릿 화면 크기에 자동 대응
107
+ - 768px 이하: 사이드바가 좌측 슬라이드 드로어로 전환, 헤더 햄버거(☰) 버튼으로 열기
108
+ - 오버레이 탭하면 사이드바 닫힘, 대화 선택 시 자동 닫힘
109
+ - ops-strip 카드 3개 → 가로 스크롤 한 줄 압축 (모바일)
110
+ - `100dvh` 적용 — iOS 소프트 키보드 올라와도 레이아웃 유지
111
+ - `env(safe-area-inset-bottom)` — iPhone 노치/홈바 안전영역 자동 여백
112
+ - textarea `font-size: 16px` (480px 이하) — iOS 자동 줌 방지
113
+ - 브레이크포인트 3단계: 900px(태블릿) / 768px(모바일 드로어) / 480px(폰)
114
+
115
+ ---
116
+
117
+ ## [0.1.6] - 2026-05-21
118
+
119
+ ### Added
120
+ - **LATTICEAI_ENABLE_GRAPH** 환경변수 — Data Graph 기능을 퍼블릭 서버에서 완전히 숨길 수 있는 토글 (기본값 `true`)
121
+ - `false`로 설정 시 모든 그래프 API 엔드포인트 404 반환, 인제스트 건너뜀, 사이드바 버튼 자동 숨김
122
+ - `.env.example`에 `LATTICEAI_ENABLE_GRAPH` 항목 추가 (로컬/퍼블릭 모드 각각)
123
+
124
+ ---
125
+
126
+ ## [0.1.5] - 2026-05-21
127
+
128
+ ### Added
129
+ - **Data Graph** — 채팅·AI 답변·업로드 문서를 SQLite 지식 그래프로 자동 구조화, `/graph`에서 Canvas 기반 Force-directed 시각화
130
+ - **Graph RAG** — 그래프 검색 결과를 채팅 컨텍스트에 자동 주입하여 이전 대화·문서 참조 능력 강화
131
+ - **Telegram 원격 제어** — 인라인 키보드 메뉴로 상태 조회, 모델 관리, 스크린샷, 그래프 통계, 문서 업로드 등 원격 제어
132
+ - `knowledge_graph.py` — KnowledgeGraphStore (node/edge/chunk/event), `ingest_message()`, `ingest_document()`, `context_for_query()`, `search()`, `neighbors()`
133
+ - `static/graph.html` — 타입별 색상, 줌/패닝, 핀치 줌, 이웃 하이라이트, 노드 상세 정보, 채팅 연결 링크
134
+
135
+ ### Security
136
+ - 어드민 세션 핸드오프를 URL 파라미터 → `sessionStorage` 1회 읽기 방식으로 교체 (히스토리 노출 방지)
137
+ - `X-Admin-Email` 헤더 폴백 제거 — Bearer 토큰 인증만 허용
138
+
139
+ ---
140
+
141
+ ## [0.1.4] - 2026-05-18
142
+
143
+ ### Added
144
+ - **세션 영속성** — 서버 재시작 후에도 로그인 유지 (sessions.json 파일 기반)
145
+ - **SSO 로그인** — Entra ID / Okta OIDC 지원 (`OIDC_DISCOVERY_URL`, `OIDC_CLIENT_ID`, `OIDC_CLIENT_SECRET` 환경변수)
146
+ - **채팅 히스토리 검색** — 사이드바 검색창으로 대화 내용 키워드 검색 (`GET /history/search`)
147
+ - **대화 삭제** — 사이드바 각 대화에 삭제 버튼 추가
148
+ - **MCP 서버 관리 UI** — 사이드바 "MCP 관리" 버튼으로 설치/목록 확인 모달
149
+ - **인라인 Diff 뷰** — Edit Selection 결과를 diff로 보여주고 Apply/Discard 선택
150
+ - **현재 파일 첨부** — `Lattice AI: Attach Current File to Chat` 명령 추가 (VS Code)
151
+ - `authlib` 의존성 추가 (SSO OIDC 지원)
152
+
153
+ ### Deployed
154
+ - PyPI ✅
155
+ - npm ✅
156
+ - VS Code Marketplace ✅
157
+ - Open VSX ✅
158
+
159
+ ---
160
+
161
+ ## [0.1.3] - 2026-05-18
162
+
163
+ ### Added
164
+ - 프로필 수정 API (`PATCH /account/profile`) 및 UI — 이름·닉네임 변경
165
+ - 회원가입 폼 개선 — 비밀번호 확인 필드, 인라인 에러 메시지
166
+ - 어드민 패널 초대 링크 섹션 — 원클릭 복사
167
+ - 어드민 대시보드 메시지 활동 차트 (Chart.js, 최근 14일)
168
+ - 웹 UI 한국어 / 영어 전환 (`🌐 Languages` 버튼, localStorage 저장)
169
+
170
+ ### Fixed
171
+ - 로그아웃 시 `/logout` API 호출하여 서버 세션 쿠키 정상 만료
172
+ - 인증(`account.html`)과 채팅(`chat.html`) UI 분리 — 레거시 `index.html` 제거
173
+ - `chat.html` 내 죽은 인증 코드 제거
174
+ - 채팅 헤더에서 언어 선택 드롭다운이 ops-strip을 가리는 문제 수정
175
+
176
+ ### Deployed
177
+ - PyPI ✅
178
+ - npm ✅
179
+ - VS Code Marketplace ✅
180
+ - Open VSX ✅
181
+
182
+ ---
183
+
184
+ ## [0.1.1] - 2026-05-18
185
+
186
+ ### Added
187
+ - 비밀번호 변경 API (`POST /account/change-password`)
188
+ - 웹 UI 비밀번호 변경 모달 (헤더 계정 아이콘)
189
+
190
+ ### Docs
191
+ - 어드민 패널: 첫 가입자 자동 admin 안내 추가
192
+ - 플랫폼 지원 범위 (Windows/Linux) 안내 추가
193
+ - 언어 지원 (KO/EN) 안내 추가
194
+
195
+ ### Deployed
196
+ - PyPI ✅
197
+ - npm ✅
198
+ - VS Code Marketplace ✅
199
+ - Open VSX ✅
200
+
201
+ ---
202
+
203
+ ## [0.1.0] - 2026-05-17
204
+
205
+ ### Added
206
+ - FastAPI 브릿지 서버 (port 4825)
207
+ - Apple Silicon MLX 로컬 모델 지원 (Gemma 4, Qwen 2.5 등)
208
+ - 클라우드 모델 지원 (OpenAI, Groq, Together, OpenRouter 등)
209
+ - VS Code / Cursor / Antigravity 확장
210
+ - Telegram 봇 (로컬 AI 미러 + Codex 클라우드 봇)
211
+ - 어드민 패널 (`/admin`)
212
+ - P-Reinforce 지식 정원 엔진
213
+ - MCP 서버 연동
214
+ - Ollama / vLLM / LM Studio / llama.cpp 연동
215
+
216
+ ### Security
217
+ - 모든 민감 엔드포인트 인증 적용
218
+ - SameSite=Lax 쿠키 (CSRF 방어)
219
+ - scrypt 비밀번호 해싱
220
+ - tempfile 레이스 컨디션 수정
221
+ - `run_command()` 위험 플래그 차단
222
+
223
+ ### Deployed
224
+ - PyPI ✅
225
+ - npm ✅
226
+ - VS Code Marketplace ✅
227
+ - Open VSX ✅
@@ -0,0 +1,121 @@
1
+ # Lattice AI — 아키텍처
2
+
3
+ ## 전체 구조
4
+
5
+ ```
6
+ ┌─────────────────────────────────────────────────────────┐
7
+ │ 클라이언트 레이어 │
8
+ │ 웹 UI (chat.html) │ VS Code 확장 │ Telegram 봇 │
9
+ └──────────────────────────┬──────────────────────────────┘
10
+ │ HTTP / SSE
11
+ ┌──────────────────────────▼──────────────────────────────┐
12
+ │ server.py — FastAPI (port 4825) │
13
+ │ │
14
+ │ /chat /agent /models /tools/* /mcp/* /garden │
15
+ │ /account /admin /auth/sso /knowledge-graph /graph │
16
+ └────┬──────────┬──────────┬──────────┬───────────────────┘
17
+ │ │ │ │
18
+ ▼ ▼ ▼ ▼
19
+ llm_router tools.py knowledge_ p_reinforce
20
+ .py graph.py .py
21
+
22
+ ├── MLX (mlx_lm / mlx_vlm) ← Apple Silicon 로컬
23
+ ├── OpenAI SDK ← openai / groq / together / openrouter
24
+ └── Ollama / vLLM REST ← 로컬 서버 연동
25
+ ```
26
+
27
+ ## 파일별 역할
28
+
29
+ | 파일 | 역할 |
30
+ |------|------|
31
+ | `server.py` | FastAPI 앱, 모든 HTTP 엔드포인트, 인증/세션/CORS/rate limit |
32
+ | `ltcai_cli.py` | CLI 엔트리포인트 (`LTCAI` 명령), `doctor` 서브커맨드, uvicorn 실행 |
33
+ | `llm_router.py` | 로컬(MLX/Ollama) ↔ 클라우드(OpenAI/Groq/…) 라우팅, 스트리밍 SSE |
34
+ | `tools.py` | 에이전트 도구 구현: read_file, edit_file, grep, run_command, todo_write/read, 스크린샷 등 |
35
+ | `knowledge_graph.py` | SQLite 지식 그래프 (노드/엣지/청크), Graph RAG 컨텍스트 주입 |
36
+ | `p_reinforce.py` | P-Reinforce 지식 정원 엔진, `~/.ltcai-brain/` 분류 저장 |
37
+ | `telegram_bot.py` | 로컬 AI Telegram 미러 봇 |
38
+ | `codex_telegram_bot.py` | 클라우드 Codex Telegram 봇 (GPT + GitHub 이슈) |
39
+ | `vscode-extension/` | TypeScript VS Code 확장 |
40
+ | `static/` | 웹 UI HTML (chat, account, admin, graph), PWA manifest/SW |
41
+ | `bin/ltcai.js` | npm CLI 엔트리포인트 (Python 환경 자동 부트스트랩) |
42
+
43
+ ## 데이터 흐름
44
+
45
+ ### 채팅 요청
46
+
47
+ ```
48
+ 브라우저 → POST /chat
49
+ → server.py: 인증 확인, rate limit
50
+ → llm_router.py: 모델 선택 (로컬/클라우드)
51
+ → knowledge_graph.py: Graph RAG 컨텍스트 조회 + 주입
52
+ → LLM 스트리밍 응답 (SSE)
53
+ → knowledge_graph.py: 메시지/응답 인제스트
54
+ ```
55
+
56
+ ### 에이전트 요청
57
+
58
+ ```
59
+ 브라우저/VS Code → POST /agent
60
+ → server.py: 인증 확인, rate limit (6/분)
61
+ → llm_router.py: Discover→Plan→Implement→Verify 루프 (max 25스텝)
62
+ → tools.py: read_file / edit_file / grep / run_command / todo_*
63
+ → 각 스텝 결과 스트리밍
64
+ ```
65
+
66
+ ### 문서 업로드
67
+
68
+ ```
69
+ 브라우저 → POST /upload
70
+ → server.py: magic-number 검증, rate limit (12/분)
71
+ → tools.py: PDF/DOCX/XLSX/PPTX 파싱
72
+ → knowledge_graph.py: Chunk/Page/Sheet/Slide 노드 인제스트
73
+ → blob 저장: ~/.ltcai/knowledge_graph_blobs/
74
+ ```
75
+
76
+ ## 데이터 저장소
77
+
78
+ ```
79
+ ~/.ltcai/
80
+ ├── users.json # 사용자 계정 (scrypt 해시)
81
+ ├── sessions.json # 세션 토큰 (24h TTL)
82
+ ├── chat_history.json # 채팅 히스토리
83
+ ├── knowledge_graph.sqlite # Graph RAG SQLite DB
84
+ ├── knowledge_graph_blobs/ # 원본 업로드 파일
85
+ ├── mcp_installs.json # MCP 서버 설치 목록
86
+ └── todos.json # 에이전트 TODO 리스트
87
+
88
+ ~/.ltcai-brain/
89
+ ├── INDEX.md
90
+ ├── 00_Raw/
91
+ ├── 10_Wiki/
92
+ ├── 20_Skills/
93
+ ├── 30_Projects/
94
+ └── 40_Log/
95
+ ```
96
+
97
+ ## 인증 흐름
98
+
99
+ ```
100
+ POST /login (username + password)
101
+ → scrypt 검증
102
+ → 세션 토큰 생성 (UUID, 24h TTL)
103
+ → Set-Cookie: session=<token>; HttpOnly; SameSite=Lax
104
+
105
+ 모든 민감 엔드포인트:
106
+ → _require_auth(): 쿠키 검증 → User 반환 또는 401
107
+ ```
108
+
109
+ SSO (OIDC):
110
+
111
+ ```
112
+ GET /auth/sso/login → 리디렉션 (Entra ID / Okta)
113
+ GET /auth/sso/callback?code=... → 토큰 교환 → 세션 생성
114
+ ```
115
+
116
+ ## MCP 연동
117
+
118
+ `/mcp/tools` — 에이전트 도구 카탈로그를 MCP 형식으로 노출
119
+ Claude Desktop / Cursor의 MCP 설정에 `http://localhost:4825/mcp` 추가 시 직접 도구 사용 가능.
120
+
121
+ 자세한 내용: [mcp-tools.md](mcp-tools.md)
@@ -0,0 +1,116 @@
1
+ # MCP 도구 카탈로그
2
+
3
+ Lattice AI는 MCP(Model Context Protocol) 서버로 동작하여 Claude Desktop, Cursor 등에서 직접 도구를 사용할 수 있습니다.
4
+
5
+ ## 연결 설정
6
+
7
+ `claude_desktop_config.json` 또는 Cursor MCP 설정:
8
+
9
+ ```json
10
+ {
11
+ "mcpServers": {
12
+ "lattice-ai": {
13
+ "url": "http://localhost:4825/mcp"
14
+ }
15
+ }
16
+ }
17
+ ```
18
+
19
+ ## 도구 목록
20
+
21
+ ### 파일 시스템
22
+
23
+ | 도구 | 설명 | 위험도 |
24
+ |------|------|--------|
25
+ | `read_file` | 파일 읽기 (라인 번호, offset/limit 지원) | 낮음 |
26
+ | `edit_file` | 정밀 diff 편집 (`old_string` 유일성 검증) | 중간 |
27
+ | `list_dir` | 디렉토리 목록 | 낮음 |
28
+ | `grep` | 정규식 검색, glob 필터, context_lines | 낮음 |
29
+
30
+ ### 실행
31
+
32
+ | 도구 | 설명 | 위험도 |
33
+ |------|------|--------|
34
+ | `run_command` | 셸 명령 실행 (위험 패턴 차단) | 높음 |
35
+ | `run_terminal_command` | 터미널 명령 (별칭) | 높음 |
36
+
37
+ ### 작업 관리
38
+
39
+ | 도구 | 설명 | 위험도 |
40
+ |------|------|--------|
41
+ | `todo_write` | TODO 항목 생성/업데이트 | 낮음 |
42
+ | `todo_read` | TODO 목록 조회 | 낮음 |
43
+
44
+ ### 시스템
45
+
46
+ | 도구 | 설명 | 위험도 |
47
+ |------|------|--------|
48
+ | `computer_screenshot` | 화면 캡처 | 낮음 |
49
+ | `computer_open_app` | 앱 실행 | 중간 |
50
+ | `computer_open_url` | URL 열기 | 낮음 |
51
+ | `network_status` | IP, Wi-Fi 정보 | 낮음 |
52
+
53
+ ### 문서
54
+
55
+ | 도구 | 설명 | 위험도 |
56
+ |------|------|--------|
57
+ | `pdf_to_text` | PDF → 텍스트 변환 | 낮음 |
58
+ | `pdf_pages` | PDF 페이지 수 조회 | 낮음 |
59
+ | `read_docx` | Word 문서 읽기 | 낮음 |
60
+ | `read_xlsx` | Excel 파일 읽기 | 낮음 |
61
+ | `read_pptx` | PowerPoint 읽기 | 낮음 |
62
+
63
+ ### 지식 정원 (P-Reinforce)
64
+
65
+ | 도구 | 설명 | 위험도 |
66
+ |------|------|--------|
67
+ | `garden_save` | 지식 정원에 저장 | 낮음 |
68
+ | `garden_tree` | 지식 트리 조회 | 낮음 |
69
+ | `garden_read` | 정원 파일 읽기 | 낮음 |
70
+
71
+ ## REST API 직접 호출
72
+
73
+ MCP 대신 REST API로도 동일한 도구를 호출할 수 있습니다:
74
+
75
+ ```bash
76
+ # read_file
77
+ curl -b "session=<token>" \
78
+ "http://localhost:4825/tools/read_file?path=server.py"
79
+
80
+ # edit_file
81
+ curl -b "session=<token>" -X POST \
82
+ http://localhost:4825/tools/edit_file \
83
+ -H "Content-Type: application/json" \
84
+ -d '{"path": "server.py", "old_string": "old code", "new_string": "new code"}'
85
+
86
+ # grep
87
+ curl -b "session=<token>" \
88
+ "http://localhost:4825/tools/grep?pattern=def%20main&glob=*.py"
89
+
90
+ # run_command
91
+ curl -b "session=<token>" -X POST \
92
+ http://localhost:4825/tools/run_command \
93
+ -H "Content-Type: application/json" \
94
+ -d '{"command": "python -m pytest tests/ -v"}'
95
+ ```
96
+
97
+ ## 도구 카탈로그 조회
98
+
99
+ ```bash
100
+ curl http://localhost:4825/mcp/tools
101
+ ```
102
+
103
+ 응답:
104
+ ```json
105
+ {
106
+ "tools": [
107
+ {
108
+ "name": "edit_file",
109
+ "description": "정밀 diff 편집. old_string이 파일에 유일해야만 성공.",
110
+ "risk": "medium",
111
+ "parameters": { ... }
112
+ },
113
+ ...
114
+ ]
115
+ }
116
+ ```
@@ -0,0 +1,74 @@
1
+ # 개인정보 및 데이터 정책
2
+
3
+ ## 요약
4
+
5
+ **Lattice AI는 데이터를 수집하거나 외부 서버로 전송하지 않습니다.**
6
+
7
+ 모든 데이터는 사용자의 로컬 머신에만 저장됩니다.
8
+
9
+ ## 저장되는 데이터
10
+
11
+ | 데이터 | 저장 위치 | 설명 |
12
+ |--------|-----------|------|
13
+ | 사용자 계정 | `~/.ltcai/users.json` | 이름, scrypt 해시 비밀번호, 역할 |
14
+ | 세션 토큰 | `~/.ltcai/sessions.json` | UUID 토큰, 만료시간 |
15
+ | 채팅 히스토리 | `~/.ltcai/chat_history.json` | 사용자-AI 대화 내용 |
16
+ | 지식 그래프 | `~/.ltcai/knowledge_graph.sqlite` | 채팅/문서 노드/엣지 |
17
+ | 업로드 파일 | `~/.ltcai/knowledge_graph_blobs/` | 원본 PDF/DOCX 등 |
18
+ | 지식 정원 | `~/.ltcai-brain/` | P-Reinforce 분류 저장 |
19
+ | 설정 | `~/.ltcai/config.json` | 모델 설정, API 키 (keyring) |
20
+
21
+ ## 수집하지 않는 데이터
22
+
23
+ - 사용 통계, 세션 길이, 클릭 이벤트
24
+ - 오류 리포트 (로컬 `server.log`에만 기록)
25
+ - 기기 정보, IP 주소
26
+ - 프롬프트/응답 내용
27
+
28
+ ## 클라우드 모델 사용 시
29
+
30
+ 사용자가 직접 OpenAI, Groq, Together, OpenRouter 등의 API 키를 설정하고 클라우드 모델을 선택한 경우, 해당 프롬프트와 응답은 각 클라우드 제공업체의 서버를 경유합니다. 이는 각 제공업체의 개인정보처리방침을 따릅니다.
31
+
32
+ - OpenAI: https://openai.com/privacy
33
+ - Groq: https://groq.com/privacy-policy
34
+ - Together AI: https://www.together.ai/privacy
35
+ - OpenRouter: https://openrouter.ai/privacy
36
+
37
+ Apple Silicon MLX 로컬 모델 사용 시에는 프롬프트가 외부로 전송되지 않습니다.
38
+
39
+ ## API 키 보안
40
+
41
+ - API 키는 OS keyring(macOS Keychain, Windows Credential Manager, Linux Secret Service)에 저장됩니다
42
+ - `LATTICEAI_ALLOW_PLAINTEXT_API_KEYS=true` 설정 없이는 디스크에 평문 저장되지 않습니다
43
+ - 채팅 히스토리 저장 전 API key/token/password 패턴 자동 마스킹
44
+
45
+ ## 데이터 삭제
46
+
47
+ ```bash
48
+ # 채팅 히스토리만 삭제
49
+ rm ~/.ltcai/chat_history.json
50
+
51
+ # 지식 그래프 삭제
52
+ rm ~/.ltcai/knowledge_graph.sqlite
53
+ rm -rf ~/.ltcai/knowledge_graph_blobs/
54
+
55
+ # 전체 데이터 삭제
56
+ rm -rf ~/.ltcai/
57
+ rm -rf ~/.ltcai-brain/
58
+ ```
59
+
60
+ 웹 UI에서: `/clear` 명령 (현재 대화 삭제), 어드민 패널에서 사용자별 데이터 관리
61
+
62
+ ## 퍼블릭 배포 시
63
+
64
+ 외부 사용자가 접근할 수 있는 환경에 배포하는 경우, 사용자에게 다음을 고지하세요:
65
+
66
+ 1. 어떤 데이터가 서버에 저장되는지
67
+ 2. 사용하는 클라우드 AI 제공업체
68
+ 3. 채팅 내용의 보존 기간 및 삭제 방법
69
+
70
+ Lattice AI 자체는 퍼블릭 배포 운영자의 데이터 처리 방식에 대해 책임지지 않습니다.
71
+
72
+ ## 문의
73
+
74
+ 개인정보 관련 문의: rnlgnquvk@gmail.com
@@ -0,0 +1,137 @@
1
+ # 퍼블릭 배포 가이드
2
+
3
+ Render, Fly.io, Railway, VPS 등 외부 서버에 Lattice AI를 배포할 때 사용하는 가이드입니다.
4
+
5
+ ## 환경변수
6
+
7
+ ```bash
8
+ # 필수
9
+ LATTICEAI_MODE=public
10
+ LATTICEAI_INVITE_CODE=my-secret-invite-code # 회원가입 시 필요한 초대 코드
11
+
12
+ # 클라우드 모델 (최소 하나 이상)
13
+ OPENAI_API_KEY=sk-...
14
+ # GROQ_API_KEY=gsk_...
15
+ # OPENROUTER_API_KEY=sk-or-...
16
+
17
+ LATTICEAI_PUBLIC_MODEL=openai:gpt-4o-mini # 기본 공개 모델
18
+
19
+ # 보안
20
+ LATTICEAI_ALLOW_LOCAL_MODELS=false # MLX 비활성화 (서버에 불필요)
21
+ LATTICEAI_ENABLE_TELEGRAM=false # Telegram 봇 비활성화
22
+
23
+ # 선택적
24
+ LATTICEAI_ENABLE_GRAPH=false # Data Graph 비활성화
25
+ LATTICEAI_DATA_DIR=/data # 데이터 디렉토리
26
+ LATTICEAI_ADMIN_EMAILS=you@example.com # 어드민 이메일 고정
27
+ ```
28
+
29
+ ## Docker
30
+
31
+ ```dockerfile
32
+ # Dockerfile이 이미 포함되어 있습니다
33
+ docker build -t lattice-ai .
34
+ ```
35
+
36
+ ```bash
37
+ docker run --rm \
38
+ -p 4825:4825 \
39
+ -e LATTICEAI_MODE=public \
40
+ -e OPENAI_API_KEY="$OPENAI_API_KEY" \
41
+ -e LATTICEAI_INVITE_CODE="my-secret-code" \
42
+ -v "$PWD/.data:/data" \
43
+ lattice-ai
44
+ ```
45
+
46
+ ## Render 배포
47
+
48
+ 1. New Web Service → GitHub 레포 연결
49
+ 2. Environment: `Python 3`
50
+ 3. Build Command: `pip install ltcai`
51
+ 4. Start Command: `LTCAI`
52
+ 5. Environment Variables 탭에서 위 환경변수 입력
53
+ 6. Disk 추가: `/data` (영구 저장용)
54
+
55
+ ## Fly.io 배포
56
+
57
+ ```bash
58
+ fly launch
59
+ fly secrets set LATTICEAI_MODE=public OPENAI_API_KEY=sk-... LATTICEAI_INVITE_CODE=secret
60
+ fly volumes create ltcai_data --size 1
61
+ fly deploy
62
+ ```
63
+
64
+ `fly.toml`:
65
+ ```toml
66
+ [build]
67
+ dockerfile = "Dockerfile"
68
+
69
+ [[mounts]]
70
+ source = "ltcai_data"
71
+ destination = "/data"
72
+
73
+ [env]
74
+ LATTICEAI_DATA_DIR = "/data"
75
+ ```
76
+
77
+ ## nginx 리버스 프록시
78
+
79
+ ```nginx
80
+ server {
81
+ listen 80;
82
+ server_name yourdomain.com;
83
+ return 301 https://$host$request_uri;
84
+ }
85
+
86
+ server {
87
+ listen 443 ssl http2;
88
+ server_name yourdomain.com;
89
+
90
+ ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
91
+ ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
92
+
93
+ location / {
94
+ proxy_pass http://127.0.0.1:4825;
95
+ proxy_set_header Host $host;
96
+ proxy_set_header X-Real-IP $remote_addr;
97
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
98
+ proxy_set_header X-Forwarded-Proto $scheme;
99
+
100
+ # SSE 스트리밍 지원
101
+ proxy_buffering off;
102
+ proxy_cache off;
103
+ proxy_read_timeout 300s;
104
+ chunked_transfer_encoding on;
105
+ }
106
+ }
107
+ ```
108
+
109
+ ## Caddy 리버스 프록시
110
+
111
+ ```caddyfile
112
+ yourdomain.com {
113
+ reverse_proxy localhost:4825
114
+ }
115
+ ```
116
+
117
+ ## 퍼블릭 배포 체크리스트
118
+
119
+ - [ ] `LATTICEAI_MODE=public` 설정
120
+ - [ ] `LATTICEAI_INVITE_CODE` 비공개 랜덤 값으로 설정
121
+ - [ ] HTTPS 리버스 프록시 구성 (nginx / Caddy)
122
+ - [ ] 영구 볼륨 마운트 (`/data` 또는 `LATTICEAI_DATA_DIR`)
123
+ - [ ] 방화벽에서 4825 포트 직접 노출 차단
124
+ - [ ] `LATTICEAI_ALLOW_LOCAL_MODELS=false`
125
+ - [ ] 최소 하나의 클라우드 API 키 설정
126
+ - [ ] 첫 가입 후 어드민 계정 확인 (`http://yourdomain.com/admin`)
127
+
128
+ ## 지원 클라우드 모델 프리픽스
129
+
130
+ ```
131
+ openai:gpt-4o-mini
132
+ openai:gpt-4o
133
+ openrouter:openai/gpt-4o-mini
134
+ groq:llama-3.1-8b-instant
135
+ groq:llama-3.3-70b-versatile
136
+ together:meta-llama/Llama-3.3-70B-Instruct-Turbo
137
+ ```