Releases
Version-by-version changelog for the AnchorMind MCP server. Mirrors the GitHub releases. Release notes are written in Korean.
v6.4.0
LATESTGITHUBDETAILS
v6.4.0
LATEST기억이 "언제" 일어난 일인지 구분하고, recall이 답의 근거가 충분한지 알려 준다.
업그레이드 주의
- 마이그레이션 두 개가 들어 있다:
migration-065(파편 시각 열),migration-066(요약 표). 먼저 백업하고(scripts/ops/backup.sh --label pre-migration)npm run migrate를 실행한다. 기존 파편은 그대로 동작한다. migration-065는 색인idx_fragments_world_time도 만들며, 만드는 동안 파편 쓰기가 잠시 멈춘다. 파편이 많아 이를 피하려면 migration-065의ALTER TABLE문을 먼저 실행하고,scripts/ops/online-index.mjs(또는CREATE INDEX CONCURRENTLY)로 색인을 만든 뒤npm run migrate를 실행한다.- 시간 근접 랭킹과 모순 판정(어느 쪽이 최신인가)이 저장 시각 대신 "말한 시각"을 본다.
mentionTime없이 저장된 파편은 둘이 같으므로 결과가 바뀌지 않는다. forget응답의purged에digests가 더해진다.- 답 꾸러미의
policy_id가memento-pack-policy-v1로 바뀐다.
Added
- 말한 시각과 사건 시각.
remember,batch_remember,amend가mentionTime(그 말을 한 때)과eventTime(그 일이 일어난 때)을 받는다.eventTime을 주지 않으면 본문의 "어제", "2026-03-14", "last week" 같은 표현에서 읽어 낸다(MEMENTO_EVENT_TIME_EXTRACT, 기본 on). - 시간으로 찾고 줄 세우기.
recall의timeRange: { basis: "event" }는 사건 시각으로 기간을 거르고,order: "chronological"은 결과를 일어난 순서로 돌려준다. - 바뀐 값과 엇갈린 기억 보기.
includeHistory: true면 현재 값 바로 뒤에 이전 값이 붙는다. 아직 정리되지 않은 모순은conflicts_with로 표시된다. - 근거 점검(
_meta.evidence). recall이 근거 상태를 알려 준다:no_evidence(찾은 기억 없음),partial(질문의 핵심 낱말 일부가 결과에 없음,uncovered_terms로 표시),conflicting,supported. 에이전트는 이 값으로 다시 찾을지, "모른다"고 답할지 정한다. - 질문 유형별 근거 묶음. "몇 번", "언제", "지금도" 같은 질문은 자동으로 알아보고(
intent), 결과를 시간순 표로 정리해 같은 내용은 한 번만 센다.intent를 직접 주면 그 유형에 맞는 기본값(더 많은 후보, 시간순, 이전 값 포함)이 적용된다. - 주제별 시간선과 선호 목록. 정리 주기가 주제마다 기록을 시간순 한 줄씩 모은 요약과, 사용자 선호를 모은 목록을 만든다(
MEMENTO_DIGEST, 기본 on, LLM 미사용, 할당량 미차감). 여러 대화에 흩어진 기록을 묻는 질문에 함께 실린다. 원본을 지우면 요약도 지워진다. RERANKER_MIN_SCORE: 리랭커를 쓸 때 점수가 낮은 후보를 결과에서 뺀다(기본 0, 끔).scripts/measure/recall-scale.mjs: 로컬 시험 DB에서 파편 수에 따른 recall 지연을 잰다.
Changed
- 자연어 검색의 그래프 확장이 키워드 검색 상위뿐 아니라 의미 검색 상위 결과의 연결도 따라간다.
v6.3.1
GITHUBDETAILS
v6.3.1
업그레이드 주의
- 데이터베이스 마이그레이션은 없다.
git pull,npm install, 서비스 재시작이면 된다. - 절차–오류 연결 제안(
_meta.link_suggestions)의fromId와toId가 절차→오류에서 오류→절차로 뒤집힌다. 제안을 그대로link에 넘기던 호출은 이제 규약에 맞는 방향으로 연결된다. resolved_by로 해결된 에러의 중요도를 0.5로 내리는 처리가 시작점이 error인 호출에서 동작한다. 이전에는 이 방향에서 발동하지 않았다.- 해결책 → 에러 방향으로 저장된 기존
resolved_by는 바꾸지 않는다.graph_explore(절차)와reconstruct_history의 미해결 판정이 두 방향을 모두 읽는다.
Added
- reflect 연결 제안의
meta.relationHint. 오류–결정 후보(caused_by)에link규약에 맞는 오류→결정resolved_by연결(fromId,toId,relationType)을 함께 싣는다. 후보의 기존 키는 바뀌지 않는다.
Changed
resolved_by의 방향을 "에러(fromId) → 해결책(toId)"로 통일했다. 절차–오류 연결 제안과 자동 연결의fromId와toId가 절차→오류에서 오류→절차로 바뀐다. 해결책 → 에러 방향으로 저장된 이전 연결은 그대로 두고getRCAChain(절차)과 미해결 판정이 계속 읽는다.
Fixed
link가resolved_by를 걸 때 해결된 에러의 중요도를 0.5로 내리는 처리가 도착점이 error일 때만 동작하던 문제. 규약 방향(시작점이 error)에서는 발동하지 않았다. 시작점이 error이면 시작점을, 이전 방향이면 도착점의 error를 내린다.- 케이스 이벤트의
resolved_by간선이 해결 이벤트에서 에러 이벤트 방향으로 기록되어,reconstruct_history의 미해결 브랜치 판정이 에러를 해결된 것으로 보지 못하던 문제. 간선을 에러에서 해결 이벤트 방향으로 기록하고, 판정은 어느 방향의 간선이든 해결로 본다. graph_explore(getRCAChain)가 해결책 → 에러 방향으로 저장된 절차resolved_by를 에러에서 시작할 때 찾지 못하던 문제.
v6.3.0
GITHUBDETAILS
v6.3.0
업그레이드 주의
- 마이그레이션
migration-064(fragment_segment표)가 포함된다. 운영 반영 직전에scripts/ops/backup.sh --label pre-migration으로 백업을 만든다. 구간 임베딩은 기본 꺼짐이라MEMENTO_SEGMENT_EMBEDDING_ENABLED와MEMENTO_SEGMENT_SEARCH를 켜기 전에는 검색 결과가 달라지지 않는다. reflect의_meta.link_suggestions가 기본으로 줄어든다. 키워드 겹침 0.4 미만 후보는 만들지 않고 그룹당 3개까지만 싣는다. 이전 동작은MEMENTO_LINK_SUGGEST_MIN_OVERLAP=0과MEMENTO_LINK_SUGGEST_MAX=0으로 되돌린다.- 의존성
sharpoverride가 0.35.5로 올라간다.git pull뒤npm install을 실행하고 서비스를 재시작한다.
Added
- reflect 연결 제안(
_meta.link_suggestions)에 최소 키워드 겹침 기준(MEMENTO_LINK_SUGGEST_MIN_OVERLAP, 기본 0.4), 1위와 2위 후보의 최소 점수 차이(MEMENTO_LINK_SUGGEST_MIN_MARGIN, 기본 0), 그룹당 상한(MEMENTO_LINK_SUGGEST_MAX, 기본 3)을 추가했다. 제안 항목에meta(score,margin,signals,scoreVersion)가 붙고, 상한으로 빠진 개수는_meta.link_suggestions_omitted로 알린다. 후보는 같은 그룹(workspace, case_id, topic)의 파편끼리만 짝짓고 점수 동률은 id 순으로 정한다. 키워드 겹침은 소문자·중복 제거한 집합으로 센다. 기준을 0으로 두면 이전처럼 겹침이 없어도 가장 높은 후보를 제안한다. - 구간(세그먼트) 임베딩(옵트인, 기본 꺼짐). 400자를 넘는 파편을 300자 창으로 나눠 구간별 벡터를
fragment_segment(migration-064)에 두고, L3 시맨틱 검색에서 조각별 최대 유사도(감쇠 0.95, 영향 조각 상한 10)를 본문 후보에 합친다. 최대 1000자 본문 속 곁다리 언급이 본문 벡터에 희석되어 놓치던 근거를 회수한다. 환경변수MEMENTO_SEGMENT_EMBEDDING_ENABLED,MEMENTO_SEGMENT_SEARCH,MEMENTO_SEGMENT_MIN_CHARS,MEMENTO_SEGMENT_DECAY,MEMENTO_SEGMENT_ADOPT,MEMENTO_SEGMENT_SEARCH_TIMEOUT_MS,MEMENTO_SEGMENT_RPM. 키/에이전트/워크스페이스 열 없이 부모fragments로 격리한다. 기존 파편은scripts/backfill-fragment-segments.js로 채운다. RERANKER_WINDOW(기본 30)와RERANKER_TOP_K(기본 15) 환경변수. 리랭커가 재정렬하는 RRF 상위 후보 수와 재정렬 뒤 남기는 개수를 설정으로 뺐다. 기본값은 기존 동작과 같다.MEMENTO_RECALL_MIN_SIM_CEIL환경변수.SearchParamAdaptor.getMinSimilarity가 반환하는 적응형 임계값에 옵트인 상한을 강제한다. 학습 규칙이 병합 결과 건수(평균 8 초과면 상승)를 기준으로 해서 값이CLAMP_MAX(0.60)에 고착될 수 있는 배포를 위한 것이다. 하한과 함께 설정하면 하한이 우선한다. 미설정 시 기존 동작 그대로.- 구간 임베딩 워커가 한 회차 안의 파편을
MEMENTO_SEGMENT_CONCURRENCY(기본 4, 1~32)개씩 동시에 임베딩한다. 직렬 처리는 임베딩 백엔드가 놀아도 처리량이 막혔다. 임베딩 호출은EMBEDDING_CONCURRENCY와EMBEDDING_SEM_WAIT_MS를 함께 쓰므로 동시성을 올리면 두 값도 맞춰 올린다. - 본문 절삭 가시화. 300자(episode 1000자)를 넘어 잘린 본문은 응답의
content_truncated(original_length,stored_length)와validation_warnings의contentTruncated로 알린다.batch_remember는 항목별results[].content_truncated와 최상위truncated_count(1건 이상일 때만)를 돌려주고,remember의 dryRun 응답에도 같은 필드가 붙는다. 절삭이 없으면 응답은 달라지지 않는다.contentTruncated는symbolic_hard_gate의 차단 대상이 아니다. - 서버 instructions 상단에 저장 계약(본문 상한 300/1000자, 초과분 폐기, 입력 상한 4000자) 블록. 수치는
lib/memory/contentGuard.js의 상수에서 만든다.
Changed
- 벤치마크 리포트(
docs/benchmark.md)와 README의 LongMemEval-S 수치를 bge-m3, 구간 검색 켬 기준 최신 측정값으로 바꿨다. - 도구 스키마와 API 문서의 content 설명을 "300자 이내 권장"에서 "초과분 폐기"로 바꿨다. 절삭 동작은 변하지 않는다. 4000자는 episode 전용이 아니라 content 필드의 공통 입력 상한이다.
Fixed
sharpoverride를 0.35.5로 올려 권고 GHSA-wq5f-xc86-pv6w(librsvg 취약점)를 해소했다.- 본문에 특수 토큰 문자열(
<|endoftext|>등)이 있으면 토큰 수 계산이 예외를 던져batch_remember가 그 항목을 거부하던 문제. 특수 토큰도 일반 텍스트로 센다. - 리랭커가 재정렬한 파편이 재정렬되지 않은 파편(연결 파편, 재정렬 창 밖) 아래로 밀리던 문제. 재정렬 점수와 복합 점수의 척도 차이를 보정해 재정렬된 파편이 항상 위에 온다.
v6.2.0
GITHUBDETAILS
v6.2.0
업그레이드 주의
- Node.js 최소 버전을 20에서 22로 올렸다. 런타임 의존성
openai(7.x)가 Node 22 이상을 요구해서 Node 20에서는npm ci --engine-strict가EBADENGINE으로 실패했다. Node 20을 쓰고 있다면 22 이상으로 올린 뒤npm ci를 다시 실행한다. Docker 이미지(Node 24)와 CI는 이미 22 이상이다. - 데이터베이스 마이그레이션은 없다.
git pull,npm install, 서비스 재시작이면 된다.
Added
config/env-access.js와npm run env-access. 중앙 모듈(lib/config.js,config/) 밖에서process.env를 읽는 지점을 구문 분석으로 찾아 startup, runtime, cli로 분류하고 대장과 대조한다. 등록되지 않은 접근, 코드에 없는 등록, 분류가 어긋난 등록은tests/structure/env-access.test.js가 실패시킨다. 새 환경 변수는 중앙 모듈에서 읽고, 예외는 사유와 함께 대장에 등록한다.- 오철칙(iron-laws) 점검 워크플로
.github/workflows/iron-laws.yml. 기준선(.iron-laws-baseline.json)에 없던 새 지적만 판정하며 병합을 막지 않는다. 도구는 점검에 쓴 커밋으로 고정했고 범위와 제외 목록은.iron-laws.yml에 있다. acorn을 개발 의존성으로 명시했다. 환경 변수 접근 점검이 쓴다.
Changed
- README를 이게 뭔데, 어떻게 돌아가는데, 어떻게 설치하는데, 자주 묻는 질문 순으로 다시 썼다. FAQ는 질문 하나에 답 하나로 나눴고 동작 흐름 다이어그램을 넣었다. 설치 절차는 pgvector 컨테이너와 로컬 임베딩 기준으로 바꿨다.
- 기능 상세, 보안과 운영 점검, 업그레이드 노트, 클라이언트별 연결을
docs/아래 문서로 나눴다. 업그레이드 노트는 공통 절차와 상황별 추가 작업으로 다시 썼다.INSTALL.md는 설치 안내 허브로 줄였다. recordSearchEvent의 열 단계별 대체 경로를 함수로 나눠 복잡도를 낮췄다. 동작은 바뀌지 않는다.- 린트 래칫 기준선을 갱신했다.
admin-memory.js의 복잡도와 줄 수가 기록되고, 무처리catch가 줄어든oauth.js와ConflictResolver값은 낮아졌다.
Fixed
- OAuth 키 조회가 실패해 키에 묶이지 않은 클라이언트로 격하될 때 아무것도 남지 않던 것을 경고로 남긴다. 권한은 늘지 않는다.
- 인접 링크 격리가 실패해도 기록이 없던 것과 자동 링크의 주제 조회 실패를 경고로 남긴다. 반환값은 그대로다.
- 관리 인증 거부 경고가
console.warn으로 쿼리 문자열까지 기록하고 로거의 민감 정보 마스킹을 우회하던 것을 고쳤다. 경로만 로거로 기록한다. - 충돌 해소 트랜잭션의
ROLLBACK실패를 기록한다. - 건너뛰던 lifecycle 누수 검출 시험을 닫지 않은
net.Server로 확인하는 결정적 시험으로 바꿨다. 타이머는process._getActiveHandles()에 나타나지 않아 이전 시험은 검출할 수 없었다.
Removed
- 호출처가 없던
logRequest.
v6.1.0
GITHUBDETAILS
v6.1.0
Added
- 합성 역질의에 원본 본문 해시를 기록하는 migration-061과 안전한 dry-run 기본 백필 도구를 추가했다. 검색은 현재 본문에서 만든 파생 데이터만 사용하며 긴급 롤백 스위치를 제공한다.
- 임베딩·합성 질의·사례 이벤트와 원본 파편의 amend/forget 경합을 실제 PostgreSQL에서 재현하는 차단 CI 레인을 추가했다.
Changed
- RRF 후보 병합이 의미·어휘·리랭커 채널의 근거를 보존하고, lexical-only 우선순위를 효용 점수와 분리한다. 컨텍스트 토큰 예산은 공용 토크나이저의 실제 계산값과 진단값을 사용한다.
- 핫 캐시 적중도 본문 해시, 검토 상태, 유효 기간, 키·워크스페이스 범위를 DB와 일괄 대조한다. 승인·거절·수정 직후에는 관련 캐시를 제거한다.
- 기존 데이터 벤치마크는 현재 키·워크스페이스 범위에서 정확한 본문 해시로 기대 파편을 찾고, 누락·중복·비유한 지표·평가 건수 불일치를 실패로 처리한다.
Fixed
- 비동기 임베딩과 합성 역질의가 amend 이전 본문에서 계산된 결과를 최신 파편에 기록할 수 있던 경합을 막았다.
- 파편 삭제와 사례 이벤트 기록이 겹칠 때 출처가 없는 이벤트·증거 파편이 남을 수 있던 경합을 막았다.
- 검색 경로별 중복 후보 병합에서 먼저 계산된 similarity와 lexical 근거가 사라지던 문제를 수정했다.