mcp-agents-memory 0.9.6 → 0.9.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/.env.example CHANGED
@@ -110,3 +110,32 @@ FORGETTING_ENABLED=false
110
110
  FORGETTING_WARMUP_MIN=30
111
111
  FORGETTING_INTERVAL_MIN=1440
112
112
  FORGET_THRESHOLD=0.5
113
+
114
+ # Project Alias Promoter (Stage 2) — cold path alias suggestions; default OFF, auto-apply requires explicit opt-in.
115
+ PROJECT_ALIAS_PROMOTER_ENABLED=false
116
+ PROJECT_ALIAS_PROMOTER_INTERVAL_HOURS=24
117
+ PROJECT_ALIAS_AUTO_APPLY=false
118
+
119
+ # ─────────────────────────────────────────────────────────────
120
+ # Local LLM (ollama) — API 비용 없이 추론 가능한 역할에 적용
121
+ # 대상: AMD RX 6800 XT (gfx1030, 16GB VRAM) + ROCm 7.1
122
+ #
123
+ # 설치: bash scripts/setup_local_llm.sh
124
+ # 벤치: npx tsx scripts/bench_local_tagger.ts
125
+ # ─────────────────────────────────────────────────────────────
126
+
127
+ # ollama 서버 주소 (기본: localhost:11434)
128
+ # LOCAL_LLM_BASE_URL=http://localhost:11434/v1
129
+
130
+ # 태거를 로컬 모델로 교체 (기본: xai/grok)
131
+ # 벤치 PASS 모델: qwen2.5:7b (100% JSON 성공, avg 754ms)
132
+ # qwen3.x 계열은 ollama에서 thinking 비활성화 불가 → content 빈 버그 있음
133
+ # TAGGER_PROVIDER=local
134
+ # TAGGER_MODEL=qwen2.5:7b
135
+
136
+ # 라이브러리언을 로컬 모델로 교체 (Librarian v2 구현 후 활성화)
137
+ # LIBRARIAN_PROVIDER=local
138
+ # LIBRARIAN_MODEL=qwen3.6:35b-a3b
139
+
140
+ # 로컬 모델 실패 시 grok으로 자동 fallback (기본: true)
141
+ # LOCAL_GROK_FALLBACK=true
package/README.md CHANGED
@@ -89,6 +89,32 @@
89
89
 
90
90
  ---
91
91
 
92
+ ## 멀티머신 — 서버 / 클라이언트 (콜드패스 처리)
93
+
94
+ 여러 기기가 **하나의 공유 DB**를 쓸 때, Cold Path(태깅·프로필·클러스터링·alias 판정)는 **한 머신에서만** 돌아야 한다 — 안 그러면 같은 row를 여러 기기가 중복 처리하고 클라우드 비용이 배가된다. 같은 패키지를 **config로 역할만** 가른다:
95
+
96
+ | | 클라이언트 | 서버 (처리) |
97
+ |---|---|---|
98
+ | **DB** | 원격 DB 접속 (SSH 터널 등) | DB 호스트 / 직접 접속 |
99
+ | **Cold Path** | `COLD_PATH_ENABLED=false` | 전용 데몬으로 상시 가동 |
100
+ | **하는 일** | `search` / `manage_knowledge`만 | 태깅 · 프로필 · 클러스터링 · alias 판정 |
101
+ | **설정 난이도** | `.env` 몇 줄 (순수 config) | config + 로컬 LLM 인프라 |
102
+
103
+ - **클라이언트**: editor가 띄우는 MCP 서버가 그대로 단말. `.env`에 `COLD_PATH_ENABLED=false`만 추가하면 끝.
104
+ - **서버**: Cold Path를 MCP(=editor) 수명과 분리해 **독립 데몬**으로 상시 가동 (editor를 안 켜도 처리됨):
105
+ ```bash
106
+ mcp-agents-memory coldpath # MCP 서버 없이 Cold Path 워커만 도는 데몬 (systemd 권장)
107
+ ```
108
+ 데몬은 PostgreSQL advisory lock으로 **싱글톤** 보장 — 인스턴스가 몇 개든 락을 잡은 1개만 처리한다(중복 방지·자동 failover).
109
+
110
+ ### Cold Path LLM 백엔드 (config로 교체)
111
+
112
+ `LOCAL_LLM_BASE_URL`로 OpenAI-호환 엔드포인트를 가리키면 로컬/셀프호스트 추론을 쓴다 (llama.cpp, ollama 등). 미설정 시 클라우드(`grok-4-1`) 기본. `LOCAL_GROK_FALLBACK=true`면 로컬 실패 시 grok으로 폴백.
113
+
114
+ > 예) AMD/NVIDIA GPU에 llama.cpp `llama-server`로 Qwen3-14B를 올리고 `LOCAL_LLM_BASE_URL=http://localhost:8080/v1` → 콜드패스 클라우드 비용 ≈ $0. (json_schema 문법 + thinking off로 valid JSON 보장)
115
+
116
+ ---
117
+
92
118
  ## 메모리 로드 룰
93
119
 
94
120
  - **단기 메모리**: 최근 2-3일 raw 그대로, 또는 8000 토큰(약 12000-16000자) 중 먼저 도달하는 것
@@ -109,7 +135,11 @@ search_memory({
109
135
  query?: string, // 의미 검색 (vector + ILIKE fallback)
110
136
  p_tag?: string, // 특정 프로젝트로 한정
111
137
  date_range?: string, // 기간 한정 (예: "2026-04-29..", "last_week")
112
- role?: 'user' | 'assistant', // form 발화만 / assistant 발화만 (기본 둘 다)
138
+ role?: 'user' | 'assistant', // user 발화만 / assistant 발화만 (기본 둘 다)
139
+ agent_platform?: string, // 플랫폼 한정 (예: 'claude-code'). 생략 또는 '*' = 전 플랫폼
140
+ device_scope?: 'local' | 'global', // 'global'(기본)=전 기기 / 'local'=현재 기기(pinned은 기기 무관)
141
+ limit?: number, // 최대 결과 수 (기본 10, 최대 50)
142
+ include_archived?: boolean, // archived 메모리 포함 (기본 false)
113
143
  })
114
144
  ```
115
145
 
@@ -136,10 +166,10 @@ manage_knowledge({
136
166
  | 역할 | 사용 기술 |
137
167
  |---|---|
138
168
  | **Embedding** | OpenAI `text-embedding-3-large` (3072 dim) |
139
- | **Tagger (Cold Path)** | Google `gemini-2.5-flash` (predefined + dynamic) |
169
+ | **Cold Path LLM** (tagger / librarian / clusterer / project-alias judge) | 로컬 `Qwen3-14B` (llama.cpp, json_schema 문법 + thinking off → valid JSON 보장) **또는** 클라우드 `grok-4-1-fast-non-reasoning` — `LOCAL_LLM_BASE_URL`로 선택 |
140
170
  | **검색 fallback** | PostgreSQL `ILIKE` (cosine 임계값 미만 시) |
141
171
  | **DB** | PostgreSQL + pgvector |
142
- | **Librarian (memory → user)** | TBD (form vision 결정 후) |
172
+ | **Librarian (memory → user)** | 위 Cold Path 백엔드 공유 — recency-bias 저항 큐레이션(core 정체성 ↔ sub 작업 분리 + null-preserve), 게이트 env tunable |
143
173
  | **Skill 시스템** | TBD (다음 라운드) |
144
174
 
145
175
  ---
@@ -160,11 +190,22 @@ SSH_HOST=...
160
190
 
161
191
  # 모델
162
192
  EMBEDDING_MODEL=text-embedding-3-large
163
- TAGGER_MODEL=gemini-2.5-flash
164
- OPENAI_API_KEY=...
165
- GEMINI_API_KEY=...
193
+ OPENAI_API_KEY=... # embedding (필수)
194
+ XAI_API_KEY=... # grok-4-1 (Cold Path 기본 + 로컬 폴백)
195
+
196
+ # Cold Path LLM 백엔드 — 로컬 추론 쓰려면 OpenAI-호환 엔드포인트 지정 (없으면 클라우드)
197
+ LOCAL_LLM_BASE_URL=http://localhost:8080/v1 # llama.cpp / ollama 등
198
+ LOCAL_GROK_FALLBACK=true # 로컬 실패 시 grok 폴백
199
+ TAGGER_PROVIDER=local # local / xai
200
+ TAGGER_MODEL=qwen3-14b
201
+ LIBRARIAN_PROVIDER=local
202
+ LIBRARIAN_MODEL=qwen3-14b
203
+ LIBRARIAN_ENABLED=true
204
+ LIBRARIAN_MSG_THRESHOLD=30 # 라이브러리언 게이트 (기본 보수적)
205
+ LIBRARIAN_COOLDOWN_HOURS=24
166
206
 
167
207
  # Hot/Cold path 제어
208
+ COLD_PATH_ENABLED=true # false = 단말(Cold Path 안 돎). 멀티머신에선 처리 서버만 true
168
209
  COLD_PATH_INTERVAL_SEC=60 # 1분 단위 스케줄
169
210
  COLD_PATH_BATCH_SIZE=5 # 또는 5메시지 단위
170
211
 
@@ -192,7 +233,7 @@ AGENT_KEY=... # 옵션, multi-persona 구분용
192
233
  | Librarian 구현 (memory → user.core/sub_profile promote) | ✅ Done |
193
234
  | MCP Tools (`search_memory` + `manage_knowledge`) | ✅ Done |
194
235
  | Migration (legacy ~3582 row → archive 보존 + 재임베딩) | ✅ Done |
195
- | 핵심 정체성 promote (user.core_profile / sub_profile) | ✅ Done — Librarian draft + form review |
236
+ | 핵심 정체성 promote (user.core_profile / sub_profile) | ✅ Done — Librarian v2 (gate + null guard + JSON-in-string guard, qwen3.6:35b-a3b) |
196
237
  | Skill 트랙 정리 | ⏳ form 결정 보류, 차후 |
197
238
 
198
239
  ---
@@ -201,7 +242,7 @@ AGENT_KEY=... # 옵션, multi-persona 구분용
201
242
 
202
243
  - [`RESPEC.md`](./RESPEC.md) — 현재 vision + 회의 결정사항 + 구현 detail (단일 진실 원천)
203
244
  - [`SPEC.md`](./SPEC.md) — 구 SPEC (v0.x 역사 보존, 일부 §3.4 Memory Tier가 본 vision의 원형)
204
- - [`PROBLEMS.md`](./PROBLEMS.md) — 현재 진행 중 cleanup 단계 / 진단 결과
245
+ - [`DEVLOG.md`](./DEVLOG.md) — 운영 이슈, 관찰 로그, 아이디어 적립
205
246
 
206
247
  ---
207
248
 
package/RESPEC.md CHANGED
@@ -128,9 +128,13 @@ Tokens $0.50/ 1M tokens
128
128
 
129
129
 
130
130
 
131
- **Librarian**
131
+ **Librarian** ✅ v2 완성 (2026-05-22)
132
132
 
133
133
  - memory table 에서 필요한 user 테이블용 정보를 선별해서 user 테이블에 저장
134
+ - 모델: `qwen3.6:35b-a3b` (local/ollama, Q4_K_M) — thinking 허용, max_tokens=32768
135
+ - 게이트: `LIBRARIAN_ENABLED=true` + 30 새 메시지 + 24h 쿨다운
136
+ - 실패 방어: attempt 시 `last_run_at` 즉시 기록 (hammer 방지), null guard, JSON-in-string guard
137
+ - Cold Path worker tick마다 `maybeRunLibrarian()` 호출 (migration 023)
134
138
 
135
139
 
136
140