ltcai 0.1.16 → 0.1.18

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 CHANGED
@@ -14,10 +14,10 @@ Lattice AI는 개인 개발자가 로컬 모델, 클라우드 모델, 에이전
14
14
 
15
15
  ### 현재 배포 버전
16
16
 
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`
17
+ - `PyPI`: `ltcai==0.1.18`
18
+ - `npm`: `ltcai@0.1.18`
19
+ - `VS Code Marketplace`: `parktaesoo.ltcai@0.1.18`
20
+ - `Open VSX`: `parktaesoo.ltcai@0.1.18`
21
21
 
22
22
  ### 왜 Lattice AI인가
23
23
 
@@ -129,6 +129,9 @@ LATTICEAI_TELEGRAM_BOT_TOKEN=your-token LTCAI
129
129
  | **VS Code / Cursor 확장** | 채팅, Edit Selection, Diff 뷰, 파일 첨부 |
130
130
  | **Telegram 봇** | 로컬 AI 미러 + Codex 클라우드 봇 |
131
131
  | **MCP 서버** | Claude Desktop / Cursor에서 직접 도구 사용 |
132
+ | **MCP 레지스트리** | [registry.modelcontextprotocol.io](https://registry.modelcontextprotocol.io) 원격 목록 실시간 통합 — stdio MCP 서버 원클릭 설치 |
133
+ | **Skills 마켓플레이스** | Anthropic + Adobe · Airtable · Auth0 · Expo · Pydantic 공식 skills 77개 (Apache-2.0 / MIT) |
134
+ | **플러그인 디렉터리** | 오픈소스 플러그인 149개 메타데이터 브라우저 (검색 · 카테고리 · 라이선스 필터) |
132
135
  | **MLX 로컬 추론** | Apple Silicon에서 Gemma, Qwen, DeepSeek 등 |
133
136
  | **클라우드 모델** | OpenAI, Groq, Together, OpenRouter |
134
137
  | **Graph RAG** | 채팅·문서를 SQLite 지식 그래프로 자동 구조화 |
@@ -248,7 +251,7 @@ docker run --rm -p 4825:4825 \
248
251
 
249
252
  ### 릴리스 체크
250
253
 
251
- `0.1.16 릴리스는 아래 네 채널을 동일 버전으로 맞춥니다.
254
+ `0.1.17 릴리스는 아래 네 채널을 동일 버전으로 맞춥니다.
252
255
 
253
256
  - `npm`
254
257
  - `PyPI`
@@ -317,7 +320,13 @@ npm install && npm run build && npm run package:vsix
317
320
  | POST | `/agent` | 파일 생성/수정 에이전트 |
318
321
  | GET | `/tools/list_dir` | 디렉토리 목록 |
319
322
  | POST | `/tools/run_command` | 터미널 명령 실행 |
320
- | GET | `/mcp/installed` | 설치된 MCP 목록 |
323
+ | GET | `/mcp/installed` | 설치된 MCP 목록 (로컬 + 원격 레지스트리) |
324
+ | POST | `/mcp/install` | MCP 설치 (bundled / pip / npm / pypi) |
325
+ | POST | `/mcp/registry/refresh` | 원격 MCP 레지스트리 캐시 갱신 |
326
+ | GET | `/skills/marketplace` | Skills 마켓플레이스 (Anthropic + 서드파티, `?category=` `?author=`) |
327
+ | POST | `/skills/install` | Skill 설치 (`{ "plugin": "...", "skill": "..." }`) |
328
+ | GET | `/skills/list` | 로컬 설치 skills 목록 |
329
+ | GET | `/plugins/directory` | 오픈소스 플러그인 디렉터리 149개 (`?q=` `?category=` `?license=`) |
321
330
 
322
331
  자세한 MCP 도구 목록: [docs/mcp-tools.md](docs/mcp-tools.md)
323
332
 
@@ -359,7 +368,7 @@ launchctl load ~/Library/LaunchAgents/com.ltcai.plist
359
368
 
360
369
  ## 릴리스 노트
361
370
 
362
- 현재 버전: **0.1.16** — 자세한 변경 이력은 [docs/CHANGELOG.md](docs/CHANGELOG.md) 참고.
371
+ 현재 버전: **0.1.18** — 자세한 변경 이력은 [docs/CHANGELOG.md](docs/CHANGELOG.md) 참고.
363
372
 
364
373
  ## 라이선스
365
374
 
package/docs/CHANGELOG.md CHANGED
@@ -1,5 +1,66 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.18] - 2026-05-23
4
+
5
+ ### MCP Registry 통합
6
+
7
+ - **`GET /mcp/tools` · `GET /mcp/installed`** — 기존 로컬 목록에 [registry.modelcontextprotocol.io](https://registry.modelcontextprotocol.io) 원격 목록을 실시간 병합
8
+ - **`POST /mcp/install`** — `npm` / `pypi` 설치 모드 추가 — 원격 레지스트리 MCP 서버를 클릭 한 번으로 설치 (`npm install -g` / `pip install`)
9
+ - **`POST /mcp/registry/refresh`** — 원격 레지스트리 캐시 강제 갱신
10
+ - `mcp_public_item` 응답에 `package` · `homepage` · `source` 필드 추가
11
+ - 원격 레지스트리는 1시간 TTL 인메모리 캐시, 서버 재시작 없이 최신 목록 유지
12
+ - `connector_info` 함수 인라인화 — `mcp_connector` 엔드포인트에서 combined registry 직접 조회
13
+
14
+ ### Skills 마켓플레이스 (신규)
15
+
16
+ - **`GET /skills/marketplace`** — Apache-2.0 / MIT 검증 skills 목록 (Anthropic 18개 + 서드파티 59개 = 약 77개)
17
+ - `?category=` · `?author=` 필터 파라미터 지원
18
+ - 응답에 `authors` · `categories` 열거 포함
19
+ - **`POST /skills/install`** — `{ "plugin": "...", "skill": "..." }` 로 SKILL.md 런타임 fetch 후 로컬 `skills/` 에 저장
20
+ - 파일 상단에 출처·라이선스 주석 자동 삽입 (`<!-- Source: ..., Apache-2.0 -->`)
21
+ - `risk.json` 없으면 기본값 자동 생성
22
+ - **`GET /skills/list`** — 로컬 설치 skills 목록 (`source`: local / anthropic / third-party 구분)
23
+ - **`POST /skills/marketplace/refresh`** — 캐시 강제 갱신, author별 집계 반환
24
+ - 서드파티 소스 (모두 라이선스 검증 완료): Adobe (Apache-2.0) · Airtable (MIT) · Auth0 (Apache-2.0) · Expo (MIT) · Pydantic/Logfire (MIT)
25
+
26
+ ### 플러그인 디렉터리 (신규)
27
+
28
+ - **`GET /plugins/directory`** — marketplace.json 기반 오픈소스 플러그인 149개 메타데이터 브라우저
29
+ - `?q=` 전문 검색 · `?category=` · `?license=` 필터 지원
30
+ - 응답에 `categories` · `licenses` 열거 포함
31
+ - **`POST /plugins/directory/refresh`** — 캐시 강제 갱신, license별 집계 반환
32
+ - `_KNOWN_REPO_LICENSES` 맵 — GitHub API 호출 없이 검증된 라이선스 즉시 조회
33
+ - 미확인 레포는 GitHub API fallback + 인메모리 per-repo 캐시
34
+ - Apache-2.0 / MIT / MIT-0 / CC-BY-4.0 플러그인만 노출, 라이선스 없는 34개 자동 제외
35
+
36
+ ### Release
37
+ - 배포 버전을 `0.1.18`로 상향
38
+ - 대상 채널: `npm` · `PyPI` · `VS Code Marketplace` · `Open VSX`
39
+
40
+ ## [0.1.17] - 2026-05-22
41
+
42
+ ### Multi-LLM Pipeline
43
+
44
+ - **파이프라인 UI 카드** — ops 대시보드의 ACTIVE MODEL 카드와 PRIVATE VPC 카드 사이에 PIPELINE 카드 추가
45
+ - 파이프라인 비활성 시: "멀티 LLM 파이프라인 / Plan → Execute → Review 모델 설정" 표시
46
+ - 파이프라인 활성 시: "Pipeline ON / P:모델명 E:모델명 R:모델명" 으로 현재 설정 표시
47
+ - **멀티 LLM 에이전트 파이프라인** — Planning / Executing / Reviewing 3단계에 각각 다른 LLM 지정 가능
48
+ - 모달에서 각 단계별 모델 선택 (로드된 로컬 모델 + 클라우드 프로바이더 자동 목록 구성)
49
+ - 하나의 모델을 모든 단계에 사용해도 정상 동작
50
+ - **Human-in-the-loop** — 파이프라인 활성화 시 Planning 완료 후 사용자 승인을 기다렸다가 Execute 단계로 진행
51
+ - 웹 UI: 플랜 승인 카드(`✅ 승인 / ❌ 취소`) 렌더링
52
+ - Telegram 봇: 인라인 버튼으로 플랜 승인/취소
53
+ - **`/agent/resume` 엔드포인트** — `context_id`와 `approved` 필드로 대기 중인 에이전트 재개 또는 취소
54
+ - **`AgentRequest` 확장** — `planning_model`, `executing_model`, `reviewing_model`, `human_in_loop` 파라미터 추가
55
+ - **`LLMRouter.generate_as(model_id, ...)`** — 현재 모델을 임시 교체해 지정 모델로 생성 후 원복하는 헬퍼
56
+ - **Telegram 봇 인증 수정** — 서버 호출 시 `~/.ltcai/sessions.json`에서 어드민 세션 토큰을 읽어 쿠키로 전달
57
+ - **Telegram SSE 파싱** — `/chat` 스트리밍 응답(`text/event-stream`)을 올바르게 파싱하도록 수정
58
+ - **`_sessions_file()` 버그 수정** — 정의 이전에 전역 `DATA_DIR` 참조하던 문제 해결 (함수 내 경로 직접 계산)
59
+
60
+ ### Release
61
+ - 배포 버전을 `0.1.17`로 상향
62
+ - 대상 채널: `npm`, `PyPI`, `VS Code Marketplace`, `Open VSX`
63
+
3
64
  ## [0.1.16] - 2026-05-22
4
65
 
5
66
  ### First-user admin bootstrap
package/llm_router.py CHANGED
@@ -472,6 +472,19 @@ class LLMRouter:
472
472
  print(f"⚠️ VLM chat template fallback: {e}")
473
473
  return self._build_prompt(message, context, processor)
474
474
 
475
+ async def generate_as(self, model_id: str | None, message: str, context: Optional[str] = None, max_tokens: int = 4096, temperature: float = 0.2) -> str:
476
+ """Generate using a specific model, temporarily switching if needed. Falls back to current model if model_id is None or not loaded."""
477
+ if not model_id or model_id == self._current:
478
+ return await self.generate(message, context, max_tokens, temperature)
479
+ if model_id not in self._cache:
480
+ raise ValueError(f"Model '{model_id}' is not loaded. Load it first via /models/load.")
481
+ prev = self._current
482
+ self._current = model_id
483
+ try:
484
+ return await self.generate(message, context, max_tokens, temperature)
485
+ finally:
486
+ self._current = prev
487
+
475
488
  async def generate(self, message: str, context: Optional[str] = None, max_tokens: int = 4096, temperature: float = 0.2, image_data: Optional[str] = None) -> str:
476
489
  if not self._current: return "No model."
477
490
  self._touch()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ltcai",
3
- "version": "0.1.16",
3
+ "version": "0.1.18",
4
4
  "description": "Lattice AI local MLX/cloud LLM workspace server",
5
5
  "homepage": "https://github.com/TaeSooPark-PTS/LatticeAI#readme",
6
6
  "repository": {