AnchorMindANCHORMIND
SIGN IN

Releases

AnchorMind MCP 서버의 버전별 변경 내역. GitHub 릴리즈와 동일한 내용이다.

v5.12.0

GITHUB상세

업그레이드 주의

  • 응답 헤더 Access-Control-Allow-Origin은 ALLOWED_ORIGINS가 비어 있을 때 MEMENTO_CORS_MODE(기본 observe)를 따른다. Origin이 있는 응답에는 Vary: Origin이 붙는다.
  • 메트릭 라벨 값은 고정 집합이다. 지원하지 않는 프로토콜 버전 거부는 unsupported 또는 missing, Origin 거부는 rejected, 404 응답의 경로 라벨은 __not_found__로 기록한다. 이 라벨로 집계하는 대시보드는 위 값에 맞춰 조건을 둔다.
  • symbolic 정책 위반이 있는 저장에서 hard gate 설정 조회가 실패하면 저장을 거부하고 hardGateLookupFailed를 돌려준다. 정책 규칙 평가 자체가 예외를 던지면 policyCheckFailed 위반으로 기록한다.
  • 컨테이너 이미지는 node 사용자로 실행한다. /app 아래 쓰기 경로(logs/ 등)를 볼륨으로 붙였다면 소유자를 맞춘다.

Added

  • MEMENTO_CORS_MODE(reflect, observe, allowlist, 기본 observe): ALLOWED_ORIGINS 미설정 시 교차 출처 응답 방식.
  • 모든 응답에 X-Content-Type-Options: nosniff, Referrer-Policy: no-referrer를 붙인다. MEMENTO_FRAME_OPTIONS=deny이면 X-Frame-Options: DENY도 붙인다.
  • MEMENTO_OAUTH_REDIRECT_CHECK(warn, enforce, 기본 warn): /authorize 오류 응답을 등록되지 않은 redirect_uri로 보낼지 정한다. redirect_uri가 없거나 URL이 아니면 400 JSON을 준다.
  • MEMENTO_SSE_QUERY_KEY(allow, deny, 기본 allow): Legacy SSE ?accessKey= 쿼리 키 처리.
  • MEMENTO_TOOL_ARGS_VALIDATION(off, warn, enforce, 기본 warn)과 MEMENTO_TOOL_ARGS_ALLOW_UNKNOWN(기본 false): tools/call 인자를 도구 inputSchema와 대조한다.
  • MEMENTO_LLM_CLI_ENV_PASSTHROUGH: CLI provider 자식 프로세스에는 기본 변수와 CLI별 인증 변수만 전달하며, 이 변수에 적은 이름을 추가로 전달한다.
  • UPDATE_REQUIRE_SIGNED_TAG(기본 false): true면 git 설치본 업데이트가 checkout 전에 git verify-tag를 실행한다.

Changed

  • 관리 콘솔 인증, /session/rotate 호출 제한, MCP 핸들러, 서버 요청 기록은 클라이언트 주소를 TRUST_PROXY_HOPS 기준의 한 경로(resolveClientIp)로 판정한다.
  • OAuth 클라이언트 등록과 인가 요청의 입력 처리 경로를 정리한다.
  • /authorize 처리 중 저장소 조회 등에서 예외가 나면 기록 후 500 JSON(server_error)으로 응답한다.
  • Google Gemini HTTP provider는 API 키를 x-goog-api-key 헤더로 전달한다. LLM HTTP 호출의 오류 메시지와 로그에는 요청 경로만 기록하고, 타이머는 응답 본문 읽기가 끝날 때까지 유지한다. provider 실패와 성공 기록을 기다린 뒤 다음 단계로 넘어간다.
  • 통합(consolidate)의 압축 그룹과 이웃 탐색은 같은 key_id와 workspace 안으로 한정하고, 삭제·폐기한 파편을 색인에서 지운다.
  • 모순 탐지는 (created_at, id) 워터마크로 진행 위치를 기록하고, 반복 실패하는 파편이 뒤 파편의 검사를 막지 않도록 파편별 실패 상한을 둔다.
  • reconstruct_history는 이벤트별 근거 파편을 한 번의 질의로 조회한다. 근거 조회가 실패하면 빈 근거와 evidence_error를 붙인다.
  • 접근 기록 갱신은 대상 행을 id 오름차순으로 먼저 잠근 뒤 갱신한다. 연결 파편 접근 기록이 실패하면 경고 로그를 남긴다.
  • 임베딩 워커는 대상 행을 id 오름차순으로 먼저 잠근 뒤 갱신한다.
  • 링크 일괄 생성(LinkStore.createLinks)은 fragment_links에 존재하는 열만 갱신하며 링크를 정상 삽입한다.
  • CLI: inspect의 --include-nli, cleanup의 --execute·--redetect 인자를 올바르게 해석한다. npm 로컬 설치본 업데이트는 npm install anchormind-mcp@<버전>으로 대상 버전을 고정한다. git 설치본 업데이트에서 git status 확인이 실패하면 업데이트를 멈춘다.
  • npm run lint:migrations는 MIGRATION_LINT_FROM이 없으면 전체 마이그레이션을 검사한다(migration-034-v2.16.0-bundle.sql은 파일명 규칙 예외).
  • GitHub Actions의 외부 액션 참조는 커밋 해시로 고정한다.

Fixed

  • 의미 중복 병합(semantic_dedup)은 폐기되는 파편의 링크를 남기는 파편으로 옮긴다. 같은 (from_id, to_id) 쌍이 이미 있는 링크만 건너뛰고 나머지를 옮기며, 이전이 실패하면 경고를 남긴다.

v5.10.0

GITHUB상세

백그라운드 작업이 데이터베이스 연결 풀을 독점해 저장 요청이 굶던 문제를 막고, 외부 기여로 들어온 의미 기반 중복 폐기와 임베딩 차원 정합 수정을 합친 마이너 릴리즈.

업그레이드 주의

  • npm run migrate를 실행해야 한다. migration-049가 fragment_synthetic_query.embedding을 fragments.embedding의 타입·차원과 비교해, 어긋난 설치에서는 한 트랜잭션으로 파생 행을 지우고 컬럼 타입을 바꾼 뒤 부분 HNSW 인덱스를 다시 만든다. 이미 정합한 설치에서는 아무 변경도 하지 않는다. 지워진 파생 행은 SyntheticQueryWorker가 비동기로 다시 만들며, 그때까지 역질의 검색 결과가 줄고 provider 비용이 생길 수 있다.
  • 백그라운드 작업(스케줄러, PollingWorker)이 동시에 쥘 수 있는 Primary 풀 연결이 DB_BACKGROUND_MAX_CONNECTIONS(기본 DB_MAX_CONNECTIONS의 40%)로 제한된다. 상한을 넘는 획득은 FIFO 큐에서 기다리고, DB_BACKGROUND_WAIT_MAX_MS(기본 120000)를 넘기면 그 작업만 실패하고 다음 회차에 재시도한다. 요청 경로는 영향을 받지 않는다.

Added

  • 백그라운드 풀 게이트와 mcp_background_gate_active_slots, mcp_background_gate_waiting, mcp_background_gate_capacity 게이지.
  • migration-049: 합성 질의 임베딩 컬럼을 정본 fragments.embedding 기준으로 정합하는 마이그레이션 단계.

Changed

  • GraphLinker의 의미 기반 폐기는 코사인 유사도 0.95 이상에 더해 내용 완전 일치를 요구하고, (created_at, id) 순서로 더 오래된 행만 승자로 고른다. 키 범위는 저장된 원본 행의 key_id에서 도출하며 원본·중복·후보 조회 모두 폐기된 행을 제외한다. 배치로 저장된 유사하지만 다른 파편 둘이 서로를 폐기하던 문제를 막는다.
  • 세션 세그먼트 회전 시의 자동 reflect, 관리자 세션 정리, 기동 시 워밍업이 백그라운드 게이트를 거친다.
  • 런타임 의존성 openai 7.12.1, 개발 의존성 eslint 10.10.0.

v5.9.0

GITHUB상세

회상 품질 회귀의 원인을 규명해 되돌리고, 인증과 격리의 기본값을 안전한 쪽으로 옮기며, 구조를 정리한 마이너 릴리즈.

업그레이드 주의

  • MEMENTO_ACCESS_KEY를 설정하지 않으면 서버가 기동하지 않고 종료 코드 78로 멈춘다. 인증 없이 운용하려면 MEMENTO_AUTH_DISABLED=true를 함께 지정해야 한다. 종전에는 키가 없으면 모든 요청이 master 권한으로 통과했다.
  • in-process 교차 인코더 리랭커가 기본 비활성으로 바뀌었다. 기본 모델이 영어 전용이라 한국어 코퍼스에서 순손실이었다. 켜려면 MEMENTO_RERANKER_ENABLED=true를 지정한다. RERANKER_URL로 붙인 외부 리랭커는 영향을 받지 않는다.
  • 요청 수신 상한이 60초, 사용자 요청 경로의 질의 시간 상한이 30초로 기본 설정된다. 종전에는 둘 다 무제한이었다. REQUEST_TIMEOUT_MS와 DB_STATEMENT_TIMEOUT_MS로 조정한다.
  • migration-045가 fragments와 fragment_links에 행 수준 보안을 켜고 정책을 건다. 애플리케이션이 표 소유자인 배포에서는 동작이 바뀌지 않는다. 실제 방어선으로 세우는 절차는 docs/operations/row-level-security.md에 있다.
  • 개발용 단위시험은 Node.js 24를 요구한다. 서버 실행은 종전대로 Node.js 20 이상에서 동작한다.

Security

  • 인증 키 미설정 시 모든 요청을 master 권한으로 통과시키던 결함을 제거했다. 키 부재 처리를 단일 정책 함수로 모으고, 구성이 어긋나면 기동 자체를 중단한다.
  • workspace 허가 조회 실패를 무제한 허용과 구분한다. 종전에는 조회에 실패하면 제한 없음으로 처리해 데이터베이스가 흔들릴 때마다 격리가 풀렸다.
  • 참조되지 않는 @modelcontextprotocol/sdk 의존성을 제거해 전이 취약점을 없앴다.
  • 갱신 확인이 다른 프로젝트의 npm 패키지를 가리키던 문제를 고쳤다.

Added

  • fragments와 fragment_links 행 수준 보안 정책. app.current_key_id 세션 변수로 키 축 격리를 표현한다.
  • 취약점 신고 절차(SECURITY.md), CodeQL 정적 분석, Dependabot 의존성 갱신, CI 의존성 감사 단계.
  • 통합시험이 CI에서 실행된다. 외부 서비스 없이 도는 것을 전제로 작성돼 있으므로 실제로 그런지 확인한다.
  • Node 20·22·24 런타임 기동 검증 행렬.

Changed

  • in-process 리랭커를 기본 비활성으로 바꿨다. 절제 실험 결과 격리 모드 Recall@5가 67퍼센트에서 85퍼센트로, 코퍼스 모드 Recall@1이 74퍼센트에서 85퍼센트로 올랐고 p50 지연은 561ms에서 126ms로 줄었다. 원인은 기본 모델이 영어 MS MARCO 전용이라 한국어 질의에서 상류 벡터 순위를 다시 쓰며 손해를 낸 것이다. 상위 30건 중 15건만 남기는 절단이라 하류 보정으로 복구되지 않는다.
  • 배포물을 런타임 필수 자산으로 한정한다. 8.37MB에서 1.82MB로 줄었다.
  • 빈 데이터베이스에서 npm run migrate 한 번으로 기반 스키마와 마이그레이션이 모두 적용된다. 종전에는 첫 마이그레이션이 기존 표를 전제해 즉시 실패했다.
  • 미사용 변수 경고를 정리하고 규칙을 실패로 승격했다.

구조 정리

기능과 응답 표면은 바꾸지 않았다. 회귀 판정은 오프라인 계측으로 했다.

  • 키 격리 조건을 SQL로 직접 쓰던 지점을 이름 붙은 생성기 호출로 모았다. 빈 배열을 격리 해제로 다루던 위험을 함께 제거했다.
  • 워커 네 종의 폴링·백오프·종료 배수를 공통 기반으로 옮기고 레지스트리로 등록한다. 워커를 추가할 때 종료 경로를 함께 고쳐야 하는 결합이 사라졌다.
  • 500줄이 넘던 함수 다섯을 분해했다. 최대 함수 길이가 96줄이다.
  • 스키마 이름 선언 36곳과 할당량 회계 질의 6곳을 각각 한곳으로 모았다.
  • 설정 모듈 참조 경로를 정리했다.
  • 도구 정의, 응답 키 집합, 관리 경로, CLI 표면을 스냅샷으로 고정해 표면 변경이 시험으로 잡히게 했다.

의존성

  • openai 7, dotenv 17, ioredis 6, @huggingface/transformers 4, eslint 10으로 상향했다.
  • @huggingface/transformers 4가 구 onnxruntime-node를 통해 끌어오던 adm-zip 취약점을 override로 차단했다.
  • 참조되지 않는 @modelcontextprotocol/sdk를 제거했다.

Fixed

  • 단위시험 간헐 실패 두 건의 원인을 제거했다. 응답 형태 스냅샷이 확률 표집을 막지 않았고, reflect 시험이 fire-and-forget 작업을 배수하지 않았다.
  • 벤치마크 하네스가 적재 전에 같은 격리 스코프의 잔여 파편을 회수한다. 실행이 중간에 종료되면 정리 블록이 실행되지 않아 적재분이 남고, 그 상태로 다음 실행이 적재하면 이전 파편이 방해 요소로 섞여 측정이 오염됐다.
  • 벤치마크 정리 단계가 삭제 건수를 항상 0으로 보고하던 문제 수정. deleteByAgent가 rowCount 숫자를 반환하는데 객체로 다뤘다.

v5.7.0

GITHUB상세

workspace 스코프 체계와 세션 세그먼트를 도입한 마이너 릴리즈.

Added

  • workspace 기입 출처 추적: 파편에 workspace_source(explicit/key_default/inferred/unscoped)를 기록한다 (migration-040).
  • reflect 그룹 영속화: 세션 종합을 workspace → case → topic 경계로 그룹핑해 그룹별 파편·에피소드를 생성하고 각 산물에 workspace를 기록한다. Working Memory는 종합에 사용한 항목만 소거한다.
  • 세션 세그먼트: 전송계층 세션이 유휴 45분 또는 수명 12시간을 넘기면 파생 ID({원본}#{seq})로 회전하며, 회전 시 직전 세그먼트를 자동 reflect한다. MEMENTO_SESSION_SEGMENT=false로 비활성화할 수 있다.
  • workspace 랭킹 감쇠: 검색 scope에 workspace를 지정하면 불일치·전역(NULL) 파편의 랭킹 점수에 감쇠 배율(기본 0.7)을 적용한다. recall과 context 주입 경로 공통.
  • workspace 검증: fragmentHasWorkspace 정책 경고와 API 키별 allowed_workspaces 허가 집합(migration-042)을 추가한다. 기본은 경고만이며 MEMENTO_WORKSPACE_GATE=true로 차단 전환.
  • 비파괴 workspace 추론 백필 스크립트(scripts/backfill-workspace-inference.js): 추론 결과를 workspace_inferred·inference_confidence·backfill_batch_id(migration-041)에만 기록한다. dryRun 기본.
  • memory_stats에 workspace 분포·키별 기입률·세션당 파편 분포(stats.workspaces)를 노출한다.
  • get_skill_guide에 workspace 섹션을 추가하고 SKILL.md의 workspace 기입 규칙을 필수로 격상한다.

Changed

  • 에피소드 preceded_by 체인을 workspace(부재 시 topic) 스코프 내로 한정하고, 최근 milestone 조회를 인메모리 캐시에서 DB 기반으로 전환한다.
  • 품질 평가 rationale을 keywords 배열 대신 전용 컬럼 quality_rationale에 저장한다 (migration-040).
  • ProactiveRecall 키워드 중첩 판정에서 불용어·2자 미만 토큰을 제외하고, temporal 자동 링크에 workspace 일치 조건을 추가한다.

Fixed

  • memory://active-session 리소스가 세션 활동 로그를 반환하도록 세션 컨텍스트 주입과 조회 경로를 정정한다.

v5.6.2

GITHUB상세

[5.6.2] - 2026-08-13

임베딩 차원 마이그레이션 판정 결함(#54)과 운영 와치독 재시작 폭풍을 정비한 패치.

Fixed

  • 임베딩 차원 마이그레이션 스킵 판정을 (타입, 선언 차원) 쌍 비교로 교체한다 (#54). pgvector는 vector(1536)·vector(384)를 모두 udt_name='vector'로 보고하므로 타입 이름 단독 비교가 실제 차원 변경을 스킵했고, transformers 384차원 전환 환경에서 임베딩 쓰기 전량 실패·시맨틱 검색 무력화로 이어졌다. 선언 차원은 pg_attribute.atttypmod에서 읽으며 무차원 선언(-1)도 변환 대상으로 판정한다.
  • 기동 게이트(check-embedding-consistency)가 임베딩 데이터 전량 NULL 상태의 선언 차원 불일치를 통과시키던 공백을 막는다. 행 표본 검사 전에 선언 차원 검사를 수행해, 불일치 상태로 서버가 기동해 NULL을 양산하기 전에 차단한다.
  • 와치독 스크립트에 기동 유예 120초를 도입한다. 유예 없이는 부팅(모델 로드 등)이 헬스체크 주기를 넘는 순간 매분 강제 재시작이 반복되는 재시작 폭풍이 된다.

Added

  • 차원 마이그레이션 스크립트에 --dry-run(변환 대상 미리보기), 테이블별 트랜잭션(중간 실패 시 롤백으로 "임베딩 전량 NULL + 인덱스 없음" 중간 상태 방지), 변환 후 검증 출력(NULL 수·pg_index.indisvalid)을 추가한다. halfvec 목표 시 실행 경로 호환 미검증 경고를 출력한다.
  • (타입, 차원) 판정 로직을 lib/memory/embedding/column-spec.js로 분리해 마이그레이션 스크립트와 기동 게이트가 공유한다.

Changed

  • 마이그레이션의 HNSW 인덱스 재생성 파라미터를 기본 스키마와 동일한 ef_construction=128로 정합한다(기존 64는 재생성 시 검색 품질 회귀 요인).

필수 기능에는 추적 도구가 필요하지 않습니다. 동의한 경우에만 Google Analytics와 AdSense를 불러옵니다. 자세히 보기