Releases: JinHo-von-Choi/anchormind
Releases · JinHo-von-Choi/anchormind
Release list
v5.3.0
Added
- text 없는 keywords-only recall에 L3 시맨틱 보조 경로. keywords(+contextText) 합성 텍스트 임베딩이 L2와 병렬 수행되어 저장 keywords 배열에 없는 용어도 content 기반으로 회수된다. searchPath에
L3kw:N세그먼트가 남으며semanticSearch.keywordFallback(envMEMENTO_KEYWORD_SEMANTIC_FALLBACK=false)로 비활성화할 수 있다. reflect에workspace파라미터 노출. 생성되는 모든 reflect 파편에 적용되며, 미지정 시 API 키의 default_workspace → 전역(NULL) 순으로 폴백한다.
Fixed
- 서버 재기동 후 Redis에서 복원된 세션이 이전 협상값(negotiatedVersion)을 그대로 되살려 이후 모든 요청이 400으로 거부되던 문제 수정. 협상값과 헤더가 달라도 지원 목록에 있는 값이면 헤더 값으로 재앵커링해 통과시키며(
mcp_protocol_version_reanchored_total카운터로 관측), 미지원 버전에 대한 400 거부는 유지된다. initialize 시 협상값을 Redis에 즉시 영속한다. (#26)
Changed
batch_remember의 fragments가 JSON 인코딩 문자열로 전달된 경우 원인을 명시하는 별도 오류 메시지를 반환한다.- JSON body 파싱 실패(-32700) 응답 message에 파서 위치 정보를 보존한다. 대량 배열 요청에서 손상 지점을 특정할 수 있다.
- search_events의
l3_count가 keywords 폴백 보조 세그먼트(L3kw:N)도 집계한다.
v5.2.3
Changed
semanticSearch.minSimilarity기본값 0.5→0.4. 12쿼리 골드셋 실측에서 상위5 유용 결과 수가 최대인 지점으로, 어휘 중첩이 낮은 회상형 질의의 무응답을 줄인다(0.35는 노이즈 유입이 이득을 상쇄해 기각). SearchParamAdaptor 기존 학습 행도 0.4 상한으로 동기화됐다.
v5.2.2
Fixed
- text/mixed recall의 RRF importance 컷오프가 기준값 미지정 시 모든 후보를 탈락시키던 문제 수정. 기준 미지정 시 no-op으로 동작하며,
rrfSearch.candidateMinImportance(기본 0.1)를 정책값으로 명시한다. extractKeywords가 한글 토큰의 조사 접미를 제거하고, 카멜/스네이크 케이스 코드 식별자를 소문자화 없이 원형 보존한다.
Added
- morpheme_indexed 백필 잡: 5분 주기로 미인덱싱 파편을 배치(기본 500) 처리해 형태소 L3 커버리지를 회복한다. embedding-consistency 경고에 백필 잡 상태가 병기된다.
- 마이그레이션 스크립트 3종(dryRun 기본): reflect 파편 keywords 재추출(
scripts/reextract-reflect-keywords.js), reflect permanent TTL 강등, SearchParamAdaptor min_similarity 리셋. - recall 품질 검증 지표 SQL과 스모크 절차 문서(
docs/operations/recall-quality-verification.md,scripts/recall-quality-metrics.sql).
Changed
- reflect decision 파편 importance 0.8→0.7,
reflectionPolicy.maxImportance0.3→0.55 — reflect 파편의 permanent 승격을 차단하고 정리 주기가 실제로 동작하게 한다.
v5.2.1
Fixed
recall의fieldssparse 목록이 응답에 적용되지 않던 문제 수정. 필드 선택이 응답 프로젝션에서 최종 적용되며, 파생 키(confidence,age_days)와keywords(이 경우includeKeywords없이도 포함)·valid_to·affect·ema_activation도 요청 시 반환된다.key_id가includeKeyName미지정 시에도 recall 응답에 포함되던 문제 수정.key_id·key_name모두includeKeyName=true일 때만 포함된다.
v5.2.0
Added
recall·context에includeKeyName파라미터: true 시 각 파편에key_id·key_name(액세스 키 라벨)을 포함한다. 같은 키 그룹 스코프의 정보만 노출되며 기본 false.recall의fieldssparse 목록에도key_id/key_name을 지정할 수 있다.- 임베딩 API 호출에 per-call 절대 타임아웃(
EMBEDDING_TIMEOUT_MS, 기본 8000ms)과 프로세스 전역 동시성 세마포어(EMBEDDING_CONCURRENCY/EMBEDDING_SEM_WAIT_MS)를 적용해 임베딩 서비스 지연이 전체 요청 큐로 전파되는 것을 차단. 세마포어 대기 초과는mcp_embedding_semaphore_wait_exceeded_total로 관측 가능. initialize(무세션) 요청에 인증·DB 조회 이전 IP rate limit 선차단 추가. 차단 시 429 응답과 함께mcp_initialize_ip_rate_limited_total카운터가 증가한다.batch_remember에 배열 전체 content 총 문자수 게이트(BATCH_REMEMBER_MAX_TOTAL_CHARS, 기본 200,000자) 추가. 항목별 4000자 상한과 별개로 요청 전체를 사전에 거부한다.QuotaChecker.check()에 캐시 우선 판정 경로 추가: 잔여 할당량이QUOTA_NEAR_LIMIT_MARGIN(기본 10)보다 크면 FOR UPDATE 트랜잭션 없이 통과하며, 이 경로는mcp_quota_cache_pass_total로 관측된다. 한도 임박 시에만 기존 정밀 검사로 전환된다.EmbeddingWorker가 remember() 동기 경로에서 이미 생성된 임베딩 벡터를 캐시로 재사용하여 동일 파편에 대한 중복 임베딩 API 호출을 제거.- 관리자 REST에 키 스코프 파편 조회·검색·통계·내보내기 엔드포인트 추가(
key_id/group_id스코프 적용).
Changed
- 외부 reranker 3연속 실패 시 기본 정책을 in-process 전환에서 쿨다운 스킵으로 변경(
RERANKER_EXTERNAL_FALLBACK=skip, 기본값). 쿨다운(RERANKER_EXTERNAL_COOLDOWN_MS, 기본 60초) 동안 external 호출을 생략하고 원점수(RRF 순서)를 유지하며, 만료 후 1건 재시도한다.RERANKER_EXTERNAL_FALLBACK=inprocess로 이전 동작(ONNX in-process 전환) 유지 가능. - 관리 콘솔 메모리 뷰: 1024px 미만 화면에서 Fragment Detail이 하단 고정 시트로 표시된다. 닫기 버튼과 ESC로 닫을 수 있으며 데스크톱 레이아웃은 동일하다.
- admin API의 CORS 허용 origin을 화이트리스트 반사 방식으로 처리하고 인증 실패를 로깅한다(
ADMIN_ALLOWED_ORIGINS).
Fixed
- 외부 reranker의 TEI(text-embeddings-inference) 호환: 요청에
texts필드를documents와 함께 전송하고,[{ index, score }]배열 응답을 매핑하며, 빈 바디/health를 허용한다 (#22, @itismyfield 기여). - 외부 rerank 배열 응답 처리: 빈 배열은 실패로 간주해 폴백 경로를 타고,
index범위와score타입이 유효한 항목만 반영한다.
v5.0.1
[5.0.1] - 2026-07-15
Added
- 프로세스 전역 에러 가드(
lib/process-guards.js):unhandledRejection은 로깅 후 프로세스를 유지하고,uncaughtException은 로깅 후 graceful shutdown을 exit code 1로 수행한다(onFatal 1회 보장, 35초 강제 종료 타이머). SIGTERM/SIGINT 경로는 기존과 동일하게 exit 0으로 종료한다.
Changed
- 전이 의존성 lockfile 갱신 (hono 4.12.30, protobufjs 7.6.5, tar 7.5.20).
v5.0.0
Changed
- 프로젝트명을 AnchorMind로 변경 (패키지명 anchormind-mcp). memento-mcp라는 이름이 다수의 동명·유사 프로젝트와 겹쳐 개명했으며, 도구명·환경 변수(MEMENTO_*)·DB 스키마·API 경로·키 형식(mmcp_) 등 런타임 계약은 모두 그대로다 (Breaking 없음).
- CLI bin에
anchormind명령 추가. 기존memento-mcp명령은 별칭으로 유지. - MCP initialize 응답의 serverInfo.name을
anchormind-server로 변경 (표시 메타데이터). - admin 콘솔·로그인 화면 브랜딩과 README 로고를 AnchorMind로 교체.
- README·SKILL.md·docs 전반의 표기를 현행 코드 기준으로 정비.
v4.8.0
Added
- content 입력 길이 상한 4000자 도입:
remember·batch_remember항목·amend의content가 이를 초과하면 JSON-RPC -32602 에러로 거부한다. 파편 유형별 저장 절삭(episode 1000자, 그 외 300자)은 그 이전 단계로 그대로 유지되며,batch_remember는 초과 항목만 실패 처리하고 나머지 배치는 계속 진행한다.
Changed
- 패턴 기반 캐시 무효화(
invalidateCacheByPattern)를KEYS대신 RedisSCAN커서 순회(COUNT 500, 순회 상한)로 전환. - 로컬 임베딩(transformers provider) 초기화를 모델별 싱글톤으로 단일화해 동시 중복 로딩을 방지하고, 추론을 FIFO 큐로 직렬화. 배치 임베딩(
embedBatch)은 청크 단위 텍스트 배열을 파이프라인에 1회 추론으로 전달한다. - 마이그레이션 SQL 파일을
lib/memory/migrations/디렉토리로 이동.npm run migrate동작은 변경 없음. lib/memory/하위를read/·write/·consolidate/·link/·signals/·processors/·embedding/서브디렉토리 체계로 재배치.
v4.7.0
[4.7.0] - 2026-06-20
Added
batch_remember비동기 신뢰성 처리: 백그라운드 워커가 ack·재시도(최대 3회)·dead-letter·기동 복구(RPOPLPUSH reliable queue)로 at-least-once 배치 처리를 보장한다.batch_status(jobId)도구 추가:batch_remember(async: true)결과jobId로 처리 상태(queued/processing/completed/dead)를 조회하는 읽기 전용 도구.- Deferred tool discovery 클라이언트 가이드: Codex Desktop 등 lazy 로딩 클라이언트를 위한
instructions초기화 지침·SKILL.md 섹션·README 가이드를 일관되게 정비. - 코어 도구에 MCP
title+annotations(readOnlyHint/idempotentHint/openWorldHint) 메타데이터 추가.tools/list응답에서recall이remember바로 다음에 노출된다.
Changed
batch_remember·memory_consolidate가 표준 단일 JSON-RPC 응답으로 반환된다.stream파라미터는 deprecated(하위 호환 유지, 동작 없음).- 총 도구 수 17 → 20(
batch_status,session_rotate,check_update/apply_update반영).
v4.6.0
[4.6.0] - 2026-06-16
Added
- 벡터 검색 HNSW 인덱스 강제 옵션·토글:
ORDER BY embedding <=> v LIMIT트랜잭션에enable_seqscan=off·enable_bitmapscan=off·hnsw.iterative_scan힌트를 적용해 HNSW 인덱스 경로를 강제. batch_remember비동기(파이어앤포겟) 모드 opt-in:async: true지정 시 선검증 후 Redis 큐 적재,{async, accepted, rejected, jobId}즉시 반환.BatchRememberWorker가 본처리. 기본async: false로 기존 동기 동작 불변. Redis 비활성 환경에서는 동기 폴백.- 배치 작업 전용 연결 풀(
getBatchPool,application_name='memento-mcp:batch') 및 배치 풀 통계 메트릭 수집.
Changed
- HNSW 인덱스 정의의
ef_construction정합화, L3 형태소 보강 검색 병렬 실행, RRF 병합 후보에 importance 하한 컷오프 적용. - reflect 항목 자기완결성 게이트 및 한글 하한 강화.
- 키 스코프 조회를
keyScopeClause공용 헬퍼로 통일:getById·findCaseIdBySessionTopic·findErrorFragmentsBySessionTopic·GraphLinker공유.GraphLinker키 필터를 파라미터 바인딩·text타입 정합으로 정리. - 피드백 importance 보정 계수를
feedbackFactor순수 함수로 단일화(라이브 계수 0.85/1.1/0.95 유지). tools/call메트릭 중복 집계 제거.- 내부 중복 정리: 요청 컨텍스트 추출·키워드 정규화·도구 감사 래퍼·검색 SELECT 상수·affect 조건·Bearer 추출·환경변수 리스트 파싱·공통 파라미터 스키마 각각 단일 위치로 통합.
- 대형 메서드 분해:
remember·handleMcpPost·buildAdminPaths·dispatchJsonRpc·ContextBuilder.build·검색 RRF·컨솔리데이션/분해/압축.
Fixed
getUnreflectedSessions의 Redis SCAN 순회에 상한(최대 20라운드)을 두어 대용량 keyspace에서 context 응답이 지연되던 문제 해결.